Desde una forma más sencilla de escribir WebAssembly hasta un lenguaje visual para el aprendizaje automático, estas 11 herramientas de programación podrían redefinir la forma de escribir software.
por Peter Wayner

¿Fue Alexander Pope quien dijo: “La esperanza brota eternamente en el pecho humano”? Pope era un poeta, no un hacker, pero creo que entendería la anticipación que implica descubrir un nuevo lenguaje de programación. Él sabría que los desarrolladores de software siempre tienen la esperanza de que este lenguaje , con su combinación única de caracteres Unicode, finalmente resuelva todos nuestros problemas, facilitando la codificación con solo unos pocos clics.
Pope seguramente entendería el deseo de una nueva sintaxis tan intuitiva que solo necesitamos imaginar una respuesta y verla convertida en reglas lógicas maravillosas, elaboradas y, sobre todo, correctas. Él apreciaría el anhelo en nuestros dedos de girar un nuevo código que se vea tan fácil y elegante como un triple axel, un tres y medio hacia adentro en la posición de pica o una carrera de slalom gigante en los Juegos Olímpicos.
Sin embargo, la mayoría de los lenguajes modernos no están creados por capricho o para demostrar nuestra destreza de codificación. Se crean en respuesta a un problema común que los creadores están ansiosos por resolver. Si bien la mayoría de los desarrolladores seguirán codificando todos los días en uno o más lenguajes más antiguos y establecidos, siempre estamos buscando nuevas herramientas que nos ayuden a resolver nuestros problemas de codificación. Podemos ver esta tendencia, especialmente, en el surgimiento de lenguajes específicos de dominio o DSL. Estos lenguajes son compactos y enfocados. No están destinados para uso general. Pero algunos podrían ganarse un lugar especial en su caja de herramientas exactamente por esa razón.
Aquí hay 11 idiomas más nuevos que han encontrado su nicho. Algunos son DSL, diseñados para hacer una cosa y hacerlo bien. Otros, aparentemente, aspiran a salvar el mundo. Incluso si no son lo que necesita en este momento, todos ellos tienen algo que enseñar sobre cómo hacer que nuestras computadoras hagan lo que hacen, pero mejor.
Clojure con React
Cuando unes Clojure con React, esto es lo que obtienes: un sistema que combina todas las posibilidades de los front-ends reactivos con la fuerza sólida y funcional de Clojure. En el mejor de los casos, Reactive Clojure le permite diseñar una colección compleja de componentes frontales y unirlos con funciones. El marco reactivo completa los detalles y garantiza que los datos de la aplicación fluyan sin problemas entre sus componentes y la base de datos. Clojure brinda la base funcional para hacer que incluso los casos de uso fuera de lo común sean posibles y depurables.
¿Es una pareja hecha en el cielo? El tiempo dirá. Reactive Clojure es una buena opción para escribir el código adhesivo que mantiene unidos los componentes frontales. Su modelo de subprocesos múltiples es una combinación natural para paneles complejos y reactivos que informan sobre múltiples tareas simultáneamente.
Níquel
Uno de los juegos más irónicos que juegan los programadores es enviar la mayor parte de nuestro trabajo a los archivos de configuración. Estos archivos, a menudo codificados en JSON, YAML o incluso XML, son una buena idea de codificación que se metastatiza en un elaborado ritual. En algunos casos, ni siquiera necesita escribir código real; simplemente mueva sin cesar los diversos archivos de configuración para hacer lo que necesita.
Tiene sentido, entonces, que tengamos Nickel : un lenguaje de programación para crear archivos de configuración. Nickel es como una plantilla con lógica incrustada, que puede usar para crear archivos de configuración que no sean estáticos. Un parámetro puede ser un valor durante la semana y otro diferente los fines de semana. Cuando se ejecuta, Nickel crea un nuevo archivo de configuración que se ajusta a todos los parámetros que recibe.
La estructura de Nickel es en gran medida funcional, y la verificación de tipos está disponible, si resulta útil. Un gran tema es la “corrección” porque una pieza bien escrita de código de Nickel prácticamente garantiza que la salida obedecerá tanto las reglas sintácticas como cualquier otra regla que necesites aplicar. El compilador de Nickel le permite escribir contratos, luego verifica que la salida los obedezca. Claro, hay algo divertido en escribir código para crear archivos de configuración que luego controlan su código. Pero es una solución muy práctica para las arquitecturas modernas.
Kobra
Los creadores de Kobra querían un lenguaje que abriera el aprendizaje automático a ingenieros, científicos y otros codificadores no tan profesionales. El resultado es lo que llaman un lenguaje visual para el aprendizaje automático. El editor de Kobra compone secuencias similares a códigos con mosaicos de arrastrar y soltar que representan rutinas integradas comunes para el análisis estadístico y el aprendizaje automático. El proceso se siente como R con marcos de datos construidos a partir de datos tabulares y una colección de funciones de visualización gráfica para crear tableros y documentos.
Bíceps
Una de las funciones más útiles de la nube es la capacidad de poner en marcha y desmontar servidores para gestionar los aumentos repentinos de datos. Antes, un equipo de hardware del centro de datos tardaba semanas en solicitar, instalar, probar y configurar una máquina. Ahora, la nube le permite hacer todo esto en minutos o incluso segundos.
Muchos equipos de desarrollo han comenzado a escribir código para las diversas API compatibles con las diferentes nubes. Microsoft decidió ir un poco más allá y crear un lenguaje simplificado para iniciar máquinas en Azure, como parte de su filosofía de infraestructura como código .
El lenguaje, llamado Bicep , ofrece un formato declarativo eficiente para deletrear la mayoría de los diferentes bits que un desarrollador podría querer cambiar en una nueva instancia. Algunos tipos básicos de seguridad pueden ayudar a prevenir errores y hay un editor consciente de la sintaxis disponible en VS Code. El lenguaje en sí está diseñado para un pensamiento de orden superior sobre la infraestructura, con una estructura fuertemente declarativa que le permite incluir instrucciones en cualquier orden y luego dejar que el administrador de recursos de Azure optimice la ejecución.
Frink
Un amigo afirma que su único requisito para elegir un banco es asegurarse de que el software de contabilidad del banco use números enteros para contar centavos y no números de punto flotante para fracciones de dólar. Los peligros de errores con punto flotante son bien conocidos y demasiado grandes. ¿Cuántos errores han sido causados por lanzar números sin mucho cuidado?
Frink es un lenguaje “consciente de unidades” creado solo para este problema. Cada variable en Frink no solo contiene un número, sino también una indicación de la unidad de medida, ya sea toneladas, vatios, pies o metros. La conversión de unidades es fácil gracias al archivo de configuración de Frink . El mecanismo central de Frink también utiliza números de precisión arbitrarios para reducir los problemas de redondeo. Es como la verificación de tipos pero para unidades numéricas de medida.
Fausto
La síntesis de sonido puede parecer un enfoque limitado, pero es muy útil para el desarrollo de juegos, la realidad virtual y cualquier aplicación que dependa de una buena calidad de sonido. Ingrese a Faust , un lenguaje específico de dominio que recibe su nombre de una amalgama de flujo de audio funcional . La estructura de Faust es puramente funcional y todas sus funciones construyen un canal de procesamiento de sonido. Su back-end descompone el sonido entrante en una representación numérica, y el código en sí es un conjunto de funciones que se pueden componer o combinar en un resultado final. Como ejemplo, podría crear un eco o una reverberación dividiendo la salida de su código e introduciendo un retraso. El código de Faust se transpila a C ++, C, código de bits LLVM, WebAssembly, Rust y algunos otros lenguajes, por lo que puede usarlo con casi cualquier proyecto.
Melrose y Glicol
Cualquiera que escriba código sabe cómo un programador comenzaría una banda: en lugar de publicar un anuncio para encontrar un baterista y luego entrevistar a todos los que respondan, simplemente escriba un código para deletrear los ritmos de una caja de ritmos. Una vez hecho esto, también podría reemplazar a todos los demás miembros de la banda con subrutinas. Incluso podrías construir una orquesta sinfónica completa de esa manera.
Melrōse y Glicol son dos lenguajes de programación musical diseñados para este estilo de creación musical. Ambos te permiten crear composiciones elaboradas con solo unas pocas pulsaciones de teclas. Melrōse trabaja a un alto nivel alrededor de la octava estándar de doce tonos común en la música occidental. Las notas se agrupan en secuencias y el software maneja gran parte del trabajo de corte como la transposición. La salida va a cualquier instrumento con capacidad MIDI y el código también puede reaccionar a las señales entrantes a través del puerto MIDI, por lo que el código Melrōse puede ser un miembro de la banda.
Glicol es una herramienta basada en Rust que realiza muchas de las mismas tareas pero desde un nivel inferior. El código se integra con el procesamiento de señales digitales para ofrecer una amplia gama de opciones musicales. La herramienta está diseñada para producir sonidos listos para el navegador con su motor de audio de código abierto. El desarrollador de Glicol dice que el lenguaje tiene “una tarifa de entrada baja y techos altos” para fomentar la colaboración con otras personas de todos los niveles.
WebAssembly y Wase
La forma más eficiente de enviar instrucciones a la computadora es codificarlas en binario y limitarlas al conjunto básico de operaciones utilizadas por las CPU. Cada chip tiene su propia sintaxis binaria favorita y algunos lenguajes como Pascal o Java tienen un formato binario neutral destinado a ejecutarse en una máquina virtual local. WebAssembly (Wasm) sigue estos pasos, ofreciendo a los navegadores web código binario predigerido combinado con texto en un formato estándar. El objetivo de WebAssembly es reemplazar el código JavaScript minimizado que forma la columna vertebral de las aplicaciones web con algo que esté aún más listo para ejecutarse, con una velocidad casi nativa.
Muchos desarrolladores usarán WebAssembly sin escribirlo directamente, utilizando compiladores que convierten lenguajes de nivel superior en WebAssembly que se ejecutará en navegadores. También hay un movimiento para crear lenguajes de bajo nivel que expongan gran parte de la estructura básica de WebAssembly en una forma legible por humanos. Wase es una de esas opciones, que ofrece una sintaxis similar a C con escritura fuerte.
WebAssembly también está encontrando un uso fuera de los navegadores web, como una forma general de codificar instrucciones con una máquina de pila similar a la JVM de Java. Redpanda , por ejemplo, es una plataforma de transmisión de datos que ofrece a los desarrolladores la oportunidad de ajustar o modificar los datos a medida que avanzan con el código escrito en WebAssembly.
JAVA17
Técnicamente, Java no es un lenguaje nuevo. De hecho, una de las mejores cosas de Java es que sus desarrolladores han hecho un gran trabajo manteniendo la compatibilidad con versiones anteriores. Por lo general, es bastante fácil compilar código que tiene 10 o incluso 20 años para las últimas JVM. No se garantiza que el código funcione, pero aun así es más fácil de compilar que casi cualquier otro lenguaje. El equipo de Java tiene un conjunto de millones de pruebas de integración, y se nota.
Incluyo Java 17 en esta lista porque se ha modernizado tanto que sería casi irreconocible para un viajero del tiempo de la década de 1990. Java 17 tiene tantas características y extensiones adicionales que cambian la forma en que codificamos.
Algunos, como el generador de números aleatorios mejorado o la semántica matemática de punto flotante más estricta, abordan los desafíos de escribir código numérico muy complejo. Los desarrolladores que escriben sistemas de contabilidad pueden salirse con la suya usando números enteros para contener la cantidad de centavos, pero aquellos que abordan algoritmos de IA y álgebra lineal compleja necesitan punto flotante.
Otros, como la encapsulación fuerte y la semántica de cambio extendida, aportan una mezcla de disciplina y flexibilidad al lenguaje central. En total, es más fácil que nunca escribir código más fuerte, más seguro y más seguro gracias a todas estas mejoras. Sigue siendo Java en su esencia, pero los extras marcan la diferencia.