1
0
Prechádzať zdrojové kódy

Merge branch 'master' of http://213.155.192.79:3001/ypv/ISRPO

ypv 1 rok pred
rodič
commit
d36cc99af2

BIN
Лекции/Mojo/Letner.jpg


+ 118 - 0
Лекции/Mojo/Mojo.md

@@ -0,0 +1,118 @@
+# Mojo
+
+#### Python-совместимый язык с производительностью Си — от Криса Лэттнера
+
+2 мая 2023 года Modular (одна из компаний-лидеров в сфере AI-инфраструктуры) анонсировала язык программирования Mojo, обещающий полную совместимость с Python в сочетании со сверх-высокой производительностью.
+
+В компании утверждают, что автоматическое низкоуровневое распараллеливание, возможности строгой типизации и статической компиляции уже на самых ранних этапах развития языка позволяют достичь скорости, превосходящей Python в 35 000 раз!
+
+### А авторы кто?
+Прежде всего возникает подозрение: а не проходной ли это проект на волне популярности вокруг ИИ?
+
+Здесь, конечно, время всё расставит на свои места, однако создатели у языка ещё какие:
+
+![ ](Letner.jpg)
+
+Крис Лэттнер (со основатель и директор Modular)
+
+В прошлом — один из ключевых разработчиков языка Swift, компилятора Clang, а также технологий LLVM и MLIR. До основания Modular AI работал в Google, Tesla, Apple.
+
+![ ](davis.jpg)
+
+Тим Дэвис (со основатель и руководитель продукта)
+
+Привнёс значительный вклад в разработку и масштабирование Google Brain проектов, а также TensorFlow.
+
+... и множество других опытных разработчиков.
+
+### Так что же нам обещают?
+Синтаксис Питона с минимальными изменениями
+Даже нововведения в Mojo разработчики постарались сделать максимально схожими с Python:
+
+![ ](pr1.jpg)
+##### Пример кода на Mojo.
+
+### Доступ к библиотекам Python
+Честно, доступ есть ещё далеко не ко всем, но к нескольким самым известным (Numpy, Matplotlob) разработчики его всё-таки наладили.
+
+![ ](pr2.jpg)
+##### Пример доступа к pyplot через импорт модулей
+
+
+
+В целом, это работает следующим образом: сначала импортируется любой модуль Python, затем его можно использовать как угодно.
+
+![ ](pr3.jpg)
+##### Пример с NumPy
+
+К сожалению, сейчас имеется возможность импорта только модуля целиком (выхватить только парочку функций не выйдет).
+
+Можно даже импортировать собственные модули:
+
+![ ](pr4.jpg)
+##### питоновский print тоже придётся импортировать
+
+### И прочие громкие слова
+Благодаря такой гибкости по отношению к Питону, Mojo будет возможно точечно встраивать в уже готовые модели, переопределять операции с его помощью, пользоваться супер-быстрыми реализациями многих алгоритмов, и т.п.
+
+Обо всех подробностях низкоуровневых усовершенствований, распараллеливания, статической компиляции и прочих фишках, влияющих на производительность, подробно рассказано в документации.
+
+Утверждается, например, что на алгоритме вычисления и построения множества Мандельброта Mojo справляется быстрее Питона в 35 000 (!) раз:
+
+![ ](pr5.jpg)
+##### этот алгоритм, кстати, лежит у них здесь
+
+### Немного о синтаксисе
+Довольно об особенностях, давайте перейдём к конкретике и рассмотрим несколько основных особенностей кода языка Mojo.
+
+Здесь будет приведено лишь краткое описание нескольких основных программных нововведений в синтаксис Питона — всё это, и ещё больше, в подробнейшем виде расписано в документации.
+
+#### let и var
+Mojo позволяет объявлять переменные среды с ограниченной областью.
+
+* let — неизменяемая переменная,
+
+* var — изменяемая.
+
+Такой синтаксис также поддерживает спецификаторы типа и отложенную инициализацию:
+![ ](pr6.jpg)
+###### стоит заметить, что "неявные" переменные из Питона также поддерживаются
+
+
+### struct как замена class
+struct в Mojo, как и class в Питоне, может содержать методы, поля, декораторы, перегрузку операторов — но есть существенное различие.
+
+* Классы в Питоне динамические — они допускают добавление и подмену методов и значений в рантайме, жертвуя при этом производительностью.
+
+* Структуры в Mojo статические — они формируются во время компиляции, не позволяя вносить изменения в рантайме. Помимо лучшей безопасности, такой подход позволяет выигрывать в производительности.
+
+![ ](pr7.jpg)
+##### простейший пример структуры
+
+Важно также заметить, что структура обязывает объявлять поля в ней через let или var.
+
+### Строгая типизация
+Mojo позволяет пользоваться гибкой системой типов Питона, но также предоставляет систему типов и механизм для контроля операций с ними.
+
+Простейший способ использовать эту систему контроля — просто писать код в структурах (как уже говорилось, это связывает переменные с их типами во время компиляции), что не позволит случиться подобным ситуациям:
+
+![ ](pr8.jpg)
+##### пример попытки применения несовместимого оператора
+
+ Кстати, почему Int, а не int?
+
+Дело в том, что питоновский int "отягощён" множеством дополнительных возможностей, как работа с большими числами или сравнение значений. Тип Int в Mojo наоборот очень простой и лёгкий, что позволяет значительно повысить скорость работы с ним.
+
+#### fn как строгая версия def
+В Mojo есть свой вариант синтаксиса функции — fn. Он полностью взаимозаменяем с def, однако накладывает ряд ограничений:
+
+Значения аргументов по умолчанию неизменяемы в теле функции, что исключает случайные изменения и позволяет использовать неизменяемые типы в качестве аргументов.
+
+Для всех аргументов (кроме self) и для возвращаемого значения требуется указать тип.
+
+Все локальные переменные должны быть объявлены явно (ой, тавтология).
+### В заключение
+Хоть этот, безусловно, интересный язык сейчас находится в версии 0.1, не поддерживает многие концепции Питона и был анонсирован несколько дней назад, он уже показывает себя достаточно серьёзным.
+
+## Литература
+https://habr.com/ru/articles/734318/

BIN
Лекции/Mojo/davis.jpg


BIN
Лекции/Mojo/pr1.jpg


BIN
Лекции/Mojo/pr2.jpg


BIN
Лекции/Mojo/pr3.jpg


BIN
Лекции/Mojo/pr4.jpg


BIN
Лекции/Mojo/pr5.jpg


BIN
Лекции/Mojo/pr6.jpg


BIN
Лекции/Mojo/pr7.jpg


BIN
Лекции/Mojo/pr8.jpg