apps apps
facebook twitter instagram linkedin
Inicio Novedades
Curso “Lenguajes de Programación Modernos: Conceptos y Técnicas de Programación”
Curso “Lenguajes de Programación Modernos: Conceptos y Técnicas de Programación”
26-09-2019

El curso extracurricular “Lenguajes de Programación Modernos: Conceptos y Técnicas de Programación” estará a cargo del Mg. Marcelo Arroyo, y tiene como objetivos:

  • Proporcionar una introducción a los fundamentos referidos a los lenguajes de programación modernos, poniendo especial énfasis no solo en las nociones teóricas sino también en el impacto de su aplicación e implementación.
  • Comprender las tendencias en la evolución de los lenguajes de programación, los paradigmas y los mecanismos modernos de implementación.
  • Afianzar las técnicas de programación inducidas por los diferentes lenguajes seleccionados en el curso.
  • Analizar en profundidad los sistemas de tipos modernos y sus aplicaciones para el desarrollo de aplicaciones confiables y seguras.


Está dirigido a docentes, graduados, y a aquellos estudiantes de la Facultad que tengan aprobada la asignatura Programación Orientada a Objetos.


En total serán cuatro encuentros de dos días cada uno, que se dictarán en el aula 11 de la Facultad, según el siguiente cronograma:

  • 1er. encuentro: Viernes 4/10, de 17 a 21h y sábado 5/10, de 9 a 13h.
  • 2do. encuentro: Viernes 1/11, de 17 a 21h y sábado 2/11, de 9 a 13h.
  • 3er. encuentro: Viernes 15/11, de 17 a 21h y sábado 16/11, de 9 a 13h.
  • 4to. encuentro: Viernes 29/11, de 17 a 21h y sábado 30/11, de 9 a 13h.


Compartimos los contenidos de la actividad:

  • Unidad 1. Introducción: Panorama general de la evolución de los lenguajes de programación tradicionales (C, Lisp, C++, Java, C#, ML, Haskell, Prolog y otros) y de los de reciente aparición (Python, Lua, Ruby, Javascript, Erlang, Go, Scala, Rust, y otros). Paradigmas: Imperativo (procedural, orientado a objetos) vs declarativos (funcional, lógicos). Soporte de concurrencia y paralelismo. Lenguajes con tipado dinámico vs estático. Características sintácticas generales. Modelos de computación. Ambientes de ejecución: compilación vs interpretación, máquinas virtuales.
  • Unidad 2. Conceptos generales de lenguaje de programación: Sintaxis y semántica. Definición de la sintaxis: Gramáticas. Sintaxis: Declaraciones (nombres, ligaduras, alcance y tiempo de vida), sentencias y expresiones. Tipos de datos: Primitivos y definidos por el usuario. Verificación de tipos: estático vs dinámico. Técnicas de especificación de semántica: informal vs formal (input-output, operacional y denotacional). Gramáticas de atributos.
  • Unidad 3. Abtracciones: Componentes de software reusables. Tipos abstractos de datos: Abstracción procedural y de datos. Procedimientos y funciones. Mecanismos de pasaje de parámetros y evaluación. Equivalencia de tipos. Módulos y bibliotecas: espacios de nombres y paquetes.
  • Unidad 4. Compilación e interpretación: Compilación versus interpretación. Estructura de compiladores e intérpretes (análisis léxico, sintáctico y semántico, verificación de tipos, generación de código y optimización). Representación intermedia (IR). Ejemplos: jvm, .net, llvm, webassembly. Compilación dinámica (Just-In-Time). Unidades de compilación y linking. 
  • Unidad 5. Sistemas de tipos: Tipos finitos: primitivos, productos (registros, tuplas), sumas(uniones disjuntas), arreglos. Tipos recursivos. Polimorfismo: Generecidad, subtipos y herencia. Varianza (covarianza, contravarianza e invarianza). Implementación de herencia.
  • Unidad 6. Excepciones: Stack de control. Fallas y recuperación. Construcciones sintácticas y semánticas de excepciones. 
  • Unidad 7. Concurrencia y paralelismo: Arquitecturas paralelas. Eventos: Señales, canales y comunicación sincrónica (interacción). Modelos de programación paralela: fork-join, futuros y computación basada en eventos. Comunicación: memoria compartida (threads) vs pasaje de mensajes. Detalles de implementación. Problemas de la concurrencia: condiciones de carrera, deadlock. Sincronización.
  • Unidad 8. Evolución y nuevos lenguajes de programación: Análisis de la evolución de C++, ML, Haskell y Java. Análisis de las principales características de lenguajes de scripting (php, Python, Lua, Ruby, Javascript) y de lenguajes de reciente aparición (Erlang, Scala, Go, Rust).
  • Unidad 9. Conceptos avanzados. Desarrollo de lenguajes de dominio específicos (EDSL). Sistemas de tipos avanzados para denotar efectos, estado, concurrencia y seguridad. Sistemas de tipos graduales (gradual types).
  • Unidad 10. Análisis estático de programas. La necesidad de analizar código. Bug-finding, métricas, generación automática de casos de tests, refactorización. Técnicas: interpretación abstracta y ejecución simbólica. Casos de estudio: Borrow checker de Rust y clang static analyzer


Por cupos limitados, los interesados en participar en el curso deberán completar el siguiente formulario de inscripción: https://sfing.ing.unlpam.edu.ar/form_inscripciones/?pk=110


A continuación, dejamos a disposición la Resolución que aprueba la presente difusión:

Sumate a nuestra comunidad
facebook
twitter
instagram
linkedin