Представлен первый бета выпуск языка программирования Mojo 1.0, который ознаменовал стабилизацию языка и реализацию всех базовых возможностей. Выпуск оценивается как почти готовый к повсеместному использованию. Финальный релиз Mojo 1.0 ожидается в начале осени. Использование данной ветки позволит начать разрабатывать крупные проекты, не опасаясь появления в языке изменений, нарушающих совместимость.
В состав платформы включены компоненты, необходимые для разработки приложений на языке Mojo, включая компилятор, runtime, интерактивную REPL-оболочку для сборки и запуска программ, отладчик, дополнение к редактору кода Visual Studio Code (VS Code) с поддержкой автодополнения ввода, форматирования кода и подсветки синтаксиса, модуль для интеграции с Jupyter для сборки и запуска Mojo notebook. Исходный код стандартной библиотеки Mojo открыты под лицензией Apache 2.0 c исключениями от проекта LLVM, допускающими смешивание с кодом под лицензией GPLv2. Исходный код компилятора планируют открыть после завершения стабилизации внутренней архитектуры.
O le gagana Mojo o loʻo atiaʻe i lalo o le taʻitaʻiga a Chris Lattner, o le faʻavae ma le tufuga sili o le poloketi LLVM ma na faia le gagana Swift programming. O le syntax a Mojo e faʻavae ile Python, ma o lona ituaiga faiga e tutusa ma C/C++. O le poloketi o loʻo taʻua o se gagana faʻamoemoe lautele e faʻalauteleina ai le gafatia o le Python faʻatasi ai ma le faʻaogaina o polokalame, e talafeagai mo le tele o galuega, ma tuʻufaʻatasia le faigofie o le faʻaogaina mo le atinaʻeina o suʻesuʻega ma le vave faʻataʻitaʻiga faʻatasi ma le talafeagai mo oloa faʻataunuʻu maualuga.
Fa'afaigofie ona maua e ala i le fa'aogaina o le Python syntax masani, ma o le atina'eina o mea fa'ai'u e fa'afaigofieina e le mafai ona tu'ufa'atasia i fa'ailoga masini, masini e manatua ai le saogalemu, ma le fa'aogaina o meafaigaluega fa'avavevave. Ina ia ausia le maualuga o le faʻatinoga, o le faʻatusatusaina o faʻatusatusaga e lagolagoina e faʻaogaina uma punaoa meafaigaluega o faiga eseese o loʻo maua i totonu o le faiga, e pei o GPU, faʻapitoa faʻavavevave mo le aʻoaʻoina o masini ma faʻatonuga faʻatonuga (SIMD). Mo fa'atatauga malosi, fa'atusa ma le fa'aogaina o punaoa fa'akomepiuta uma e mafai ai ona ausia fa'atinoga e sili atu nai lo C/C++ talosaga.
E lagolagoina e le gagana le ta'i fa'ata'oto ma le maualalo o le manatua-saogalemu foliga e manatua ai le Rust, e pei o le su'esu'eina o le olaga atoa ma le siaki nono. I le taimi lava e tasi, o le gagana foi e maua ai avanoa mo galuega maualalo, mo se faʻataʻitaʻiga, e mafai ona maua saʻo le manatua i le tulaga le saogalemu e faʻaaoga ai le Pointer type, valaʻau faʻatonuga a le SIMD taʻitasi, poʻo le avanoa i faʻaopoopoga meafaigaluega e pei o TensorCores ma AMX.
Mojo e mafai ona faʻaoga uma i le faʻamatalaga faʻaoga e faʻaaoga ai le JIT, ma mo le tuʻufaʻatasia i faila faʻatinoina (AOT, i luma o le taimi). O lo'o iai i totonu o le tu'ufa'atasia tekinolosi fa'aonaponei mo le fa'avasegaina otometi, fa'asao ma tufatufa fa'atasi. Source code i le gagana Mojo ua liua i le tulaga maualalo maualalo code MLIR (Multi-Level Intermediate Representation), atiaʻe e le poloketi LLVM. E fa'atagaina oe e le tu'ufa'atasia e fa'aoga pito i tua e lagolagoina le MLIR e fa'atupu ai le fa'ailoga masini.
Среди изменений в 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().
Одновременно сформирован выпуск движка MAX Framework 26.3, предлагающего платформу для разработок в области машинного обучения. MAX Framework дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX и т.п.). В новой версии MAX Framework добавлена возможность генерации видео, расширена поддержка работ с использованием нескольких GPU, значительно повышена производительность интерпретатора (некоторые операции стали выполняться быстрее в 10-20 раз).
puna: opennet.ru
