El creador de LLVM desarrolla un nuevo lenguaje de programación llamado Mojo

Chris Lattner, fundador y arquitecto principal de LLVM, así como creador del lenguaje de programación Swift, y Tim Davis, exjefe de proyectos de IA en Google, como TensorFlow y JAX, han presentado un nuevo lenguaje de programación llamado Mojo, que combina la facilidad de uso para el desarrollo de investigaciones y la creación rápida de prototipos con la adecuación para la formación de productos finales de alto rendimiento. Esto se logra gracias al uso de la sintaxis familiar del lenguaje Python, y lo segundo por su capacidad de compilar a código máquina, mecanismos de gestión segura de la memoria y el empleo de recursos para la aceleración hardware de cálculos.

El proyecto se centra en su uso para desarrollos en el campo del aprendizaje automático, pero se presenta como un lenguaje de propósito general que amplía las capacidades de Python con herramientas de programación de sistemas y es apto para una amplia gama de tareas. Por ejemplo, el lenguaje es aplicable en áreas como la computación de alto rendimiento, así como en el procesamiento y la transformación de datos. Un aspecto interesante de Mojo es la posibilidad de especificar el símbolo emoji "🔥" como extensión para los archivos de código (por ejemplo, "helloworld.🔥"), además de la extensión de texto ".mojo".

Actualmente, el lenguaje se encuentra en una fase de desarrollo intensivo y solo se ha propuesto una interfaz en línea para pruebas. Se prometen versiones separadas para su ejecución en sistemas locales más adelante, tras recibir comentarios sobre el funcionamiento del entorno web interactivo. Los textos fuente del compilador, JIT y otros desarrollos relacionados con el proyecto se espera abrirlos una vez que se complete el diseño de la arquitectura interna (el modelo de desarrollo de un prototipo de trabajo a puerta cerrada recuerda las etapas iniciales de LLVM, Clang y Swift). Dado que la sintaxis de Mojo se basa en Python y su sistema de tipos es similar al de C/C++, se planea desarrollar herramientas para facilitar la migración de proyectos existentes escritos en C/C++ y Python a Mojo, así como para el desarrollo de proyectos híbridos que combinen código de Python y Mojo.

El proyecto está diseñado para aprovechar los recursos de hardware disponibles en sistemas heterogéneos para realizar cálculos. Por ejemplo, para ejecutar aplicaciones en el lenguaje Mojo y paralelizar cálculos, se pueden utilizar GPU, aceleradores especializados para aprendizaje automático y instrucciones de procesadores vectoriales (SIMD). Como razón para desarrollar un subconjunto separado del lenguaje Python en lugar de trabajar en la optimización del CPython existente, se menciona la orientación hacia la compilación, la integración de capacidades de programación de sistemas y el uso de una arquitectura interna fundamentalmente diferente que permite ejecutar código en GPU y varios aceleradores de hardware. Al mismo tiempo, los desarrolladores de Mojo buscan mantener la compatibilidad con CPython tanto como sea posible.

Mojo puede usarse tanto en modo interpretación con JIT como para compilar a archivos ejecutables (AOT, ahead-of-time). El compilador integra tecnologías modernas de optimización automática, almacenamiento en caché y compilación distribuida. Los códigos fuente en el lenguaje Mojo se transforman en un código intermedio de bajo nivel MLIR (Multi-Level Intermediate Representation), desarrollado por el proyecto LLVM y que proporciona capacidades adicionales para optimizar el procesamiento del grafo de flujo de datos. El compilador permite utilizar diferentes backends que admitan MLIR para la generación de código máquina.

La utilización de mecanismos de hardware adicionales para acelerar los cálculos permite lograr un rendimiento que, en cálculos intensivos, supera al de aplicaciones en C/C++. Por ejemplo, al probar una aplicación para generar múltiples conjuntos de Mandelbrot, la aplicación compilada en el lenguaje Mojo, al ejecutarse en la nube de AWS (r7iz.metal-16xl), resultó ser 6 veces más rápida que la implementación en C++ (0.03 seg. frente a 0.20 seg.), así como 35,000 veces más rápida que la aplicación en Python utilizando el CPython estándar 3.10.9 (0.03 seg. frente a 1027 seg.) y 1500 veces más rápida con PYPY (0.03 seg. frente a 46.1 seg.).

Al evaluar el rendimiento en la solución de tareas de aprendizaje automático, el stack de IA Modular Inference Engine, escrito en el lenguaje Mojo, resultó ser tres veces más rápido en un sistema con procesador Intel al procesar modelos de lenguaje, 6.4 veces más rápido al ejecutar modelos de recomendación y 2.1 veces más rápido al trabajar con modelos de procesamiento visual en comparación con la solución basada en la librería TensorFlow. En procesadores AMD, el incremento de rendimiento al usar Mojo fue de 3.2, 5 y 2.2 veces, y en procesadores ARM fue de 5.3, 7.5 y 1.7 veces, respectivamente. La solución basada en PyTorch quedó rezagada frente a Mojo en 1.4, 1.1 y 1.5 veces en CPU Intel, en 2.1, 1.2 y 1.5 veces en CPU AMD, y en 4, 4.3 y 1.3 veces en CPU ARM.

El creador de LLVM desarrolla un nuevo lenguaje de programación llamado Mojo

El lenguaje soporta tipado estático y herramientas para un manejo seguro de bajo nivel de la memoria, similares a las capacidades del lenguaje Rust, como el seguimiento de la vida útil de las referencias y la verificación de préstamos de variables (borrow checker). Además de las herramientas para un manejo seguro de punteros, el lenguaje también ofrece funcionalidades para trabajar a bajo nivel, como el acceso directo a la memoria en modo unsafe utilizando el tipo Pointer, la invocación de instrucciones SIMD individuales o el acceso a extensiones hardware como TensorCores y AMX.

El creador de LLVM desarrolla un nuevo lenguaje de programación llamado Mojo

Para facilitar la separación del código clásico y el código Python optimizado para funciones con definición explícita de tipos para todas las variables, se propone utilizar una nueva palabra clave «fn» en lugar de «def». De manera similar, para las clases, si se necesita empaquetar datos estáticamente en memoria durante la compilación (como en C), se puede utilizar el tipo «struct» en lugar de «class». También es posible importar módulos de lenguajes C/C++, por ejemplo, para importar la función cos de la librería math, se puede especificar «from «math.h» import cos».

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster