Join Nostr
2026-05-12 10:45:44 UTC

OpenNews.opennet.ru: Основная лента (RSS Feed) on Nostr: Бета-выпуск языка программирования Mojo 1.0 ...

Бета-выпуск языка программирования Mojo 1.0

Представлен (https://mojolang.org/releases/v1.0.0b1/) первый бета выпуск (https://github.com/modular/modular/releases/tag/mojo%2Fv1.0.0b1) языка программирования Mojo 1.0 (https://mojolang.org/), который ознаменовал стабилизацию языка и реализацию всех базовых возможностей. Выпуск оценивается как почти готовый к повсеместному использованию. Финальный релиз Mojo 1.0 ожидается в начале осени. Использование данной ветки позволит начать разрабатывать крупные проекты, не опасаясь появления в языке изменений, нарушающих совместимость.

В состав платформы (https://pypi.org/project/modular/) включены компоненты, необходимые для разработки приложений на языке Mojo, включая компилятор, runtime, интерактивную REPL-оболочку для сборки и запуска программ, отладчик, дополнение к редактору кода Visual Studio Code (VS Code) с поддержкой автодополнения ввода, форматирования кода и подсветки синтаксиса, модуль для интеграции с Jupyter для сборки и запуска Mojo notebook. Исходный код стандартной библиотеки Mojo открыты (https://github.com/modular/modular/tree/main/mojo/stdlib) под лицензией Apache 2.0 c исключениями от проекта LLVM, допускающими смешивание с кодом под лицензией GPLv2. Исходный код компилятора планируют открыть (https://github.com/modular/modular/tree/main/mojo/) после завершения стабилизации внутренней архитектуры.

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

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

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

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

Среди изменений (https://mojolang.org/releases/v1.0.0b1/) в 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().

Одновременно сформирован (https://github.com/modular/modular/releases/tag/max%2Fv26.3.0) выпуск движка MAX Framework 26.3 (https://www.modular.com/open-source/max), предлагающего платформу для разработок в области машинного обучения. MAX Framework дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX и т.п.). В новой версии MAX Framework добавлена возможность генерации видео, расширена поддержка работ с использованием нескольких GPU, значительно повышена производительность интерпретатора (некоторые операции стали выполняться быстрее в 10-20 раз).



Источник: https://www.opennet.ru/opennews/art.shtml?num=65415 (https://www.opennet.ru/opennews/art.shtml?num=65415)

https://www.opennet.ru/opennews/art.shtml?num=65415