Profesor | Manuel Soto Romero | lu mi vi | 11 a 12 | P210 |
Ayudante | Demian Alejandro Monterrubio Acosta | ma ju | 11 a 12 | P210 |
Ayudante | José Alejandro Pérez Márquez | ma ju | 11 a 12 | |
Ayud. Lab. | Erik Rangel Limón | mi | 14 a 16 | Taller de Lenguajes de Programación |
Ayud. Lab. | Dicter Tadeo García Rosas | mi | 14 a 16 |
Este curso profundiza en los conceptos esenciales y avanzados de los lenguajes de programación, proporcionando una sólida base teórica y habilidades prácticas para el diseño e implementación de lenguajes.
Además de saber programar en algún lenguaje de programación y comprender el funcionamiento y uso de estructuras de datos, se recomienda haber llevado (y preferentemente aprobado) las siguientes materias para aprovechar al máximo el curso:
Cualquier duda sobre la inscripción y los requisitos se puede consultar en el correo manu@ciencias.unam.mx.
Exámenes parciales 30%
Se aplicarán distintos exámenes parciales que incluirán principalmente problemas que se resuelvan usando los conceptos teóricos estudiados en el curso. Los exámenes se presentarán de forma individual. En caso de no poder presentar alguno de los exámenes en la fecha correspondiente, se tendrá una ronda de reposiciones y dos de finales.
Evaluaciones semanales 20%
Al final de cada semana, los días viernes, se asignarán pequeñas evaluaciones que permitirán medir el avance del grupo. Estas evaluaciones pueden consistir en preguntas conceptuales, ejecución de algoritmos, dinámicas en equipo, entre otras. El número de integrantes se definirá en función del tipo de evaluación. Se podrán entregar evaluaciones semanales a destiempo pero se tendrá una penalización de un punto por cada día de retraso.
Proyecto final 30%
Se asignará un proyecto final de investigación cuya solución requiera de una implementación poniendo en práctica los conocimientos adquiridos a lo largo del semestre. El proyecto incluirá la redacción de un reporte y la codificación de la solución usando el lenguaje de programación Haskell, que se estudiará a lo largo del curso en las sesiones de laboratorio. La solución del proyecto deberá presentarse ya sea mediante una exposición o mediante un vídeo, la forma de presentarlo se definirá cuando esté cerca su entrega y de acuerdo al avance del grupo.
Prácticas 20%
Se dejarán prácticas de laboratorio cuyo objetivo será implementar los algoritmos y técnicas estudiadas a lo largo del curso. Las implementaciones se realizarán en Haskell. Las prácticas podrán entregarse en equipos de máximo 3 integrantes. Se podrán entregar prácticas a destiempo pero se tendrá una penalización de un punto por cada día de retraso.
Sólo se otorgarán prórrogas por motivos extraordinarios y debidamente justificados.
Unidad 01: Introducción
Unidad 02: Especificación Formal de un Lenguaje de Programación
Unidad 03: Variables y Sustitución
Unidad 04: Cálculo Lambda
Unidad 05: Funciones y Alcance
Unidad 06: Estategias de Evaluación
Unidad 07: Recursión
Unidad 08: Continuaciones
Unidad 09: Estado
Unidad 10: Sistemas de Tipos
Unidad 11: Orientación a Objetos
🛠️Herramientas y tecnologías a utilizar
📖Bibliografía
[1] Krishnamurthi, S. (2023). Programming Languages Application and interpretation.
[2] Pierce, B. C. (2002). Types and programming languages. MIT Press.
[3] Gabbrielli, M., & Martini, S. (2023). Programming Languages: Principles and Paradigms. Springer.
[4] Winskel, G. (1993). The formal semantics of programming languages: An Introduction. MIT Press.
[5] Nielson, H. R., & Nielson, F. (2007). Semantics with Applications: An Appetizer. Springer.
[6] Lee, K. D. (2017). Foundations of programming languages. Springer.
[7] Igarashi, A., Pierce, B. C., & Wadler, P. (1999). Featherweight Java: A minimal core calculus for Java and GJ. ACM SIGPLAN Notices, 34(10), 132-146.