stringtranslate.com

Mojo (lenguaje de programación)

Mojo es un lenguaje de programación de la familia Python que actualmente se encuentra en desarrollo. [3] [4] [5] Está disponible tanto en navegadores a través de Jupyter notebooks , [5] [6] como localmente en Linux y macOS . [7] [8] Mojo tiene como objetivo combinar la usabilidad de un lenguaje de programación de alto nivel , específicamente Python , con el rendimiento de un lenguaje de programación de sistema como C++ , Rust y Zig . [9] A partir de 2024 , el compilador Mojo es un software propietario (código cerrado) con una biblioteca estándar de código abierto . Modular, la empresa detrás de Mojo, ha declarado su intención de eventualmente abrir el código fuente del lenguaje Mojo, a medida que madure. [10]

Mojo se basa en el marco de software de compilación de Representación Intermedia Multinivel ( MLIR ) en lugar de directamente en el marco de compilación de nivel inferior LLVM , como lo hacen muchos lenguajes como Julia , Swift , Clang y Rust. [11] [12] MLIR es un marco de compilación más nuevo que permite a Mojo explotar pases de compilación de nivel superior no disponibles solo en LLVM, y permite a Mojo compilar y apuntar a más que solo unidades centrales de procesamiento (CPU), incluida la producción de código que puede ejecutarse en unidades de procesamiento gráfico (GPU), unidades de procesamiento tensor (TPU), circuitos integrados específicos de la aplicación (ASIC) y otros aceleradores. También puede usar a menudo de manera más efectiva ciertos tipos de optimizaciones de CPU directamente, como instrucción única, datos múltiples (SIMD) sin intervención directa de un desarrollador, como ocurre en muchos otros lenguajes. [13] [14] Según Jeremy Howard de fast.ai, Mojo puede considerarse como un " azúcar sintáctico para MLIR" y por esa razón Mojo está bien optimizado para aplicaciones como la inteligencia artificial (IA). [15]

Historia del origen y desarrollo

El lenguaje de programación Mojo fue creado por Modular Inc, que fue fundada por Chris Lattner , el arquitecto original del lenguaje de programación Swift y LLVM , y Tim Davis, un ex empleado de Google . [16] La intención detrás de Mojo es cerrar la brecha entre la facilidad de uso de Python y el rápido rendimiento requerido para aplicaciones de IA de vanguardia. [17]

Según los registros de cambios públicos, el desarrollo de Mojo se remonta a 2022. [18] En mayo de 2023, la primera versión que se podía probar públicamente se puso a disposición en línea a través de un patio de juegos alojado. [19] En septiembre de 2023, Mojo estaba disponible para descarga local para Linux [20] y en octubre de 2023 también estaba disponible para descarga en macOS de Apple . [21]

En marzo de 2024, Modular abrió el código fuente de la biblioteca estándar Mojo y comenzó a aceptar contribuciones de la comunidad bajo la licencia Apache 2.0. [22] [23]

Características

Mojo fue creado para facilitar la transición desde Python. El lenguaje tiene una sintaxis similar a la de Python, con tipado estático inferido, [24] y permite a los usuarios importar módulos de Python . [25] Utiliza LLVM y MLIR como su backend de compilación. [5] [26] [27] El lenguaje también pretende añadir una interfaz de función externa para llamar a código C/C++ y Python. El lenguaje no es compatible con Python 3, solo proporciona un subconjunto de su sintaxis , por ejemplo, falta la palabra clave global , las comprensiones de listas y diccionarios, y el soporte para clases. Además, Mojo también añade características que permiten una programación de bajo nivel de alto rendimiento: fn para crear funciones compiladas tipadas y "struct" para alternativas optimizadas para la memoria a las clases . Las estructuras de Mojo admiten métodos , campos , sobrecarga de operadores y decoradores . [6]

El lenguaje también proporciona un verificador de préstamos , una influencia de Rust . [28] Las funciones def de Mojo usan semántica de valor por defecto (las funciones reciben una copia de todos los argumentos y cualquier modificación no es visible fuera de la función), mientras que las funciones Python usan semántica de referencia (las funciones reciben una referencia en sus argumentos y cualquier modificación de un argumento mutable dentro de la función es visible afuera). [29]

El lenguaje no es de código abierto, pero está previsto que lo sea en el futuro. [30]

Ejemplos de programación

En Mojo, las funciones se pueden declarar utilizando tanto fn (para funciones de alto rendimiento) como def (para compatibilidad con Python). [25]

Operaciones aritméticas básicas en Mojo con una función def :

def  sub ( x ,  y ): """Una resta pitónica.""" res = x - y return res        

y con una función fn :

fn  add ( x : Int , y : Int ) -> Int : """Una adición rustácea.""" let res : Int = x + y return res          

La forma en que Mojo emplea var y let para las declaraciones de variables mutables e inmutables respectivamente refleja la sintaxis que se encuentra en Swift. En Swift, var se utiliza para variables mutables, mientras que let se designa para constantes o variables inmutables. [25]

Declaración y uso de variables en Mojo:

fn  main () : sea x = 1 sea y : Int y = 1          var z = 0 z + = 1      

Uso

El SDK de Mojo permite a los programadores de Mojo compilar y ejecutar archivos fuente de Mojo localmente desde una interfaz de línea de comandos y actualmente es compatible con Ubuntu y macOS. [31] Además, existe una extensión de Mojo para Visual Studio Code que proporciona finalización de código e información sobre herramientas.

En enero de 2024, se publicó un modelo de inferencia de LLaMA2 escrito en Mojo. [32]

Véase también

Referencias

  1. ^ "Cómo Modular simplificó la infraestructura del software de IA". Fast Company . Consultado el 19 de agosto de 2024 .
  2. ^ "Registro de cambios de Mojo". Modular . Consultado el 14 de abril de 2024 .
  3. ^ "Manual de programación de Mojo". docs.modular.com . Modular. 2023 . Consultado el 26 de septiembre de 2023 . Mojo es un lenguaje de programación tan fácil de usar como Python, pero con el rendimiento de C++ y Rust. Además, Mojo ofrece la posibilidad de aprovechar todo el ecosistema de bibliotecas de Python.
  4. ^ "Por qué Mojo: un lenguaje para la tecnología de compiladores de próxima generación". docs.modular.com . Modular. 2023 . Consultado el 26 de septiembre de 2023 . Si bien muchos otros proyectos ahora usan MLIR, Mojo es el primer lenguaje importante diseñado expresamente para MLIR, lo que hace que Mojo sea excepcionalmente poderoso al escribir código a nivel de sistemas para cargas de trabajo de IA.
  5. ^ abc Krill, Paul (4 de mayo de 2023). "El lenguaje Mojo combina Python y MLIR para el desarrollo de IA". InfoWorld .
  6. ^ ab Yegulalp, Serdar (7 de junio de 2023). "Una primera mirada al lenguaje Mojo". InfoWorld .
  7. ^ Deutscher, Maria (7 de septiembre de 2023). «Modular pone a disposición del público su lenguaje de programación Mojo optimizado para IA». Silicon Angle . Consultado el 11 de septiembre de 2023 .
  8. ^ "Mojo para Mac OS". Modular . Consultado el 19 de octubre de 2023 .
  9. ^ "Mojo: lenguaje de programación para toda la IA". Modular.com . Consultado el 28 de febrero de 2024 .
  10. ^ "El siguiente gran paso en el código abierto de Mojo". Modular.com . Consultado el 28 de mayo de 2024 .
  11. ^ Krill, Paul (4 de mayo de 2023). "El lenguaje Mojo combina Python y MLIR para el desarrollo de IA". InfoWorld . Consultado el 28 de mayo de 2024 .
  12. ^ "¿Julia debería usar MLIR en el futuro?". Lenguaje de programación Julia . 2024-02-20 . Consultado el 2024-05-28 .
  13. ^ "Modular Docs: ¿Por qué Mojo?". docs.modular.com . Consultado el 28 de mayo de 2024 .
  14. ^ https://llvm.org/devmtg/2023-10/slides/keynote/Mojo.pdf
  15. ^ Howard, Jeremy (4 de mayo de 2023). «fast.ai: Mojo puede ser el mayor avance en lenguajes de programación en décadas». fast.ai . Consultado el 28 de mayo de 2024 .
  16. ^ Claburn, Thomas (5 de mayo de 2023). «Modular encuentra su Mojo, un superconjunto de Python con velocidad de nivel C». The Register . Consultado el 8 de agosto de 2023 .
  17. ^ https://venturebeat.com/ai/mojo-rising-the-resurgence-of-ai-first-programming-languages/
  18. ^ "Registro de cambios de Mojo".
  19. ^ "Una plataforma unificada y extensible para potenciar su IA". Modular.com . Consultado el 14 de abril de 2024 .
  20. ^ "Mojo - ¡Por fin está aquí!". Modular.com . Consultado el 14 de abril de 2024 .
  21. ^ "Mojo ya está disponible en Mac". Modular.com . Consultado el 14 de abril de 2024 .
  22. ^ "Modular abre en código fuente los componentes principales de su lenguaje de programación Mojo AI". SiliconANGLE . 2024-03-28 . Consultado el 2024-05-28 .
  23. ^ "mojo/stdlib/README.md en nightly · modularml/mojo". GitHub . Consultado el 28 de mayo de 2024 .
  24. ^ "Modular Docs - Manual de programación de Mojo". docs.modular.com . Consultado el 19 de octubre de 2023 .
  25. ^ abc "Modular Docs - Manual de programación de Mojo". docs.modular.com . Consultado el 31 de octubre de 2023 .
  26. ^ Lattner, Chris; Pienaar, Jacques (2019). Introducción a MLIR: una infraestructura de compilación para el fin de la Ley de Moore (informe técnico) . Consultado el 30 de septiembre de 2022 .
  27. ^ Lattner, Chris; Amini, Mehdi; Bondhugula, Uday; Cohen, Alberto; Davis, Andy; Pienaar, Jacques; Acertijo, Río; Shpeisman, Tatiana; Vasilache, Nicolás; Zinenko, Oleksandr (29 de febrero de 2020). "MLIR: una infraestructura compiladora para el fin de la ley de Moore". arXiv : 2002.11054 [cs.PL].
  28. ^ "Documentos modulares: propiedad y préstamos". Modular . Consultado el 29 de febrero de 2024 .
  29. ^ "Manual de programación de Mojo". Modular. Archivado desde el original el 2023-06-11 . Consultado el 2023-06-11 . Todos los valores que se pasan a una función def de Python usan semántica de referencia. Esto significa que la función puede modificar objetos mutables que se le pasan y esos cambios son visibles fuera de la función. Sin embargo, el comportamiento a veces es sorprendente para los no iniciados, porque puede cambiar el objeto al que apunta un argumento y ese cambio no es visible fuera de la función. Todos los valores que se pasan a una función de Mojo usan semántica de valor de forma predeterminada. En comparación con Python, esta es una diferencia importante: una función def de Mojo recibe una copia de todos los argumentos: puede modificar argumentos dentro de la función, pero los cambios no son visibles fuera de la función.
  30. ^ "Bienvenido a Mojo". GitHub . Modular. 2023-10-31 . Consultado el 2023-10-31 .
  31. ^ "Modular Docs - Hoja de ruta de Mojo y bordes afilados". docs.modular.com . Consultado el 31 de octubre de 2023 .
  32. ^ "Registro de cambios de llama2.mojo". GitHub .

Enlaces externos