Una década desarrollando un lenguaje de programación
Un esfuerzo de una década por construir un nuevo lenguaje de programación provoca reflexiones sobre qué funciona realmente en el diseño e implementación de lenguajes. Los comentaristas sopesan las ventajas y desventajas del tipado estático, dinámico y gradual (con muchos críticos del tipado gradual para lenguajes nuevos), la dificultad práctica de implementar comprobadores de tipos y herramientas robustas, y el valor de apuntar a plataformas existentes como LLVM, WASM o la JVM. La conversación también destaca lo difícil que es conseguir una base de usuarios, por qué la mayoría de los lenguajes nuevos siguen siendo de nicho y por qué unos objetivos claros y casos de uso reales importan más que unas características ambiciosas pero poco enfocadas.
Tipado gradual: valor vs. inconvenientes
- Muchos coinciden con la recomendación del artículo: para lenguajes nuevos, el tipado gradual añade complejidad sin beneficios proporcionales. Es mejor elegir entre estático o dinámico (normalmente estático) y apoyarse en la inferencia.
- Otros sostienen que el tipado gradual es muy útil cuando se añaden tipos a ecosistemas dinámicos grandes (JS→TS, Python, Elixir/Erlang, Raku), o cuando se necesitan “vías de escape” (DSL de configuración, interoperabilidad).
- Algunos lo ven como una herramienta de migración hacia el tipado estático, no como un estado final.
- Varios señalan que existe un espectro de sistemas graduales; el rendimiento y la seguridad dependen mucho de cómo se impongan los límites entre código tipado y no tipado.
Productividad y seguridad: estático frente a dinámico
- Algunos afirman que no son más productivos en lenguajes dinámicos/graduales que en los estáticos; el costo inicial de las anotaciones se amortiza con el tiempo.
- Otros citan evidencia empírica limitada en ambos sentidos y subrayan que la productividad depende del dominio del problema, el tamaño del equipo, el ecosistema del lenguaje y la preferencia personal.
- Una crítica recurrente: “encontrar unos pocos errores” mediante comprobaciones débiles o voluntarias (por ejemplo, la configuración predeterminada de Python/mypy) puede dar una falsa sensación de seguridad si no cambia las pruebas/el flujo de trabajo.
Python y el tipado gradual en la práctica
- Las experiencias con grandes bases de código Python tipadas son mixtas:
- Pro: las pistas de tipo mejoran la documentación y detectan algunos errores difíciles de reproducir.
- Con: los stubs de terceros se desincronizan, las herramientas “fallan abierto” por defecto, y las anotaciones no aplicadas o ignoradas pueden inducir a error.
- Pyright recibe elogios por sus valores predeterminados más estrictos que mypy. Se menciona PHP como un lenguaje que aplica los tipos graduales en tiempo de ejecución, en contraste con las pistas puramente estáticas de Python.
La comprobación de tipos es conceptualmente simple pero está mal documentada
- Varios implementadores de lenguajes dicen que los comprobadores de tipos son, en su mayoría, lógica sencilla una vez fijada la semántica, pero que el material de aprendizaje bueno escasea.
- Los libros académicos populares se ven como pesados y demasiado centrados en la teoría, con pocos programas concretos o recorridos prácticos.
- Se comparten varios enlaces a series de blog, pequeñas implementaciones de HM y recursos al estilo “Crafting Interpreters”; hay una clara demanda de un libro sobre comprobación de tipos accesible y centrado en la implementación.
Otros temas de diseño e implementación de lenguajes
- El uso de plataformas existentes (JVM, BEAM, JS, LLVM, WASM) y sus cadenas de herramientas está ampliamente respaldado para evitar escribir generadores de código, enlazadores o toolchains completos a medida.
- El autoalojamiento se considera costoso; algunos argumentan que el arranque moderno con WASM/WASI lo hace más factible, mientras que otros advierten no copiar sin más proyectos prominentes.
- Los S-expresiones/Lisp se valoran por su análisis trivial y por evitar disputas de sintaxis; muchos señalan que analizar rara vez es lo difícil en comparación con la semántica y los sistemas de tipos.
- Varios comentaristas subrayan: definir usuarios objetivo y dominios de problema claros; la mayoría de los lenguajes “marginales” siguen siendo de nicho, pero incluso los lenguajes fallidos pueden aportar ideas.