Вышла первая бета-версия языка программирования Mojo (релиз оценен как почти готовый к повсеместному использованию)

от автора

В начале мая 2026 года вышла первая бета-версия языка программирования Mojo 1.0. Этот выпуск ознаменовал стабилизацию языка и реализацию всех базовых возможностей. Релиз оценивается командой проекта как почти готовый к повсеместному использованию. Финальный выпуск стабильной версии Mojo 1.0 ожидается в начале осени. Использование этой ветки позволит начать разрабатывать крупные проекты, не опасаясь появления в языке изменений, нарушающих совместимость.

В состав модульной платформы решения включены компоненты, необходимые для разработки приложений на языке Mojo, включая компилятор, runtime, интерактивную REPL‑оболочку для сборки и запуска программ, отладчик, дополнение к редактору кода Visual Studio Code (VS Code) с поддержкой автодополнения ввода, форматирования кода и подсветки синтаксиса, модуль для интеграции с Jupyter для сборки и запуска Mojo notebook. Исходный код стандартной библиотеки Mojo открыты под лицензией Apache 2.0 c исключениями от проекта LLVM, допускающими смешивание с кодом под лицензией GPLv2. Исходный код компилятора планируют открыть после завершения стабилизации внутренней архитектуры.

Язык Mojo развивается под руководством Криса Латнера (Chris Lattner), основателя и главного архитектора проекта LLVM и создателя языка программирования Swift. Синтаксис Mojo основан на языке Python, а система типов близка к C/C++. Проект преподносится как язык общего назначения, расширяющий возможности языка Python средствами системного программирования, подходящий для широкого круга задач и сочетающий простоту применения для исследовательских разработок и быстрого создания прототипов с пригодностью для формирования высокопроизводительных конечных продуктов.

Простота достигается благодаря использованию привычного синтаксиса языка Python, а разработке конечных продуктов способствуют возможность компиляции в машинный код, механизмы безопасной работы с памятью и задействование средств для аппаратного ускорения вычислений. Для достижения высокой производительности поддерживается распараллеливание вычислений с задействованием всех имеющихся в системе аппаратных ресурсов гетерогенных систем, таких как GPU, специализированные ускорители для машинного обучения и векторные процессорные инструкции (SIMD). При интенсивных вычислениях распараллеливание и задействование всех вычислительных ресурсов даёт возможность добиться производительности, превосходящей приложения на C/C++.

Язык Mojo поддерживает статическую типизацию и средства для безопасной низкоуровневой работы с памятью, напоминающие возможности языка Rust, такие как отслеживание времени жизни ссылок и проверка заимствования переменных (borrow checker). При этом в языке доступны и возможности для низкоуровневой работы, например, возможно прямое обращение к памяти в режиме unsafe с использованием типа Pointer, вызов отдельных SIMD‑инструкций или доступ к аппаратным расширениям, таким как TensorCores и AMX.

Проект Mojo может использоваться как в режиме интерпретации с использованием JIT, так и для компиляции в исполняемые файлы (AOT, ahead‑of‑time). В компилятор встроены современные технологии автоматической оптимизации, кэширования и распределённой компиляции. Исходный код на языке Mojo преобразуются в низкоуровневый промежуточный код MLIR (Multi‑Level Intermediate Representation), развиваемый проектом LLVM. Компилятор позволяет применять для генерации машинного кода различные бэкенды, поддерживающие MLIR.

Согласно информации OpenNET, основные изменения в Mojo 1.0.0b1:

  • ключевое слово «fn» объявлено устаревшим — для объявления функций следует использовать ключевое слово «def» (возможности «fn» и «def» объединены, и в «def» реализована семантика «fn» без генерации исключений);

  • унифицирована реализация замыканий (closure). Не учитывающие контекст замыкания (stateless closure) теперь автоматически преобразуются в функции верхнего уровня и могут использоваться как callback-вызовы в FFI (Foreign Function Interface). Добавлена поддержка захвата по ссылке (ref capture). При объявлении функций добавлен признак «thin» для объявления простого типа указателя на функцию без захвата состояния;

  • указатели с типом UnsafePointer теперь не могут принимать значение null по умолчанию, а для работы с null-указателями необходимо использовать «Optional[UnsafePointer[…]]», что позволяет исключить накладные расходы при работе с null-указателями и сохранить возможность безопасного применения в FFI;

  • по умолчанию в коде для CPU в коллекциях включена проверка допустимых границ (на GPU проверка отключена для производительности, но может быть включена при сборке с «mojo build -D ASSERT=all»). Прекращена поддержка указания отрицательных значений в индексах (запрещено «x[-1]», но можно указывать «x[len(x)-1]»);

  • из стандартной библиотек удалён тип NDBuffer, вместо которого следует использовать TileTensor;

  • Расширена поддержка работы с GPU через графический API Metal на системах Apple (например, появилась поддержка print() и матричных инструкций M5). Добавлена поддержка ускорителей AMD MI250X и NVIDIA B300;

  • идентификаторы примитивов GPU (индексы потоков и блоков) переведены на возвращение типа Int вместо UInt;

  • контекст CPU (‘DeviceContext(api=»cpu»)’) стал потокозависимым (stream-ordered). Для упорядоченного выполнения задач добавлены функции enqueue_cpu_function() и enqueue_cpu_range();

  • в типах String и StringSlice добавлена поддержка графемных кластеров (Unicode UAX #29), позволяющая корректно вычислять длину и обрезать строки с emoji и комбинированных символов. Добавлены методы graphemes() и count_graphemes(), а также синтаксис слайсов «[grapheme=…]»;

  • реализовано уточнение типов (Type Refinement) на этапе компиляции для автоматического сужения типов внутри выражений «where», «if» и «assert» (позволяет обойтись без явного указания trait_downcast);

  • предложен унифицированный API рефлексии, в котором предложена новая функция reflect[T](), возвращающая Reflected[T] и заменяющая семейство функций struct_field_* и старые методы get_type_name().

В марте 2024 года компания Modular сообщила, что язык программирования Mojo теперь открыт. В релиз вошли основные модули стандартной библиотеки. Они опубликованы на GitHub по лицензии Apache 2. С проектами, которые уже используют Mojo, можно познакомиться в репозитории Awesome Mojo.

Разработчики Mojo рассказали, что улучшают язык программирования с мая 2023 года. Команда проекта отмечает, что создание нового языка и всей инфраструктуры — тяжёлая работа, требующая времени. Сейчас проект дошёл до стадии, когда ему нужно участие сторонних разработчиков с новым взглядом и идеями.

В сентябре 2023 года разработчики языка программирования Mojo открыли доступ к инструментарию Mojo SDK, позволяющему компилировать ИИ-проекты на локальной системе. Ранее для тестирования Modular предлагала только online-интерфейс для работы с Mojo Toolbox.

ссылка на оригинал статьи https://habr.com/ru/articles/1033626/