Язык программирования Mojo: что нового в версии 24.3?

a156b8541ec86545f2741744f59c1de6.jpg

На днях была опубликована новая версия языка программирования Mojo, теперь это 24.3. Новинка получила несколько важных компонентов, которые требуются для создания приложений на этом языке. Например, компилятор, интерактивная REPL-оболочка для сборки и запуска программ, отладчик, дополнение к редактору кода Visual Studio Code (VS Code) и т. п.

Стоит отметить, что исходники открыты под лицензией Apache 2.0. После того как будет завершено проектирование внутренней архитектуры, разработчики откроют и код компилятора. Ну, а подробности изменений и дополнений — под катом.

Что это за язык такой?

fe4e0d948440efb94d7a766bbc5b0c28.png

Mojo — специализированный ЯП, созданный компанией Modular и ориентированный на разработку в сфере машинного обучения. Выпущен в мае 2023 года. Mojo позиционируется как более продвинутая альтернатива Python, практически полностью совместим с ним и его библиотеками, но при этом показывает лучшую производительность, аналогичную таким довольно низкоуровневым языкам программирования, как C и C++.

Ключевые приоритеты языка — разработка в области искусственного интеллекта и системное программирование. Mojo умеет взаимодействовать с SIMD-командами, из-за чего позволяет выполнять множество алгебраических операций за раз, что положительно сказывается на производительности.

ea54654000723cbacdfc1aa10b5d5d0f.png

Кроме того, у Mojo нет сборщика мусора, вместо этого он применяет семантику перемещения, сильно похожую на ту, что есть в Rust. Данный подход позволяет языку безопасно и быстро удалять неиспользуемые ресурсы и отказаться от рантайма.

По словам разработчиков, Mojo — отлично продуманная система, в фундаменте языка — MLIR, который не является новинкой. Он совершенствуется в течение многих лет. Команда проекта понимала, что требуется для ядра «языка программирования для ИИ», поэтому сделала максимум, чтобы оптимально всё реализовать.

Ещё одно достоинство Mojo — использование синтаксиса Python, благодаря чему некоторые разработчики называют этот ЯП Python++. Создатели языка решили использовать синтаксис, чтобы избежать одной из самых сложных частей в проектировании и реализации ЯП. Есть, конечно, и некоторое количество новых элементов, но оно небольшое.

Команда этого ЯП — вовсе не новички, у всех них огромный опыт в этой отрасли. Благодаря этому им удалось применить лучшие практики, избежав слабых мест и проблем других ЯП. Стоит отметить, что с развёртыванием Mojo дела обстоят примерно так же, как и у С. Так, приложение с matmul, т. е. матричным умножением, занимает всего 100 КБ. При помощи Mojo можно относительно быстро писать легко развёртываемые приложения, которые в полной мере используют многоядерность и многопоточность систем.

Что нового?

2e089ad1febe759395196dae022d5397.png

В общем-то, достаточно много всего:

  • так, в модули для работы с коллекциями (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)
  • оптимизирована поддержка вариативных аргументов. Так, разработчики теперь дают возможность определить функции, которые содержат как необязательные, так и вариативные аргументы

fn variadic_arg_after_default(
               a: Int, b: Int = 3, *args: Int, c: Int, d: Int = 1, **kwargs: Int
   ): ...
  • появились в новой версии функции __source_location () и __call_location () для определения местоположения (номер строки в исходных текстах) вызовов функций и кода

  • добавлена поддержка аргумента whence, как это организовано в методе FileHandle.seek ()

  • тип AnyPointer переименован в UnsafePointer. Добавлена возможность инициализации UnsafePointer напрямую из ссылки с типом Reference («UnsafePointer (someRef)»). Для работы с указателями UnsafePointer добавлены функции initialize_pointee_copy, initialize_pointee_move, move_from_pointee () и move_pointee

Вместе с новым релизом представлен и движок MAX Engine 24.3, предлагающий платформу для проектов в области машинного обучения. Он дополняет инструментарий Mojo средствами для разработки и отладки приложений, использующих ML-модели в различных форматах (TensorFlow, PyTorch, ONNX и т. п.). Сборки Mojo SDK и MAX Engine подготовлены для платформ Linux и macOS.

© Habrahabr.ru