Разработчики языка программирования Mojo начали перевод наработок проекта в разряд открытого ПО. Первым открыт код библиотеки, который теперь доступен под лицензией Apache 2.0 c исключениями от проекта LLVM, допускающими смешивание с кодом под лицензией GPLv2. Помимо публикации кода процесс разработки сместился в сторону открытости и возможности передачи сторонних изменений через отправку pull-запросов в GitHub. Исходные тексты компилятора планируют открыть после завершения проектирования внутренней архитектуры.
В репозитории созданы две ветки с кодом стандартной библиотеки Mojo: ветка main, синхронизированная с последним стабильным релизом Mojo, и ветка nightly, отражающая текущий процесс разработки и синхронизированная с ночными сборками Mojo. Ветку nightly предлагается использовать участникам, которые желают присоединиться к разработке и поделиться своими изменениями. При этом часть модулей библиотеки пока не открыта, но через какое-то время остающийся закрытым код также планируют переместить в открытый репозиторий. В основном закрытым остаётся код быстро развивающихся модулей, требующих дополнительной стабилизации, модулей для которых запланирован рефакторинг и модулей, требующих дополнительного рецензирования и переработки из-за связи с проприетарными проектами.
Одновременно опубликован выпуск инструментария Mojo SDK 24.2, позволяющего компилировать проекты на локальной системе, и выпуск движка MAX Engine 24.2, предлагающего платформу для разработок в области машинного обучения. В состав Mojo SDK входят компоненты, необходимые для разработки приложений на языке Mojo, включая компилятор, runtime, интерактивную REPL-оболочку для сборки и запуска программ, отладчик, дополнение к редактору кода Visual Studio Code (VS Code) с поддержкой автодополнения ввода, форматирования кода и подсветки синтаксиса, модуль для интеграции с Jupyter для сборки и запуска Mojo notebook. MAX Engine дополняет SDK средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX и т.п.). Сборки Mojo SDK и MAX Engine подготовлены для платформы Linux и macOS.
Среди наиболее заметных изменений в Mojo SDK 24.2:
- Структуры и другие номинальные типы теперь могут неявно соответствовать типажам. Например, любая структура для которой реализован метод __str__() неявно соответствует типажу Stringable и может использоваться с функцией str().
- В средствах для обеспечения совместимости с кодом на языке Python добавлена поддержка передачи аргументов на основе ключевых слов в Python-функции. Например, “plt.plot((5, 10), (10, 15), color=”red”)”
- Добавлена поддержка передачи в функцию переменного числа аргументов, задаваемых через присвоение ключевых слов. Например, “print_nicely(a=7, y=8)”.
- Тип DynamicVector переименован в List и перемещён в модуль collections.list. Добавлена возможность формирования списка на основе произвольного числа значений, например, “var numbers = List[Int](1, 2, 3)”.
- В функцию print() добавлены именованные параметры sep и end, через которые можно задать значения разделителя и финального вывода. Например, выполнение print(“Hello”, “Mojo”, sep=”, “, end=”!!!n”) приведёт к выводу “prints Hello, Mojo!!!”.
Проект Mojo развивается под руководством Криса Латнера (Chris Lattner), основателя и главного архитектора проекта LLVM и создателя языка программирования Swift. Синтаксис Mojo основан на языке Python, а система типов близка к C/C++. Язык Mojo сочетает простоту применения для исследовательских разработок и быстрого создания прототипов с пригодностью для формирования высокопроизводительных конечных продуктов. Первое достигается благодаря использованию привычного синтаксиса языка Python, а второе за счёт возможности компиляции в машинный код, механизмов безопасной работы с памятью и задействованию средств для аппаратного ускорения вычислений (например, могут привлекаться GPU, специализированные ускорители для машинного обучения и векторные процессорные инструкции).
Язык поддерживает статическую типизацию и средства для безопасной низкоуровневой работы с памятью, напоминающие возможности языка Rust, такие как отслеживание времени жизни ссылок и проверка заимствования переменных (borrow checker). При этом в языке доступны и возможности для низкоуровневой работы, например, возможно прямое обращение к памяти в режиме unsafe с использованием типа Pointer, вызов отдельных SIMD-инструкций или доступ к аппаратным расширениям, таким как TensorCores и AMX.
Проект преподносится как язык общего назначения, расширяющий возможности языка Python средствами системного программирования и подходящий для широкого круга задач. В первую очередь язык сфокусирован на потребностях разработчиков систем машинного обучения, но также оптимизирован и для таких областей, как высокопроизводительные вычисления, обработка и преобразование данных.
Для достижения высокой производительности поддерживается распараллеливание вычислений с задействованием всех имеющихся в системе аппаратных ресурсов гетерогенных систем, таких как GPU, специализированные ускорители для машинного обучения и векторные процессорные инструкции (SIMD). При интенсивных вычислениях распараллеливание и задействование всех вычислительных ресурсов даёт возможность добиться производительности, превосходящей приложения на C/C++.
Mojo может использоваться как в режиме интерпретации с использованием JIT, так и для компиляции в исполняемые файлы (AOT, ahead-of-time). В компилятор встроены современные технологии автоматической оптимизации, кэширования и распределённой компиляции. Исходный код на языке Mojo преобразуются в низкоуровневый промежуточный код MLIR (Multi-Level Intermediate Representation), развиваемый проектом LLVM. Компилятор позволяет применять для генерации машинного кода различные бэкенды, поддерживающие MLIR.