

Discover more from La Naturaleza del Software
¿Necesitamos otros lenguajes de programación?
Analizando la propuesta de Douglas Crockford, segunda parte
Algo que apunta Douglas Crockford en su charla (que les dejé en el artículo anterior), es que hay muchos lenguajes de programación, en parte porque es muy fácil crearlos, y porque también es muy útil construir uno, es un ejercicio que te permite profundizar en tus conocimientos sobre computación.
La verdad es que es fácil construir un compilador, sólo si sabes como. Hace unos años yo hice el ejercicio de construir un lenguaje de programación en unas 60 horas de trabajo. No es el primer lenguaje que he diseñado, ni tampoco el primer compilador que he escrito. Esta es una afición que adquirí cuando tomé el curso de compiladores en mi carrera, y que incluso pude rentabilizar. Lamentablemente el curso de compiladores ha desaparecido en algunas carreras o es una materia opcional.
Quizás sea bueno, porque después de todo tenemos miles de lenguajes y muchas veces los nuevos lenguajes no aportan nada importante, o suficientemente relevante. Por otro lado para que un lenguaje gane tracción hay que invertir tiempo y a veces mucho dinero
.Una persona puede escribir un compilador, pero mantener y evolucionar el lenguaje y todo el ecosistema que lo rodea (bibliotecas, herramientas, corregir bugs, etc), requiere la participación de otros. La formación de una comunidad es un desafío formidable y muchos lenguajes nunca pasan de ser usados por su autor y unos pocos usuarios más.
Pero por qué alguien invertiría tiempo en crear un nuevo lenguaje?
Aparte el desafío personal, las razones pueden ser muy variadas:
Por ergonomía, o porque no te gusta la sintaxis de un lenguaje que estás usando, pero sabes que hay potencial en la tecnología subyacente. En el caso de la JVM, por ejemplo, aparecieron lenguajes como Groovy, que es un super conjunto de Java, pero que permite más flexibilidad, como por ejemplo omitir la declaración de tipos, simplificar la forma en que declaras los métodos, etc. Otro caso es Elixir, que construye una nueva sintaxis para reemplazar la de Erlang. Este lenguaje tiene una sintaxis y modelo inspirado en Prolog, pero José Valim, el autor de Elixir, era un programador que estaba acostumbrado a Ruby, así que creo inicialmente un sistema de macros que implementan una sintaxis muy similar a Ruby pero termina traduciéndose a Erlang. Finalmente, Ogú el lenguaje que escribí en el artículo que les mencioné arriba hace lo mismo, es un interprete que traduce la sintaxis por accidente.
Superar la incomodidad de lenguajes previos. Esto ocurrió con los primeros lenguajes, como Flow-Matic o Fortran. La idea era evitar tener que escribir en Assembler, o en lenguaje de máquina.
Adaptar lenguajes existentes para nuevos dominios. Por ejemplo, C++ fue creado para poder extender C con los conceptos de Simula (como las clases) para poder realizar simulaciones. C++ nace en Bell Labs, y ahí se usaba C como el lenguaje oficial, pero Stroustrup quería aprovechar los conceptos que proporcionaba el lenguaje Simula, sin perder el desempeño de C. Al igual que muchos de los casos mencionados, se usaron macros para implementarlo.
Para usar nuevos modelos de computación. Por ejemplo, Lisp iba a ser usado para procesar datos usando un lenguaje basado en Lambda Calculus. Lo curioso de este caso es que la sintaxis actual en realidad era un paso intermedio que luego sería usado por el lenguaje final, pero esta notación era tan fácil de procesar que quedó como la sintaxis final (me refiero al uso de paréntesis y la notación prefija).
Hay toda una serie de lenguajes que son más populares entre creadores de lenguajes, o académicos. Como Haskell, Scheme, BCPL, SmallTalk, etc.
Un ejemplo de esto se dio con SmallTalk, que fue creado para materializar la visión de la programación orientada al objeto concebida por Alan Kay. Cuando Brad Cox quizo usar objetos en C, casi en el mismo tiempo que en Bell Labs creaban C++, decidió modelar los objetos al estilo de SmallTalk y terminó creando ObjectiveC. Haskell, también es un lenguaje concebido como modelo para toda una familia de lenguajes funcionales (aunque en rigor la raíz de todo esto se encuentra en ML).Otra motivación es corregir el lenguaje subyacente, como por ejemplo TypeScript, que es traducido a Javascript finalmente, pero con su sintaxis corrige varios de los problemas de Javascript. Crockford en su charla menciona que ha creado un lenguaje llamado Neo, que al parecer está descrito en su libro “How JavaScript Works”, algo que no he comprobado, pero si tu has leído ese libro me cuentas que tal. Al parecer Neo elimina todo lo malo de Javascript
Y miles de razones más. Y hay una razón profunda detrás de esto, que expliqué en una charla que di hace muchos años atrás:
Pero hay un argumento que Crockford sostiene que vale la pena considerar, en mi opinión.
Muchos de los lenguajes de programación tradicionales, como por ejemplo C, Java, JavaScript, Pascal, etc, parten de un modelo de computación antiguo, que asume que nuestros programas corren en una máquina, o en otras palabras, en un solo procesador, además las instrucciones se ejecutan de manera secuencial.
Esto en realidad se da mucho más en los lenguajes imperativos, los lenguajes funcionales no asumen esta secuencialidad, lo que explica por que se han vuelto tan populares este tipo de lenguajes desde hace unos años, porque su modelo subyacente les permite trabajar mejor en entornos multi core.
Entonces Crockford nos invita a pensar nuevos lenguajes que superen estas restricciones impuestas por los lenguajes tradicionales. Lo que está muy bien, pero siento que es algo que varios estamos expresando desde hace años. Da la sensación de que este señor estuvo bajo la tierra todos los años, o quizás su compromiso con Javascript no le permitió ver más allá, porque yo diría que hace por lo menos 15 años que estamos tratando de alejarnos de los paradigmas imperativos.
Pero no importa, si ha visto la luz, bien, y de pasada ha descubierto el modelo de actores, del que hablaremos en el próximo artículo, en que estamos destrozando analizando la charla de Crockford.
Se dice que Sun Microsystems invirtió cerca de 500 millones de dólares para promover el uso de Java: https://www.theregister.com/2003/06/09/sun_preps_500m_java_brand/.
¿Necesitamos otros lenguajes de programación?
En resumen muy didactico. Siempre es bueno repasar el objetivo que cumplen los lenguajes de programación y en tu post se evidencia que son herramientas, artilugios construidos para facilitar la resolución de un problema, algo que casi siempre olvidamos. Gracias por recordarlo.