Encabezado Facultad de Ciencias
Presentación

Ciencias de la Computación (plan 2013) 2025-1

Quinto Semestre, Lenguajes de Programación

Grupo 7098, 40 lugares.
Profesor Manuel Soto Romero lu mi vi 11 a 12
Ayudante Demian Alejandro Monterrubio Acosta ma ju 11 a 12
Ayud. Lab. Erik Rangel Limón mi 14 a 16 Taller de Lenguajes de Programación
 

🏅 Descripción

El curso de lenguajes de programación está diseñado para ofrecer a los estudiantes una base sólida en la teoría y práctica de los lenguajes de programación. A lo largo de los temas, se explorará la historia, componentes y clasificación de estos lenguajes, así como su especificación formal a través de sintaxis concreta y abstracta, y semánticas dinámica y estática. El curso también abarca temas avanzados como variables, cálculo lambda, funciones, estrategias de evaluación, recursión, continuaciones, estado, sistemas de tipos y orientación a objetos. Al finalizar, los estudiantes podrán comprender y aplicar diversas técnicas y conceptos esenciales para el diseño, análisis y desarrollo de lenguajes de programación modernos.

☝️ Requisitos

Además de saber programar en algún lenguaje de programación, se recomienda haber llevado (y preferentemente aprobado) las siguientes materias para aprovechar al máximo el curso:

  • Estructuras Discretas
  • Autómatas y Lenguajes Formales
  • Lógica Computacional

Cualquier duda sobre la inscripción y los requisitos se puede consultar en el correo manu@ciencias.unam.mx.

💯 Evaluación

Exámenes parciales 30%

Se aplicarán un total de cuatro exámenes parciales que evaluarán una cuarta parte del curso respectivamente. Los exámenes 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 realizará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.

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 quincenales 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.

📚 Contenido

Unidad 01: Introducción

  • 1.1. Historia de los Lenguajes de Programación
  • 1.2. Componentes de los Lenguajes de Programación
  • 1.3. Clasificación de los Lenguajes de Programación

Unidad 02: Especificación Formal de un Lenguaje de Programación

  • 2.1. Sintaxis Concreta
  • 2.2. Sintaxis Abstracta
  • 2.3. Semántica Dinámica
  • 2.4. Semántica Estática

Unidad 03: Variables y Sustitución

  • 3.1. Expresiones let
  • 3.2. Sintaxis Abstracta de Orden Superior
  • 3.3. Sustitución
  • 3.4. Índices de Bruijn

Unidad 04: Cálculo Lambda

  • 4.1. Sintaxis
  • 4.2. Semántica
  • 4.3. Representación de Datos

Unidad 05: Funciones y Alcance

  • 5.1. Ambientes de Evaluación
  • 5.2. Azúcar Sintáctica
  • 5.3. Alcance Estático y Dinámico
  • 5.4. Cerraduras de Función

Unidad 06: Estategias de Evaluación

  • 6.1. Estrategias de Evaluación Clásicas
  • 6.2. Puntos Estrictos
  • 6.3. Estrategias de Evaluación y Alcance
  • 6.4. Cerraduras de Expresión

Unidad 07: Recursión

  • 7.1. Expresiones letrec
  • 7.2. Recursión mediante Ambientes Cíclicos
  • 7.3. Combinadores de Punto Fijo
  • 7.4. Combinadores Y y Z.

Unidad 08: Continuaciones

  • 8.1. Definición y uso de Continuaciones
  • 8.2. Máquinas Abstractas
  • 8.3. La Máquina Abstracta K
  • 8.4. Representación de Continuaciones mediante Funciones
  • 8.5. Estilo de Paso de Continuaciones (CPS)
  • 8.6. Manejo de Excepciones mediante Continuaciones

Unidad 09: Estado

  • 9.1. Una Máquina Abstracta con Memoria
  • 9.2. Variables vs. Referencias
  • 9.3. Estilo de Paso de Memoria (SPS)
  • 9.4. Técnicas de Paso de Parámetros

Unidad 10: Sistemas de Tipos

  • 10.1. Definición de Sistema de Tipos
  • 10.2. Verificación de Tipos
  • 10.3. Polimorfismo Paramétrico
  • 10.4. Inferencia de Tipos
  • 10.5. Seguridad de Sistemas de Tipos

Unidad 11: Orientación a Objetos

  • 11.1. Clases y Objetos
  • 11.2. Suptipificado
  • 11.3. Herencia

🛠️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.

 


Hecho en México, todos los derechos reservados 2011-2016. Esta página puede ser reproducida con fines no lucrativos, siempre y cuando no se mutile, se cite la fuente completa y su dirección electrónica. De otra forma requiere permiso previo por escrito de la Institución.
Sitio web administrado por la Coordinación de los Servicios de Cómputo de la Facultad de Ciencias. ¿Dudas?, ¿comentarios?. Escribenos. Aviso de privacidad.