Llegamos a ustedes gracias a:



Reportajes y análisis

11 nuevos lenguajes de programación que alegrarán al programador

[25/05/2022] ¿Fue Alexander Pope quien afirmó: "la esperanza brota eternamente en el pecho humano? Pope era un poeta, no un hacker, pero creo que entendería la expectativa 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 sus problemas, facilitando la codificación con solo unos pocos clics.

Pope seguramente entendería el deseo de una nueva sintaxis tan intuitiva que solo necesitemos 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 crear un nuevo código derivado que se vea tan fácil y elegante como un triple axel, un tres y medio hacia adentro en posición de carpa o una carrera de slalom gigante en los Juegos Olímpicos.

[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]

Sin embargo, la mayoría de los lenguajes modernos no están creados por capricho o para demostrar nuestra destreza en la 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 programando 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 (por sus siglas en inglés). Estos lenguajes son compactos y enfocados. No están destinados para uso general. Pero, exactamente por esa razón, algunos podrían ganarse un lugar especial entre sus herramientas.

A continuación, 11 lenguajes muy recientes que han encontrado su nicho. Algunos son DSLs diseñados para hacer una sola cosa y hacerla 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.

Reactive Clojure

Cuando une Clojure con React, esto es lo que obtiene: un sistema que combina todas las posibilidades de los front ends reactivos con la sólida y funcional fuerza 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 que los errores puedan depurarse.

¿Es una pareja hecha en el cielo? El tiempo lo 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.

Nickel

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 hace metástasis 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 integrada, 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 usted necesite aplicar. El compilador de Nickel le permite escribir contratos, luego verifica que el output 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 pusiera el aprendizaje automático a disposición de 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 un código mediante mosaicos que se arrastran y sueltan que representan rutinas comunes integradas para el análisis estadístico y el aprendizaje automático. El proceso parece 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.

Bicep

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. Anteriormente, 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 APIs soportadas por las diferentes nubes. Como parte de su filosofía de infraestructura como código, Microsoft decidió ir un poco más allá y crear un lenguaje simplificado para iniciar máquinas en Azure.

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 una nueva instancia. Algunos tipos básicos de seguridad pueden ayudar a evitar 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 las unidades, creado específicamente 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.

Faust

La síntesis de sonido puede parecer un enfoque limitado, pero es muy útil para el desarrollo de juegos, 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 backend 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 recompila 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. Usted podría incluso construir una orquesta sinfónica completa de esa manera.

Melrose y Glicol son dos lenguajes de programación musical diseñados para este estilo de creación musical. Ambos le permiten crear composiciones elaboradas con solo unas pocas pulsaciones de teclas. Melrose trabaja a un alto nivel alrededor de la octava estándar de 12 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. El output 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 Melrose 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 afirma 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, ofreciéndoles a los navegadores web un código binario, digerido previamente y 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 y 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 existe 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 stack similar a la JVM de Java. Redpanda, por ejemplo, es una plataforma de transmisión de datos que les ofrece a los desarrolladores la oportunidad de ajustar o modificar los datos a medida que avanzan con el código escrito en WebAssembly .

Java 17

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 los años noventa. 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 inteligencia artificial 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 y más seguro gracias a todas estas mejoras. Sigue siendo Java en su esencia, pero los extras marcan la diferencia.

Puede ver también: