Enunciado TP final 2c 2022
#
Objetivo- Prioritario: que los alumnos hagan un aporte al "corpus" de conocimiento de la materia
- Que los alumnos tengan contacto con tecnologías industriales o proyectos académicos de otras universidades
#
Metodología y cronograma- TP individual
- El código se entrega en un repositorio privado compartido con los docentes
- Los alumnos pueden elegir entre varias alternativas de TPF
- Instancia obligatoria durante la cursada: Entrega final y exposición (10 a 15 mins) el 7/12 a las 19:00. El alcance varía según el tema elegido (ver sección Alcance)
- Instancias intermedias semi-obligatorias dentro del cuatrimestre
- Hasta el 1/11 a las 23:59 Proponer por discord tema elegido para el TPF. (+1 punto)
- Clase del 2/11: Dar charla relámpago a los compañeros sobre el tema
elegido (3 a 6 minutos) (+1 punto)
- Alcance:
- Qué es la herramienta o tecnología
- Qué recursos hay disponibles en internet
- Alcance:
- Participación en reuniones stand-up: (+0.5 puntos por reunión, 4 en
total)
- Qué hiciste esta semana
- Qué vas a hacer la semana que viene
- Consultas (Al final de la ronda)
- Si un alumno escucha a todos sus compañeros, obtiene los 0.5 puntos, aunque diga que no hizo nada esta semana, y no se comprometa a hacer nada en la semana siguiente (esta instancia no se evalúa).
- Entrega completa en época de finales con una pequeña entrevista donde el alumno nos muestra su TP
#
Ruta prototipado de lenguajes#
Alcance mínimo para el 7/12#
Contenido del repositorio- Desarrollar un parser que emita jsonlang, con una sintaxis personalizada, utilizando una herramienta que los docentes hayan autorizado.
- La sintaxis debe soportar todas las características del TP finalizado (es decir, no sólo aquellas características que ya tiene jsonlang).
- Tests automáticos de integración donde figuren ejemplos de programas fuentes y jsonlang emitido para cada uno. Los tests automáticos deben cubrir toda la sintaxis.
- Archivo README que describa:
- Instalación de dependencias adicionales
- Cómo ejecutar la suite de tests
- Responder: ¿Cuán facil fue aprender esta herramienta de parsing? ¿Por qué?
- Responder: ¿Recomendarías esta herramienta de parsing a futuros estudiantes de la materia? ¿Por qué?
- Responder: Liste ventajas y desventajas del uso de esta herramienta de parsing.
#
Contenido de la presentación- Debe durar entre 10 y 20 minutos (+0.5 puntos)
- Debe cumplir, como mínimo, lo siguiente: (+0.5 puntos)
- Responder: ¿En qué consiste la herramienta de parsing?
- Mostrar algo de código del TPF
- Listar ventajas y desventajas de la herramienta de parsing seleccionada
#
Alcance mínimo TOTAL (requerido para la aprobación de la materia)- Todo el alcance mínimo para el 7/12
- Agregar las siguientes funcionalidades a jsonlang:
- soporte para strings
- soporte para arrays
- soporte para diccionarios
- una de las siguientes alternativas:
- funciones como first class citizen y cierres
- Verificación de tipos estáticos y TDA (es decir, structs o records)
- Tests de integración que cubran todas las características requeridas. Los tests deben correr distintos programas (válidos e inválidos) de forma de probar todas las características agregadas. Los tests pueden ejecutar jsonlang o tu lenguaje.
- Responder en el README (aunque sea muy brevemente):
- Instalación de dependencias adicionales
- Cómo ejecutar la suite de tests
- ¿Cómo agregaste soporte para strings?
- ¿Cómo agregaste soporte para arrays?
- ¿Cómo agregaste soporte para diccionarios?
- (si aplica) ¿Cómo agregaste funciones como first class citizen?
- (si aplica) ¿Cómo agregaste cierres?
- (si aplica) ¿Cómo agregaste Verificación de tipos estáticos?
- (si aplica) ¿Cómo agregaste TDA?
#
Ruta tecnologías industriales#
Alcance mínimo para el 7/12- Implementación parcial de un traductor de jsonlang a otro código ejecutable ("target"), que los docentes hayan autorizado.
- Tests:
- Deben existir tests de integración automáticos del proceso de compilación. Estos tests deben compilar un fragmento de jsonlang y validar el resultado.
- Deben existir tests de integración automáticos de la ejecución. Estos tests deben correr el intérprete de jsonlang y/o la máquina virtual/plataforma utilizada, y verificar que el resultado de ambos sea idéntico.
- Al menos un test debe pasar. Se debe implementar una parte pequeña de jsonlang que sea lo suficientemente grande como para ejecutar exitosamente 1 test simple.
- Archivo README que describa:
- Instalación de dependencias adicionales
- Cómo ejecutar la suite de tests
- Responder las siguientes preguntas en prosa y/o usando pseudocódigo:
- ¿Cómo se traduce el
if
a esta plataforma o VM? - ¿Cómo se traduce el
while
a esta plataforma o VM? - ¿Cómo se traduce
call
a esta plataforma o VM? - ¿Cómo se traduce
return
a esta plataforma o VM? - ¿Cómo se traduce
DeclarationStatement
(declaración de funciones) a esta plataforma o VM? - ¿Cómo se traducen las expresiones a esta plataforma o VM?
- Listar él o los links que resultaron más útiles para responder esas preguntas.
- ¿Cómo se traduce el
#
Contenido de la presentación- Debe durar entre 10 y 20 minutos (+0.5 puntos)
- Debe cumplir, como mínimo, lo siguiente: (+0.5 puntos)
- Mostrar algo de bytecode y describir brevemente el lenguaje target
- Mostrar algo de código del TPF
#
Alcance mínimo TOTAL (requerido para la aprobación de la materia)- Todo el alcance mínimo para el 7/12
- Implementación completa del compilador: debe poder traducir todo jsonlang. Deben existir tests de integración que verifiquen la correcta ejecución y traducción de todas las características de jsonlang.
- Responder en el README (aunque sea muy brevemente):
- Instalación de dependencias adicionales
- Cómo ejecutar la suite de tests
- ¿Cómo implementarías arrays de largo fijo en este target?
- ¿Cómo implementarías una interfaz con la plataforma (uso de syscalls, librerías standard, etc) en este target?
- ¿Cuán facil fue aprender esta plataforma o VM? ¿Por qué?
- ¿Recomendarías esta plataforma o VM a futuros estudiantes de la materia? ¿Por qué?
- Liste ventajas y desventajas de trabajar en esta plataforma o VM.
#
Puntajes- Cumplir tiempos: 4 puntos
- (+1) Proponer por discord tema elegido para el TPF antes del 1/11 23:59
- (+1) Dar charla relámpago el 2/11
- (+2) Asistir a 4 standups (+0.5 cada una)
- Presentación 7/12: 1 punto
- (+0.5) Duración correcta (10 a 20 minutos)
- (+0.5) Cumple con el contenido de la sección Contenido de la presentación
- Documentación: 2 puntos
- Logrado: (1/2) Mínimo requerido por el alcance
- Muy logrado: (2/2) La documentación se explaya un poco más donde es posible, o supera al esquema mínimo requerido por el enunciado.
- Testing: 2 puntos
- Logrado: (1/2) Mínimo requerido por el alcance (tests de integración)
- Muy logrado: (2/2) Se agregan tests unitarios en alguna parte (además de los tests de integración requueridos), ó se mide cobertura de tests.
- Implementación: 2 puntos
- Logrado: (1/2) Mínimo requerido por el alcance
- Muy logrado: (2/2) Los docentes consideran que el código es de buena calidad.
#
Herramientas de parsers interesantes (en orden de interés)- https://racket-lang.org/
- https://www.antlr.org/
- https://pegjs.org/
- https://v2.ocaml.org/manual/lexyacc.html
- https://parboiled.org
- https://chevrotain.io/
- https://github.com/jzimmerman/langcc
- https://nearley.js.org/
- https://github.com/Geal/nom
- https://pest.rs/
#
Targets interesantes (en orden de interés)- LLVM ( https://llvm.org/docs/LangRef.html )
- JVM ( https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html , http://soot-oss.github.io/soot/ )
- webassembly ( https://webassembly.github.io/spec/core/ )
- assembly intel (x86 ó x64)
- LUA bytecode ( https://www.lua.org/manual/3.2/luac.html )
- Mozart VM ( https://github.com/mozart/mozart2/tree/master/vm )
- assembly arm
- machine code (linux x86)
- Roslyn ( https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/ )
- elvm ( https://github.com/shinh/elvm )
Puntaje final de la materia
El puntaje final de la materia se asigna de la siguiente manera:
Donde es la nota del laboratorio y es la nota del TP final. es la nota final de la materia, no existe nota de cursada separada de la nota de final.
Nótese que tanto como pueden ser mayores a 10, pero la nota final puede ser como máximo 10. es un entero sin coma, redondeada al entero más cercano.
Definiciones prototipado de lenguajes (15/12/22).
Esta definición no modifica el alcance original del TPF sino que aclara una parte del mismo que era poco clara pero no ambigua. Parte de lo que se detalla a continuación, se discutió en clase pero no quedó escrito.
Respecto del item del alcance mínimo TOTAL que dice:
Agregar las siguientes funcionalidades a jsonlang
- soporte para string
- soporte para array
- soporte para diccionario
- una de las siguientes alternativas
- funciones como first class citizen y cierre
- Verificación de tipos estáticos y TDA (es decir, structs o records)
Se aclara lo siguiente:
- Agregar funcionalidades a jsonlang significa no sólo agregarlas a la sintaxis que se entregó el 7/12, sino también implementarlas en el intérprete de jsonlang que se elaboró en el laboratorio 5. Se deben implementar un mínimo de operaciones que permitan hacer todo lo que es esperable hacerle a un string, array, diccionario o TDA en cualquier lenguaje de programación; e implementar las funciones más avanzadas que se encuentran en las librerías standard de los lenguajes utilizados comunmente. A continuación se propone un nucleo de operaciones que cumplen esta condición.
- strings:
- creación por medio de literales
- obtener longitud
- acceso de un substring por índice ( algo como String.prototype.slice() )
- comparación de strings (el operador < entre strings en javascript)
- concatenación de strings (el operador + entre strings en javascript)
- Soporte para array:
- creación de array vacío
- obtener longitud
- acceso de un elemento por índice (accesor [ ] de la mayoría de los lenguajes)
- asignación de un elemento por índice (accesor [ ] de la mayoría de los lenguajes, pero a la izquierda de una asignación)
- soporte para diccionario:
- creación de diccionario vacío
- acceso de un elemento por índice (accesor [ ] de la mayoría de los lenguajes)
- asignación de un elemento por índice (accesor [ ] de la mayoría de los lenguajes, pero a la izquierda de una asignación)
- obtener lista de claves del diccionario
- funciones first class citizen y cierres:
- creación de funciones anónimas
- pasaje de funciones anónimas como parámetro
- invocación de funciones anónimas
- TDA (structs o records):
- creación de instancias del TDA
- acceso de campos (debe ser verificado por el type checker)
- asignación a campos (verificado por el type checker)
- strings:
- Se deben agregar test automáticos que demuestren el correcto funcionamiento de cada una de estas operaciones.