Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Desarrollo Última actualización: 15 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Para el aprendizaje automático y la inteligencia artificial, Python siempre ha parecido ser el lenguaje de programación dominante, con potentes bibliotecas como NumPy, TensorFlow y PyTorch. Pero un rápido vistazo a las páginas de GitHub de estas bibliotecas te mostrará que gran parte de su código fuente está escrito en C y C++.

Esto se debe a que Python es demasiado lento para la IA. Mojo es un nuevo lenguaje de programación que intenta combinar la velocidad de C/C++ con la elegancia de Python.

Mojo: Una visión general

YouTube vídeo

Mojo es un nuevo lenguaje de programación sintácticamente similar a Python, pero con la velocidad de C. Está pensado principalmente para los usuarios de Inteligencia artificial y Desarrollo de Sistemas, campos ambos que requieren software de alto rendimiento.

Utiliza el paradigma SIMD (Single Instruction, Multiple Data) para aprovechar el paralelismo. Además, se compila justo a tiempo y consume poca memoria.

Sin embargo, Mojo no es un lenguaje completamente nuevo, sino un superconjunto de Python. Esto significa que es Python más características adicionales. Similar a cómo TypeScript extiende JavaScript. Esto es bueno porque si usted ya sabe Python, no debería ser demasiado difícil de aprender Mojo.

Mojo ha sido desarrollado por Modular, una empresa fundada por Chris Lattner, creador de LLVM y del lenguaje de programación Swift.

En conclusión, Mojo es un nuevo lenguaje de programación diseñado para ser sintácticamente similar a Python pero tan rápido como C/C++. Está pensado para ser utilizado en el desarrollo de IA y la programación de sistemas. Aunque el proyecto no está completo, es increíblemente prometedor, y en la siguiente sección analizaremos por qué.

Características de Mojo frente a otros lenguajes de programación

Mojo se ha hecho increíblemente popular a pesar de que aún no está disponible públicamente. Esto se debe a que presenta varias ventajas significativas sobre otros lenguajes de programación a la hora de realizar Aprendizaje automático y construir software a nivel de sistema. En esta sección analizaremos estas ventajas.

#1. Soporte nativo para tareas de IA y aprendizaje automático

Mojo está pensado para desarrollar aplicaciones de Inteligencia Artificial. Como resultado, viene con funciones y módulos en la biblioteca estándar para construir redes neuronalesvisión por ordenador y preparación de datos.

La mayoría de los lenguajes de propósito general como Python requerirían bibliotecas adicionales para llevar a cabo esto, pero Mojo lo soporta desde el primer momento.

#2. Sintaxis simplificada y abstracciones de alto nivel

Para escribir software rápido y eficiente, normalmente tendríamos que utilizar lenguajes como C, C++ y Rust. Aunque estos lenguajes son rápidos, son más difíciles de aprender y trabajar con ellos. Esto se debe a que te obligan a trabajar a bajo nivel para que tengas más control.

Sin embargo, Mojo sigue ofreciendo abstracciones de alto nivel como Python y una sintaxis sencilla. Esto hace que sea más fácil trabajar con él que con otros lenguajes comparables en rendimiento.

#3. Integración con marcos y bibliotecas de IA populares

Como ya se ha mencionado, Mojo no es un lenguaje completamente nuevo, sino un superconjunto de Python. Como resultado, se integra bien con bibliotecas existentes como NumPy y PyTorch. Esto significa que, por defecto, Mojo tiene un ecosistema tan grande como el de Python.

#4. Manipulación eficaz de datos

Mojo está diseñado para manipular múltiples valores de forma eficiente en paralelo. Esto es muy útil cuando se realiza álgebra lineal, de la que tanto depende el aprendizaje automático. Mojo también se compila justo a tiempo, por lo que el código de bytes está optimizado para la velocidad. Esto hace que trabajar con datos y aprendizaje automático sea eficiente en Mojo.

#5. Escalabilidad y computación paralela

Como se mencionó anteriormente, Mojo está construido para soportar el paradigma de Instrucción Única - Datos Múltiples de computación paralela. Esto viene integrado en Mojo y lo hace más rápido desde el primer momento. También supera a librerías de Python como NumPy.

Elementos clave de Mojo

En esta sección, discutiremos cómo escribir programas en Mojo. Debido a que Mojo pretende ser un superconjunto de Python, al igual que TypeScript es un superconjunto de JavaScript, todo el código Python válido es código Mojo válido, pero no todo el código Mojo es código Python válido.

Mojo es todavía un trabajo en progreso, y algunas características del lenguaje Python no están soportadas todavía - por ejemplo, las clases. Además, un compilador no está disponible todavía, pero puede utilizar Mojo en un cuaderno de juegos. Sin embargo, primero necesitará una cuenta, que puede crear en su sitio web.

Por el momento, es difícil dar un tutorial completo sobre el lenguaje, ya que algunas características aún no se han añadido, y no todas las cosas están soportadas actualmente. En su lugar, vamos a discutir algunas adiciones clave que Mojo añade a lo que Python ya tiene.

Sintaxis y gramática

Dado que Mojo es un superconjunto de Python, sus sintaxis son idénticas. Al igual que Python, un programa se compone de sentencias. Estas sentencias pueden agruparse en bloques bajo funciones, bucles o condicionales. Las sentencias dentro de un bloque están sangradas. He aquí un programa de ejemplo escrito en Mojo:

def odd_or_even():
     for i in range(1, 101):
        if i % 2 == 0:
            print("Even")
        else:
            print("Odd")

odd_or_even()

Esto es perfectamente idéntico a un programa Python. Sin embargo, Mojo ofrece características adicionales que verás en las secciones siguientes.

Declaraciones de variables

Con Mojo, tienes dos formas adicionales de declarar variables. Puedes utilizar el método let o var palabra clave. La dirección let declara una variable inmutable. Una vez inicializada, no se puede reasignar su valor a otra cosa. En cambio, las variables declaradas con var pueden reasignarse, ya que son mutables.

La principal ventaja de las variables declaradas mediante let o var es que soportan especificadores de tipo. El siguiente ejemplo ilustra cómo se declaran las variables en Mojo.

let pi: Float64 = 3.141
var greeting = "Hello, World"

# This would be impossible
# pi = 6.283

# But this is possible
greeting = "Ola"

print(pi, greeting)

Estructuras

Además de una forma diferente de declarar variables, Mojo soporta structs. Una forma sencilla de ver los structs es que son como las clases, pero más rígidos. A diferencia de las clases, no puedes añadir/eliminar o modificar métodos mientras se ejecutan, y todos los miembros tienen que ser declarados usando el método var o let palabras clave. Esta estructura más rígida permite a Mojo gestionar la memoria y el rendimiento de forma más eficaz. Aquí tienes un ejemplo de estructura:

struct Person:
    var name: StringLiteral
    var age: Int32
    
    fn __init__(inout self, name: StringLiteral, age: Int32):
        self.name = name
        self.age = age


john = Person("John Doe", 32)
print(john.name, john.age)

Funciones

En la estructura anterior, te habrás dado cuenta de que hemos declarado la variable __init__ utilizando la palabra clave fn en lugar de def. Esto se debe a que, en Mojo, puedes declarar funciones utilizando fn y def. Una función declarada mediante fn es más estricta en comparación con su def contraparte.

En concreto, una función declarada mediante fn tiene sus argumentos inmutables por defecto. Además, es necesario especificar el tipo de datos de los argumentos y el valor de retorno de la función. Todas las variables locales deben declararse antes de su uso.

fn say_hello(name: StringLiteral):
    print("Hello,", name)
    
# This would be invalid
# fn say_hello(name):
#     print("Hello,", name)

say_hello("John")

Si la función lanza una excepción, debe indicarse explícitamente cuando se declara la función utilizando la propiedad raises palabra clave. Además, Mojo no utiliza la clase Exception como hace Python, en su lugar, utiliza la clase Error.

fn will_raise_error() raises:
    raise Error('Some error')
    
will_raise_error()

Sobrecarga

Mojo también soporta operadores de sobrecarga basados en diferentes tipos de datos. Esto apoya el principio de polimorfismo orientado a objetos.

fn add_numbers(a: Int32, b: Int32) -> Int32:
    return a + b

fn add_numbers(a: Int32, b: Int32, c: Int32) -> Int32:
    return a + b + c

let first_total = add_numbers(2, 3)
let second_total = add_numbers(1, 2, 3)

print(first_total, second_total)

Cómo se utiliza Mojo en el desarrollo de IA

Mojo viene con librerías para construir modelos de Aprendizaje Automático. Esto incluye bibliotecas para construir redes neuronales. Además, también puedes realizar tareas como Procesamiento del lenguaje natural y visión por ordenador.

Aunque el lenguaje en sí aún no está terminado y su ecosistema es prácticamente inexistente, podemos esperar que Mojo aporte muchas funciones para realizar tareas como el tratamiento de datos, la creación de modelos, la optimización, la gestión de modelos y la supervisión.

¿Es Mojo el futuro del desarrollo de la IA?

Es difícil predecir cómo evolucionará y se adoptará la tecnología. La mayoría de las predicciones son erróneas, pero eso no significa que no podamos intentarlo. Para predecir si es probable que Mojo sustituya a Python, consideremos las ventajas y los inconvenientes/limitaciones de Mojo:

Beneficios

  • Es muy rápido y está construido para aprovechar el paralelismo sin hacer mucho, lo que es esencial para el aprendizaje automático, ya que el entrenamiento de modelos puede llevar mucho tiempo.
  • Es un superconjunto de Python, por lo tanto, más fácil de aprender y tiene una curva de aprendizaje más suave. Esto reduce la fricción para su adopción.
  • Reduce las posibilidades de que se produzcan errores en producción, ya que errores como nombres de variables mal escritos o desajustes de tipo se detectan en tiempo de compilación. Esto hace que sea preferible.

Inconvenientes

  • En la actualidad incompleto. Pero, por supuesto, el equipo de Modular está trabajando para liberar el lenguaje y su traductor.
  • Por mucho que simplifique el trabajo de los productores de marcos, puede que no suponga una gran ventaja para los consumidores de marcos, puesto que ya utilizan marcos de aprendizaje automático en Python.
  • Aún no cuenta con un gran ecosistema de herramientas y recursos de aprendizaje. Mientras que puedes usar las bibliotecas de Python en Mojo, todavía puedes usar las bibliotecas de Python en Python. Para que Mojo tenga alguna ventaja sobre Python, necesita bibliotecas que lleven la velocidad de Mojo.

Palabras finales

Si nos guiamos por la publicidad actual, es probable que Mojo se convierta en un lenguaje de IA popular. Creo que su velocidad es suficiente para animar a la gente a pasarse a Mojo. Su sencillez es una ventaja. Pero al igual que TypeScript no sustituyó a JavaScript por completo, es probable que Mojo no sustituya a Python por completo.

Mojo es, sin duda, un lenguaje que hay que tener en cuenta para cuando madure.

A continuación, consulte Tipo vs. Interfaz en TypeScript.

  • Anesu Kafesu
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre desarrollo
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba el lunes
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder