Lenguaje de programación Mojo, versión beta 1.0

Se ha publicado la primera versión beta del lenguaje de programación Mojo 1.0, lo que marca la estabilización del lenguaje y la implementación de todas sus características principales. Esta versión se considera casi lista para su uso generalizado. Se espera que la versión final de Mojo 1.0 esté disponible a principios de otoño. El uso de esta rama le permitirá comenzar a desarrollar grandes proyectos sin temor a que los cambios de compatibilidad afecten la compatibilidad del lenguaje.

La plataforma incluye los componentes necesarios para desarrollar aplicaciones en el lenguaje Mojo, como un compilador, un entorno de ejecución, una consola REPL interactiva para compilar y ejecutar programas, un depurador, un complemento para el editor Visual Studio Code (VS Code) con autocompletado de entrada, formato de código y resaltado de sintaxis, y un módulo de integración con Jupyter para compilar y ejecutar cuadernos Mojo. La biblioteca estándar de Mojo es de código abierto bajo la licencia Apache 2.0, con una excepción del proyecto LLVM que permite su uso con código bajo la licencia GPLv2. Se prevé que el compilador sea de código abierto una vez que se estabilice su arquitectura interna.

El lenguaje Mojo se está desarrollando bajo el liderazgo de Chris Lattner, fundador y arquitecto jefe del proyecto LLVM y creador del lenguaje de programación Swift. La sintaxis de Mojo se basa en el lenguaje Python y el sistema de tipos es cercano a C/C++. El proyecto se promociona como un lenguaje de propósito general que amplía las capacidades de Python con capacidades de programación de sistemas, es adecuado para una amplia gama de tareas y combina la facilidad de uso para el desarrollo de investigaciones y la creación rápida de prototipos con idoneidad para productos finales de alto rendimiento.

La simplicidad se logra mediante el uso de la sintaxis familiar de Python, y el desarrollo de productos finales se ve facilitado por la capacidad de compilar en código de máquina, mecanismos de seguridad de memoria y el uso de herramientas de aceleración de hardware. Para lograr un alto rendimiento, se admite la paralelización de cálculos utilizando todos los recursos de hardware de sistemas heterogéneos disponibles en el sistema, como GPU, aceleradores especializados para aprendizaje automático y procesadores de instrucciones vectoriales (SIMD). Para cálculos intensivos, la paralelización y utilización de todos los recursos informáticos hace posible lograr un rendimiento superior a las aplicaciones C/C++.

El lenguaje admite escritura estática y funciones seguras de memoria de bajo nivel que recuerdan a Rust, como el seguimiento de la vida útil de las referencias y el verificador de préstamos. Al mismo tiempo, el lenguaje también brinda oportunidades para el trabajo de bajo nivel, por ejemplo, es posible acceder directamente a la memoria en modo inseguro usando el tipo Puntero, llamar a instrucciones SIMD individuales o acceder a extensiones de hardware como TensorCores y AMX.

Mojo se puede usar tanto en modo de interpretación usando JIT como para compilación en archivos ejecutables (AOT, antes de tiempo). El compilador tiene tecnologías modernas integradas para optimización automática, almacenamiento en caché y compilación distribuida. El código fuente en el lenguaje Mojo se convierte en código intermedio de bajo nivel MLIR (Representación Intermedia de Nivel Múltiple), desarrollado por el proyecto LLVM. El compilador le permite utilizar varios servidores que admiten MLIR para generar código de máquina.

Los cambios en Mojo 1.0.0b1 incluyen:

  • La palabra clave "fn" ha quedado obsoleta; ahora debe utilizarse la palabra clave "def" para declarar funciones (las características de "fn" y "def" se han combinado, y "def" implementa la semántica de "fn" sin generar excepciones).
  • Se ha unificado la implementación de cierres. Los cierres sin estado ahora se convierten automáticamente en funciones de nivel superior y pueden usarse como funciones de devolución de llamada en la Interfaz de Funciones Externas (FFI). Se ha añadido compatibilidad con la captura de referencias. Se ha añadido la bandera "thin" a las declaraciones de funciones para declarar un tipo de puntero a función simple sin captura de estado.
  • Ahora, de forma predeterminada, no se permite que los punteros UnsafePointer sean nulos, y se debe usar "Optional[UnsafePointer[…]]" para manejar punteros nulos, lo que elimina la sobrecarga de manejar punteros nulos sin dejar de ser seguro para su uso en FFI.
  • Por defecto, la comprobación de límites está habilitada en las colecciones en el código de la CPU (en las GPU, está deshabilitada para mejorar el rendimiento, pero se puede habilitar compilando con "mojo build -D ASSERT=all"). Se ha descontinuado la compatibilidad para especificar valores negativos en los índices ("x[-1]" está prohibido, pero "x[len(x)-1]" está permitido).
  • El tipo NDBuffer se ha eliminado de la biblioteca estándar; en su lugar, debe utilizarse TileTensor.
  • Se ha ampliado la compatibilidad con GPU mediante la API gráfica Metal en sistemas Apple (por ejemplo, ahora se admiten las instrucciones print() y de matriz M5). Se ha añadido compatibilidad con los aceleradores AMD MI250X y NVIDIA B300.
  • Los identificadores primitivos de la GPU (índices de subprocesos y bloques) ahora devuelven un valor Int en lugar de UInt.
  • El contexto de la CPU ('DeviceContext(api="cpu")') ahora se ejecuta en orden de flujo. Se han añadido las funciones enqueue_cpu_function() y enqueue_cpu_range() para garantizar la ejecución ordenada de las tareas.
  • Los tipos String y StringSlice ahora admiten grupos de grafemas (Unicode UAX #29), lo que permite calcular correctamente la longitud y truncar cadenas que contienen emojis y caracteres combinados. Se han añadido los métodos graphemes() y count_graphemes(), así como la sintaxis de segmentación "[grapheme=…]".
  • Se implementó el refinamiento de tipos en tiempo de compilación para restringir automáticamente los tipos dentro de las sentencias "where", "if" y "assert" (eliminando la necesidad de especificar explícitamente trait_downcast).
  • Se propone una API de reflexión unificada, que introduce una nueva función reflect[T]() que devuelve Reflected[T] y reemplaza la familia de funciones struct_field_* y los antiguos métodos get_type_name().

Simultáneamente, se lanzó MAX Framework 26.3, que ofrece una plataforma para el desarrollo de aprendizaje automático. MAX Framework complementa el conjunto de herramientas Mojo con herramientas para desarrollar y depurar aplicaciones que utilizan modelos de aprendizaje automático en diversos formatos (TensorFlow, PyTorch, ONNX, etc.). La nueva versión de MAX Framework incorpora generación de vídeo, compatibilidad ampliada con flujos de trabajo multi-GPU y un rendimiento del intérprete significativamente mejorado (algunas operaciones son ahora entre 10 y 20 veces más rápidas).

Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster