В Mojo 1.2 добавили сопоставление с образцом и ускорили компиляцию
Вышли Mojo 1.2 и MAX Framework 26.7. В новой версии языка появились match/case, математические функции для CPU и GPU и ускорение сборки.
Во второй половине октября 2026 года состоялся релиз языка программирования Mojo 1.2 и платформы MAX Framework 26.7 для разработки приложений машинного обучения. MAX Framework дополняет инструменты Mojo средствами разработки и отладки программ, работающих с моделями в форматах TensorFlow, PyTorch и ONNX.
Mojo развивается под руководством Криса Латнера — основателя и главного архитектора LLVM, а также создателя Swift. В августе 2026 года проект достиг первой стабильной мажорной версии, а выпуск Mojo 1.1 в сентябре открыл возможность принимать изменения от сторонних участников. Стабильная ветка 1.x рассчитана на создание крупных проектов без риска несовместимых изменений в языке.
Mojo объединяет Python и системное программирование
Синтаксис Mojo основан на Python, тогда как система типов близка к C и C++. Язык позиционируется как инструмент общего назначения: он должен сохранять удобство Python для исследований и прототипирования, но при этом позволять создавать высокопроизводительные конечные приложения.
Исходный код Mojo можно выполнять через JIT-интерпретацию либо заранее компилировать в исполняемые файлы. Компилятор преобразует программы в промежуточное представление MLIR, развиваемое в рамках LLVM, и поддерживает автоматические оптимизации, кэширование и распределённую компиляцию. Для ускорения вычислений можно задействовать CPU, GPU, специализированные ускорители машинного обучения и SIMD-инструкции. В отдельных сценариях такое распараллеливание, по заявлению разработчиков, позволяет превзойти производительность приложений на C и C++.
В языке есть статическая типизация и механизмы безопасной работы с памятью, включая контроль времени жизни ссылок и заимствований, напоминающий подход Rust. Одновременно сохраняются низкоуровневые возможности: режим unsafe, тип Pointer, прямой вызов SIMD-инструкций и доступ к аппаратным расширениям вроде TensorCores и AMX.
Главные изменения в Mojo 1.2
Ключевым нововведением стала поддержка сопоставления с образцом через конструкции match и case. В качестве образцов можно использовать литералы, несколько значений, кортежи, структуры, условия с ограничениями и шаблон 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>, предназначенной для отключения реализации отдельных типажей. Для проверочных выражений where добавили пользовательские сообщения об ошибках через конструкцию where <condition> else <message>. В Linux компилятор Mojo перевели на распределитель памяти jemalloc.
Ускорение компиляции и изменения совместимости
Сборка крупных пакетов и больших ядер для GPU ускорилась на 10–13%. В качестве примера разработчики приводят пакет nn: его компиляция занимает 61 секунду вместо 98.
Оптимизации затронули и работу со строками. Операции выравнивания ускорились до 86 раз, повторение больших строк оператором * — примерно вдвое. Методы String.startswith() и String.endswith() также стали быстрее, а разбор чисел с плавающей запятой через atof() в среднем ускорился на 20%.
При этом разработчики изменили ряд API. StringSpan теперь предоставляет доступ к байтам строки только для чтения. Поддержка MutStringSpan, MutStringSlice и параметра mut, позволявших напрямую менять строковый буфер, прекращена. Пустой кортеж () теперь всегда обозначает значение, а для указания его типа нужно использовать Tuple[].
Ключевые слова async и await переименовали в __async и __await, чтобы обозначить их экспериментальный статус. Старые варианты пока сохраняются, но компилятор выдаёт предупреждение.
В состав платформы Mojo входят компилятор, runtime, интерактивная REPL-оболочка, отладчик, расширение для VS Code с автодополнением, форматированием и подсветкой синтаксиса, а также интеграция с Jupyter. Исходный код стандартной библиотеки опубликован под лицензией Apache 2.0 с исключениями LLVM, допускающими смешивание с кодом под GPLv2. Исходный код компилятора планируют открыть после завершения стабилизации его внутренней архитектуры.
Сообщить о проблеме в публикации
Обращение принято Обращение будет рассмотрено. По результатам проверки публикация может быть исправлена, дополнена, временно скрыта или удалена.