Новый язык программирования Mojo — правда ли, что он круче, чем Python?
easy

Новый язык программирования Mojo — правда ли, что он круче, чем Python?

Новый ЯП для AI

В мае 2023 года стартап Modular выпустил в релиз первую версию нового языка программирования Mojo. Он предназначен для разработки в сфере машинного обучения, похож на Python, но при этом быстрее: на некоторые задачи Mojo тратит в 90 тысяч раз меньше времени. Давайте с ним познакомимся.

Зачем нужен новый язык и почему нельзя всё делать на Python

Mojo задуман как основной язык в сфере искусственного интеллекта и машинного обучения. Поэтому он так похож на Python, который сейчас самый распространённый в этой области.

Сами разработчики говорят, что Mojo умеет то, что не умеют другие языки программирования. Python хорош, но для некоторых задач его возможностей не хватает.

Вспоминаем интерпретаторы и компиляторы

Компьютер не понимает код, который пишут разработчики на высокоуровневых языках. Неважно, какой это язык: Python, Mojo, C++ или Rust. Для запуска кода нужна дополнительная программа — переводчик на понятный компьютеру машинный язык. Такая программа называется интерпретатор или компилятор.

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

Компилятор берёт весь код, переводит его в машинный язык и запускает. Языки программирования, которые работают по этой схеме, называются компилируемыми. 

Так вот, Python — интерпретируемый язык, а Mojo — компилируемый. 

Для разных языков и процессоров нужны разные интерпретаторы и компиляторы. Чтобы разработчикам было легче их писать, есть специальные наборы инструментов. Самые известные такие инструменты для компиляторов называются LLVM (Low Level Virtual Machine, буквально «Низкоуровневая виртуальная машина») и MLIR (Multi-Level Intermediate Representation, то есть «Многоуровневое промежуточное представление»).

Кто разрабатывает Mojo

У стартапа Modular два основателя:

  • Крис Лэтнер — раньше работал над языком Swift, компилятором Clang и технологиями для разработки компиляторов LLVM и MLIR;
  • Тим Дэвис — работал над проектом Google по изучению искусственного интеллекта Google Brain и библиотекой для машинного обучения Tensor Flow.

Если посмотреть на то, чем раньше занимались основатели и остальная команда, видно, что они много работали с искусственным интеллектом и машинным обучением. Значит, на язык Mojo стоит обратить внимание как минимум ML-инженерам.

Проблемы работы с Python в машинном обучении

В Python много готовых библиотек для работы почти в любой области, в том числе машинном обучении. Проблема большинства библиотек для ML в том, что они используют два языка: Python для взаимодействия с ними и более быстрые C и C++ для обработки сложных операций. Это усложняет работу и снижает производительность.

Написанный на Python код может выполняться в двух режимах: 

  • режим немедленного выполнения, или eager execution, когда код выполняется сразу;
  • графовый режим, или graph mode, когда сначала строится граф вычислений. 

Modular говорят, что Python подталкивает к работе через graph mode, а для машинного обучения лучше подходит более простой и быстрый eager execution.

Python автоматически освобождает место в оперативной памяти, если какие-то объекты в коде больше не используются. Это называется «сборщик мусора» — он удобный, но тормозит работу больших программ. И иногда срабатывает, если код написан неграмотно.

Ещё в Python есть такая штука, как GIL (Global Interpreter Lock) — глобальная блокировка интерпретатора. Это ограничитель, который запрещает выполнять больше одной задачи в один момент времени — и он тоже влияет на производительность. 

В чём плюсы Mojo

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

В Mojo нет автоматического управления памятью, вместо этого объект выбрасывается сразу после использования. Даже внутри такого выражения, как a+b+c+d, Mojo уничтожает ненужные промежуточные значения. Это эффективнее классического сборщика мусора. А ещё Mojo умеет выполнять несколько операций параллельно.

В перспективе разработчики Modular хотят сделать так, чтобы можно было пользоваться всеми возможностями Python и при этом решить все его проблемы с ML.

В чём минусы

Mojo — новый язык. Он пока не прошёл проверку временем, выдаёт неизвестные ошибки, в нём могут быть ещё не выявленные уязвимости. Например, сейчас можно написать код, который сломает Mojo, — это ошибка языка, а не пользователя. Сами разработчики говорят, что до финального результата ещё многое поменяется.

Для установки Mojo сначала нужно установить пакет инструментов Mojo SDK, который пока доступен только для операционных систем Ubuntu Linux и компьютеров с процессорами Apple Silicon.

В Python у ошибок есть хорошее, подробное описание, а в Mojo пока нет. Опытное сообщество тоже пока не сформировалось. Поэтому, если при работе у вас что-то не получается, на решение может уйти много времени.

Несмотря на все минусы, Mojo очень быстро развивается. Посмотреть на историю версий с датами всех релизов и нововведений можно на сайте этого языка. На момент, когда пишется эта статья, последняя версия вышла 2 мая 2024 года.

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

Как выглядит синтаксис

Mojo похож на Python, но это другой язык. У него свой компилятор, своя стандартная библиотека и вообще своя система работы. Посмотрим на два примера: переменные и функции.

Переменные в Mojo можно создавать так же, как в Python:

x = 1

Но есть и свой собственный синтаксис. Работать с ним сложнее, но при этом безопаснее, а код при правильном обращении будет выполняться быстрее. 

Для переменных в Mojo есть операторы var для изменяемых типов и let — для неизменяемых. Можно задать значение переменной, тип данных или всё сразу:

# создаём изменяемую переменную и присваиваем ей строку
var name = "Sam"
# создаём неизменяемую переменную и присваиваем ей тип данных: целое число
let user_id: Int
# создаём неизменяемую переменную, присваиваем ей тип данных: целое число, и сразу кладём в неё значение
let user_id: Int = 12345

А ещё посмотрите: если в Python целому числу соответствует тип int, то в Mojo нужно писать Int c большой буквы. Эти типы различаются тем, что у Int есть предел: если попробовать положить в такую переменную слишком большое число, переменная переполнится и выдаст значение 0.

То же самое с функциями. Их можно объявлять через def:

# создаём функцию, в которую при вызове нужно передать имя
def greet(name):
    # объявляем переменную, в которой лежит поздравление человека по заданном имени
    greeting = "Hello, " + name + "!"
    # возвращаем из функции поздравление
    return greeting

А можно указать через оператор fn. Эти два варианта равны по своим возможностям, но работать с fn сложнее:

  • нужно указывать тип данных для аргументов функции и значения, которое она вернёт в результате;
  • по умолчанию аргументы функции доступны только для чтения — это предотвращает случайные изменения;
  • переменные внутри функции должны быть объявлены с использованием ключевого слова var;
  • если функция может вызывать исключение, оно должно быть явно объявлено с ключевым словом raises

Общий вывод: можно работать почти так же, как на Python — но для использования скоростных возможностей Mojo нужно разобраться в тонкостях нового синтаксиса: начиная от особенностей компилируемого языка и до работы с памятью без сборщика мусора. 

Как установить и начать работать

Самый простой вариант — запустить онлайн-редактор Mojo Playground. Главное ограничение — в онлайн-редакторе нельзя импортировать библиотеки Python.

Новый язык программирования Mojo — правда ли, что он круче, чем Python?

Если хотите программировать на Mojo на своей машине, но у вас нет компьютера с Ubuntu Linux или процессором Apple Silicon, понадобится Docker-контейнер. C Docker можно создать виртуальную Linux-среду, установить Mojo SDK и сам Mojo.

Ещё плагин Mojo доступен в среде разработки Visual Studio Code: можно писать код, но запустить — только с установленным SDK.

Когда можно удалять Python

Пока удалять ничего не нужно, ближайшие лет десять точно. 

Во-первых, разработчики Mojo ещё какое-то время собираются исправлять и обновлять свой язык. Сколько это продлится — не уточняется, но вряд ли меньше одного-двух лет.

Во-вторых, Python — язык не только для машинного обучения, он универсальный. Если даже в ML его заменит Mojo, то для многих других задач Python надолго останется лучшим выбором.

Mojo похож на Python, потому что разработчики делают язык специально для работы с искусственным интеллектом, а в этой сфере Python пока на первом месте. А значит, ML-инженерам будет проще перейти на Mojo. Например, так происходил переход с языка Objective-C на Swift в iOS-разработке.

Что в итоге

Mojo придумали и разрабатывают сразу как язык для машинного обучения, и делают это опытные ML-инженеры. Команда Modular знает о проблемах Python и о том, как всё должно работать в идеале — теоретически. Если у них всё получится, у Mojo есть хорошие шансы стать новым главным языком в ИИ.

Редактор:

Инна Долога

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

Соцсети:

Юлия Зубарева

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
easy