Mojo: Python-совместимый язык

Mojo: Python-совместимый язык с высокой скоростью.

Пламенный привет посетителям этой страницы, пришедшим из социальных сетей, да и всем остальным тоже!

В апреле 2021-го года наблюдал удивительное явление: обильный поток посетителей из 4-х социальных сетей. В связи с этим настоятельно рекомендую всем неоднократно и регулярно посещать сайт rtbsm.ru — там в общих чертах изложена Российская Теннисная Балльная Система Марии (Шараповой).

Приглашаю всех полюбоваться на Фото и Видео красавицы Марии — надеюсь, что Вы поделитесь адресом сайта rtbsm.ru с друзьями и знакомыми.

Главная проблема — известить Марию, чтобы она лично как можно скорее заявила на весь мир о РТБСМ.

Mojo: Python-совместимый язык, имеющий компилятор и позволяющий создавать двоичные исполняемые файлы, обладающие высокой скоростью исполнения.

Привожу информацию со страницы https://habr.com/ru/articles/734318/ :

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

georfed
10 мая 2023 г. в 23:06
Простой
4 мин
44 K
Python* C*
Из песочницы

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

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

Так что это за чудо-язык такой, правда ли он заменит 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. Загрузил бы через блок кода, да подсветка синтаксиса хабра ещё не узнаёт язык трёхдневной давности. К тому же весь код есть в документации

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

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


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

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


Пример с NumPy

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

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


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

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

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

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

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


этот алгоритм, кстати, лежит у них здесь — https://docs.modular.com/mojo/notebooks/Mandelbrot.html

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

Довольно об особенностях, давайте перейдём к конкретике и рассмотрим несколько основных особенностей кода языка 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, но и … с расширением . !

Нет, это не шутка.

Авторы написали, что «считают IT-сферу уже достаточно развитой для использования юникод-символов в расширениях имён файлов». Не знаю как тут с практичностью, но маркетинговый ход, безусловно, отличный.

Спасибо за прочтение!

P.S. как я уже писал, это моя первая статья  потому, если я что сделал не так, пожалуйста пишите в комментарии, обязательно исправлю!

Комментарии 114

Не могу сказать, что полностью изучил всю документацию, но возникает вопрос: в чем принципиальное отличие от numba ( https://numba.pydata.org/ ) с нескучным синтаксисом?

говорят, что приложение можно собрать как один файл, и запускать где угодно. а не просить ставить везде нужную версию питона с зависимостями.

То есть в питоне нет инструментов, делающих то же самое?

Нет. Можно сделать exe с помощью PyInstaller, но это ничего общего с компиляцией не имеет. По сути это самораспаковывающийся архив, включающий интерпретатор питона и все библиотеки. Простейший Hello world в итоге весит не меньше 300 МБ, что накладывает ограничения на развертывание приложения и создаёт у пользователей недопонимание. А ещё подключение внешних зависимостей (файлы, звуки и т.п.) — отдельная проблема, не всегда тривиально решающаяся.

!…

Приглашаю всех высказываться в Комментариях. Критику и обмен опытом одобряю и приветствую. В особо хороших комментариях сохраняю ссылку на сайт автора!

И не забывайте, пожалуйста, нажимать на кнопки социальных сетей, которые расположены под текстом каждой страницы сайта.
Mojo: Python-совместимый языкПродолжение тут…

Deviz_4

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Проверка комментариев включена. Прежде чем Ваши комментарии будут опубликованы пройдет какое-то время.