
Во второй половине октября 2026 года вышло обновление языка программирования Mojo 1.2, а также выпуск движка MAX Framework 26.7, предлагающего платформу для разработок в области машинного обучения. Проект MAX Framework дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX).

В августе 2026 года состоялся первый мажорный релиз Mojo, который ознаменовал стабилизацию языка и реализацию всех базовых возможностей и оценивается как готовый к повсеместному использованию. Использование стабильной ветки проекта Mojo 1.х позволяет разрабатывать крупные проекты, не опасаясь появления в языке изменений, нарушающих совместимость. Версия Mojo 1.1 вышла в сентябре 2026 года (в ней начался приём в кодовую базу компилятора изменений от сторонних участников).

В состав модульной платформы решения включены компоненты, необходимые для разработки приложений на языке 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.2:
-
добавлена поддержка сопоставления с образцом, используя конструкции match / case. В качестве образца могут использоваться литералы («case 100:»), логические выражения с литералами («case 100 | 200:»), кортежи («case (10, 10, 10):»), структуры, ограничивающие условия («case limit if limit > 10:») и шаблоны («case _:»). Дополнительно реализовано выражение «comptime match» для выполнения проверки на этапе компиляции;
-
добавлена поддержка деструктуризации списков, которая может использоваться как отдельно, так и внутри проверок в match;
-
в выражения if, elif и while добавлена возможность использования конструкций if case и while case для проверки и извлечения данных;
-
в библиотеку std.math добавлено более 20 математических функций (atan(), tan(), cbrt(), erfc(), lgamma(), log10(), remainder(), hypot() и тому подобное), доступных в вариантах, способных работать на CPU и GPU, и не использующих системную библиотеку libm;
-
добавлен тип TargetAccelerator для метаданных аппаратных ускорителей, сочетающий возможности типов GPUInfo и CompilationTarget;
-
добавлен синтаксис not <Trait> для отключения реализации определённых типажей (например, struct Handle(not Movable, Writable):), который рекомендуется использовать вместо <Trait> where False;
-
появилась возможность определения собственных сообщений об ошибках в проверочных выражениях where — where <condition> else <message>;
-
компилятор mojo переведён на выделение памяти при помощи библиотеки jemalloc на платформе Linux. Компиляция крупных пакетов и больших ядер для GPU ускорилась на 10–13%. Например, пакет nn теперь компилируется за 61 секунду вместо 98;
-
проведена оптимизация производительности. Операции выравнивания строк ускорены до 86 раз, а повторения больших строк через оператор «*» примерно в 2 раза. Значительно повышена производительность методов String.startswith() и String.endswith(). В среднем на 20% ускорен разбор чисел с плавающей запятой при помощи функции atof();
-
структура StringSpan теперь предоставляет доступ к байтам строки только в режиме чтения (immutable). Поддержка структур MutStringSpan, MutStringSlice и параметра mut, позволявших напрямую изменять данные в строковом буфере, прекращена;
-
пустой кортеж «()» теперь всегда означает значение кортежа, а не тип. Для указания типа пустого кортежа следует указывать Tuple[];
-
ключевые слова async и await переименованы в __async и __await для индикации их экспериментального статуса (старые варианты сохранены, но будут выдавать предупреждение).
