Одновременно сформирвоан выпуск движка MAX Engine 24.3, предлагающего платформу для разработок в области машинного обучения. MAX Engine дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих модели машинного обучения в различных форматах (TensorFlow, PyTorch, ONNX и т.п.). Сборки Mojo SDK и MAX Engine подготовлены для платформы Linux и macOS.
Среди изменений в Mojo 24.3:
- В модули для работы с коллекциями (List, Dict, Set и Tuple) добавлены возможности, делающие их более привычные пользователям, знакомым с языком программирования Python.
В тип List добавлены методы, повторяющие Python API, такие как pop(index), resize(new_size) и insert(index, value). - В тип Dict добавлен метод update() для обновления ключа/значения из другого Dict.
- В типе Tuple обеспечена работа с хранящимися только в памяти типами, такими как String, что позволяет указывать «x = tup[1]» вместо «x = tup.get[1, Int]()» и присваивать значения через «tup[1] = x».
- В типе Set реализована поддержка именованных методов, которые можно использовать вместо операторов: difference() вместо «-«,
difference_update() вместо «-=», intersection_update() вместо «&=» и update() вместо «|=». - Добавлена функция reversed(), позволяющая поменять порядок следования элементов на обратный. Функция reversed() может применяться с List, Dict и любыми типами, поддерживающими диапазоны значений.
var numbers = List(1, 2, 3, 4, 5) for number in reversed(numbers): print(number)
- Реализован типаж Boolable, возвращающий для переменных с типами Dict, List и Set значение True, если они содержат хотя бы один элемент.
- Улучшена поддержка вариативных аргументов. Предоставлена возможность определения функций, содержащих одновременно как необязательные, так и вариативные аргументы.
fn variadic_arg_after_default( a: Int, b: Int = 3, *args: Int, c: Int, d: Int = 1, **kwargs: Int ): ...
- Добавлены функции __source_location() и __call_location() для определения местоположения (номер строки в исходных текстах) вызовов функций и кода.
- В метод FileHandle.seek() по аналогии с языком Python добавлена поддержка аргумента «whence».
- Тип AnyPointer переименован в UnsafePointer. Добавлена
возможность инициализации UnsafePointer из напрямую из ссылки с типом Reference («UnsafePointer(someRef)»). Для работы с указателями UnsafePointer добавлены функции initialize_pointee_copy, initialize_pointee_move, move_from_pointee()
и move_pointee.
Язык Mojo развивается под руководством Криса Латнера (Chris Lattner), основателя и главного архитектора проекта LLVM и создателя языка программирования Swift. Синтаксис Mojo основан на языке Python, а система типов близка к C/C++. Проект преподносится как язык общего назначения, расширяющий возможности языка Python средствами системного программирования, подходящий для широкого круга задач и сочетающий простоту применения для исследовательских разработок и быстрого создания прототипов с пригодностью для формирования высокопроизводительных конечных продуктов.
Простота достигается благодаря использованию привычного синтаксиса языка Python, а разработке конечных продуктов способствуют возможность компиляции в машинный код, механизмы безопасной работы с памятью и задействование средств для аппаратного ускорения вычислений. Для достижения высокой производительности поддерживается распараллеливание вычислений с задействованием всех имеющихся в системе аппаратных ресурсов гетерогенных систем, таких как GPU, специализированные ускорители для машинного обучения и векторные процессорные инструкции (SIMD). При интенсивных вычислениях распараллеливание и задействование всех вычислительных ресурсов даёт возможность добиться производительности, превосходящей приложения на C/C++.
Язык поддерживает статическую типизацию и средства для безопасной низкоуровневой работы с памятью, напоминающие возможности языка Rust, такие как отслеживание времени жизни ссылок и проверка заимствования переменных (borrow checker). При этом в языке доступны и возможности для низкоуровневой работы, например, возможно прямое обращение к памяти в режиме unsafe с использованием типа Pointer, вызов отдельных SIMD-инструкций или доступ к аппаратным расширениям, таким как TensorCores и AMX.
Mojo может использоваться как в режиме интерпретации с использованием JIT, так и для компиляции в исполняемые файлы (AOT, ahead-of-time). В компилятор встроены современные технологии автоматической оптимизации, кэширования и распределённой компиляции. Исходный код на языке Mojo преобразуются в низкоуровневый промежуточный код MLIR (Multi-Level Intermediate Representation), развиваемый проектом LLVM. Компилятор позволяет применять для генерации машинного кода различные бэкенды, поддерживающие MLIR.
Источник: http://www.opennet.ru/opennews/art.shtml?num=61111