Mojo: Python-совместимый язык с производительностью Си — от Криса Лэттнера

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

2 мая 2023 года Modular (одна из компаний-лидеров в сфере AI-инфраструктуры) анонсировала язык программирования Mojo, обещающий полную совместимость с Python в сочетании со сверх-высокой производительностью.

В компании утверждают, что автоматическое низкоуровневое распараллеливание, возможности строгой типизации и статической компиляции уже на самых ранних этапах развития языка позволяют достичь скорости, превосходящей Python в 35 000 раз!

Так что это за чудо-язык такой, правда ли он заменит Python — да и где его пощупать можно?

Давайте разбираться!

Перед прочтением, после прочтения или вместо прочтения

Поскольку язык доступен только в JupyterHub-песочнице авторов строго по запросу (его я, конечно, отправил, но сколько ждать — неизвестно), эта статья — лишь краткий разбор обещанных возможностей, документации и примеров кода с официального сайта.

Я студент, и это моя первая статья на хабре, так что если кто хочет пропустить растекания мыслью по древу и сразу окунуться в документацию, пожалуйста:

https://www.modular.com/get-started — запрос на доступ, сюда бежим в первую очередь

https://www.modular.com/mojo — страничка-лэндинг проекта, здесь все самые громкие обещания и красивые анимации

https://docs.modular.com/mojo/ — документация, на удивление хорошая для столь молодого языка

https://youtu.be/-3Kf2ZZU-dg?t=1545 — презентация языка (там после этого демку Mojo показывает сам Джереми Говард)

А авторы кто?

Прежде всего возникает подозрение: а не проходной ли это проект на волне хайпа вокруг ИИ?

Здесь, конечно, время всё расставит на свои места, однако создатели у языка ещё какие:

Крис Лэттнер (со основатель и директор Modular)

В прошлом — один из ключевых разработчиков языка Swift, компилятора Clang, а также технологий LLVM и MLIR. До основания Modular AI работал в Google, Tesla, Apple.

Тим Дэвис (со основатель и руководитель продукта)

Привнёс значительный вклад в разработку и масштабирование Google Brain проектов, а также TensorFlow.

... и множество других опытных разработчиков.

Так что же нам обещают?

Синтаксис Питона с минимальными изменениями

Даже нововведения в Mojo разработчики постарались сделать максимально схожими с Python:

Пример кода на Mojo. Загрузил бы через блок кода, да подсветка синтаксиса хабра ещё не узнаёт язык трёхдневной давности. К тому же, весь код есть в документации
Пример кода на Mojo. Загрузил бы через блок кода, да подсветка синтаксиса хабра ещё не узнаёт язык трёхдневной давности. К тому же, весь код есть в документации

Доступ к библиотекам Python

Честно, доступ есть ещё далеко не ко всем, но к нескольким самым известным (Numpy, Matplotlob) разработчики его всё-таки наладили.

Пример доступа к pyplot через импорт модулей
Пример доступа к pyplot через импорт модулей

В целом, это работает следующим образом: сначала импортируется любой модуль Python, затем его можно использовать как угодно.

Пример с NumPy
Пример с NumPy

К сожалению, сейчас имеется возможность импорта только модуля целиком (выхватить только парочку функций не выйдет).

Можно даже импортировать собственные модули:

да, питоновский print тоже придётся импортировать
да, питоновский print тоже придётся импортировать

И прочие громкие слова

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

Обо всех подробностях низкоуровневых усовершенствований, распараллеливания, статической компиляции и прочих фишках, влияющих на производительность, подробно рассказано в документации.

Утверждается, например, что на алгоритме вычисления и построения множества Мандельброта Mojo справляется быстрее Питона в 35 000 (!) раз:

этот алгоритм, кстати, лежит у них здесь
этот алгоритм, кстати, лежит у них здесь

Немного о синтаксисе

Довольно об особенностях, давайте перейдём к конкретике и рассмотрим несколько основных особенностей кода языка Mojo.

Здесь будет приведено лишь краткое описание нескольких основных программных нововведений в синтаксис Питона — всё это, и ещё больше, в подробнейшем виде расписано в документации.

let и var

Mojo позволяет объявлять переменные среды с ограниченной областью.

  • let — неизменяемая переменная,

  • var — изменяемая.

Такой синтаксис также поддерживает спецификаторы типа и отложенную инициализацию:

стоит заметить, что "неявные" переменные из Питона также поддерживаются
стоит заметить, что "неявные" переменные из Питона также поддерживаются

struct как замена class

struct в Mojo, как и class в Питоне, может содержать методы, поля, декораторы, перегрузку операторов — но есть существенное различие.

  • Классы в Питоне динамические — они допускают добавление и подмену методов и значений в рантайме, жертвуя при этом производительностью.

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

простейший пример структуры
простейший пример структуры

Важно также заметить, что структура обязывает объявлять поля в ней через let или var.

Строгая типизация

Mojo позволяет пользоваться гибкой системой типов Питона, но также предоставляет систему типов и механизм для контроля операций с ними.

Простейший способ использовать эту систему контроля — просто писать код в структурах (как уже говорилось, это связывает переменные с их типами во время компиляции), что не позволит случиться подобным ситуациям:

пример попытки применения несовместимого оператора
пример попытки применения несовместимого оператора

Кстати, почему Int, а не int?

Хороший вопрос! Дело в том, что питоновский int "отягощён" множеством дополнительных возможностей, как работа с большими числами или сравнение значений. Тип Int в Mojo наоборот очень простой и лёгкий, что позволяет значительно повысить скорость работы с ним.

fn как строгая версия def

В Mojo есть свой вариант синтаксиса функции — fn. Он полностью взаимозаменяем с def, однако накладывает ряд ограничений:

  1. Значения аргументов по умолчанию неизменяемы в теле функции, что исключает случайные изменения и позволяет использовать неизменяемые типы в качестве аргументов.

  2. Для всех аргументов (кроме self) и для возвращаемого значения требуется указать тип.

  3. Все локальные переменные должны быть объявлены явно (ой, тавтология).

В заключение

Хоть этот, безусловно, интересный язык сейчас находится в версии 0.1, не поддерживает многие концепции Питона и был анонсирован несколько дней назад, он уже показывает себя достаточно серьёзным. В этой статье я описал лишь самую верхушку айсберга, подробнее же про алиасы, передачу по ссылке, новые декораторы и многое-многое другое можно прочитать в на удивление подробной для такого молодого языка документации (да, я кинул эту ссылку уже раз пять).

Чтобы закончить на забавном моменте, хочу рассказать вам, что исходный код на Mojo можно хранить не только в файлах с расширением .mojo, но и ... с расширением .

Источник: https://habr.com/ru/articles/734318/


Интересные статьи

Интересные статьи

Представьте, что вы, совершенно один, отдыхаете в своём маленьком бревенчатом домике в лесу. Когда вы, декабрьским вечером, начинаете читать уже вторую книгу из списка «Книги недели», вы слышите побли...
Какой язык программирования выбрать? Открываем серию статей об этом! Наши разработчики будут рассказывать об особенностях, применении, плюсах и минусах языков, которые используются в «Криптоните». Нач...
В прошлом декабре мы подбивали предварительные итоги и выкатили рейтинг популярности языков программирования. Пришло время для обновлений! В Хабратопе-2021 рассказываем, как менялись позиции  ЯП ...
Профессор Толкин считал, что самым красивым словосочетанием английского языка является «Cellar door» — «Дверь в подвал». Когда мы готовили текст о «Властелине колец», то нашли следующую е...
Аннотация. Статья является первой (будем надеяться) в цикле, повествующем о тех концептуальных и практических аспектах платформы «1С: Предприятие», которые представляются автору интересны...