Chris Lattner, uno de los creadores de LLVM y Swift, ha estado desarrollando un nuevo lenguaje basado en la sintaxis de Python pero pensado para atacar su punto m谩s d茅bil: la velocidad de ejecuci贸n.
Este lenguaje se llama Mojo, y est谩 siendo publicitado como un lenguaje para hacer aplicaciones de inteligencia artificial. Como ya dijimos, su enfoque principal est谩 en ser un lenguaje que produzca programar eficientes, por lo que puede ser usado para cualquier aplicaci贸n que requiera alto rendimiento o hacer una gran cantidad de c谩lculos, justo como las aplicaciones de machine learning.
En este art铆culo veremos el motivo detr谩s de su nacimiento, sus caracter铆sticas y analizaremos si te conviene aprenderlo o deber铆as buscar alguna otra alternativa. Primero, entendamos la fundaci贸n de Mojo.
MLIR - Representaci贸n intermedia multi-capa
LLVM es un proyecto que se define como infraestructura para la construcci贸n de compiladores. Imag铆nate que es como un framework para construir compiladores. Muchos de los lenguajes actuales est谩n creados usando este proyecto. Por ejemplo Rust, Swift y Julia est谩n construidos sobre LLVM.
Una de las partes que hace muy 煤til a LLVM es su representaci贸n intermedia. Esta representaci贸n intermedia permite que los diferentes lenguajes de programaci贸n que funcionan sobre 茅l se aprovechen de las optimizaciones que LLVM hace sobre el c贸digo intermedio. El flujo del c贸digo es el siguiente:
- El c贸digo fuente es compilado a c贸digo intermedio (IR).
- El IR es optimizado.
- El IR es compilado a c贸digo de m谩quina.
De hecho, se dice que Swift es s贸lo az煤car sint谩ctico sobre la representaci贸n intermedia de LLVM, es decir, que se parece mucho a esta representaci贸n intermedia y aprovecha sus caracter铆sticas.
MLIR (Multi-layer Intermediate Representation o Representaci贸n intermedia multi-capa) es una representaci贸n intermedia de m谩s alto nivel que la representaci贸n intermedia tradicional. No en el sentido de que sea m谩s f谩cil de entender para los humanos, sino que en vez de mapearse directamente con una infraestructura de compilaci贸n, representa un modelo m谩s abstracto que puede ser mapeado a diferentes infraestructuras de compilaci贸n, de manera especializada para cada una de ellas. As铆 permite que un mismo c贸digo fuente pueda ser compilado para diferentes ejecutores, como GPU鈥檚, TPU鈥檚, CPU鈥檚, etc, sin tener que crear una nueva representaci贸n intermedia o crear nuevo c贸digo fuente.
Entra Mojo 馃敟
Toda esta explicaci贸n anterior es para entender que Mojo es para MLIR lo que Swift es para LLVM. Aprovecha gran parte de las caracter铆sticas de MLIR para crear un lenguaje de programaci贸n que pueda usar ejecutores especializados en c贸mputo de alto rendimiento como GPU鈥檚 y TPU鈥檚, pero presentando una sintaxis m谩s amigable para los humanos, a diferencia de CUDA, o C++, por ejemplo.
Mojo te ayuda aprovechar el paralelismo masivo de los GPU鈥檚 sin tener que preocuparte por aprender un nuevo lenguaje o siquiera tener que pensar en d贸nde finalmente se ejecutar谩 tu programa.
Ya que Python es la lingua franca del mundo de la inteligencia artificial, Mojo inicialmente fue pensado como una extensi贸n de Python (lo que llamar铆amos un superconjunto de Python), en el sentido de que todo el c贸digo v谩lido en Python es c贸digo v谩lido en Mojo, muy parecido a la relaci贸n que existe entre la sintaxis de TypeScript y JavaScript.
Caracter铆sticas de Mojo
Las pruebas iniciales de Mojo revelan que puede ser hasta 68,000 veces m谩s r谩pido que Python en ciertas tareas (s铆, le铆ste bien sesenta y ocho mil), mientras que C++ llega a ser s贸lo 5,000 veces m谩s r谩pido. Claro, esto no habla muy bien de Python, pero debes pensar en que su objetivo no es ser un lenguaje de alto rendimiento, sino un lenguaje de alto nivel y f谩cil de usar.
Mojo quiere aprovechar la facilidad de uso de Python junto con su ecosistema de bibliotecas y desarrollos para hacer un ecosistema de desarrollo de inteligencia artificial m谩s r谩pido y f谩cil de usar. Una de las primeras diferencias con Python es que es un lenguaje compilado.
Hablemos de algunas de las cosas que Mojo le aumenta a Python:
-
Sistema de tipos progresivos. Te permite usar el sistema de tipos tanto como lo necesites (por eso es progresivo). Pero debes tener en cuenta que los tipos te sirven tanto para verificar que el programa es correcto como para optimizar el c贸digo que se genera.
-
Abstracciones sin costo. Muy parecido a Rust, Mojo te da acceso a usar abstracciones de alto nivel que no incrementan el costo de ejecuci贸n.
-
Seguridad de memoria. Tiene un sistema de seguridad de memoria parecido al de Rust, mediante la pertenencia y el pr茅stamo de referencias (ownership + borrow checker).
-
Metaprogramaci贸n. Te permite crear c贸digo parametrizado que se transforma en tiempo de compilaci贸n.
Como puedes ver, Mojo es un lenguaje muy interesante que aprovecha las caracter铆sticas que hemos aprendido en lenguajes modernos que han sido 煤tiles para crear mejores sistemas. El uso de MLIR es la base de su rendimiento, que permite que los programas que generas se puedan optimizar para ejecutores de diferentes tipos, incluidos algunos masivamente paralelos.
驴Deber铆as aprenderlo?
Mojo es un lenguaje que servir谩 tanto para hacer aplicaciones de IA como herramientas de bajo nivel para sistemas operativos, por lo que yo lo pensar铆a como un lenguaje de programaci贸n de sistemas de 煤ltima generaci贸n que permitir谩 hacer cosas muy interesantes en el futuro.
Ahora mismo (Diciembre de 2023), es un lenguaje de c贸digo cerrado, es decir, su desarrollo est谩 llevado por una empresa privada y el c贸digo fuente no est谩 disponible para que otros lo vean o contribuyan. Seg煤n Lattner, esto permite inicialmente que se se avance de manera m谩s efectiva, en lo que personalmente estoy de acuerdo. Se espera que Mojo sea de c贸digo abierto cuando alcance el nivel de madurez necesario.
Adem谩s, est谩 en una etapa muy temprana de su desarrollo en la que ni siquiera cumple con todas las caracter铆sticas de Python, por lo que todo lo que aprendas ahora s贸lo ser谩 un vistazo que te puede ayudar a definir si lo quieres usar cuando salga su versi贸n lista para producci贸n.
Personalmente, creo que es un buena inversi贸n del tiempo si est谩s metido en crear aplicaciones de alto rendimiento, programaci贸n de sistema o quieres crear sistemas que usen inteligencia artificial como una de sus caracter铆sticas principales. Por el contrario, para desarrollo web creo que tomar谩 un poco m谩s de tiempo en serte 煤til.
Otro caso para el que puede serte 煤til es para aprender las caracter铆sticas de los lenguajes modernos, como los tipos progresivos o la seguridad de memoria mediante el pr茅stamos de referencias.
Conclusi贸n
Mojo es un lenguaje interesante, muy prometedor y que est谩 en la raya de la innovaci贸n en creaci贸n de lenguajes y caracter铆sticas modernas. Si eres curioso y te gustan en general los lenguajes de programaci贸n, creo que es una gran opci贸n para empezar a aprender y tal vez en el futuro recoger los beneficios si cumple con sus promesas.
Comentar