Перейти к содержимому

Зачем нужен Mojo

Питонист, которому нужна скорость, живёт в двух мирах одновременно. Прототип он пишет на Python, а когда упирается в производительность — переписывает горячий кусок на C++ или Rust, оборачивает биндингами и дальше поддерживает две кодовые базы на двух языках с двумя системами сборки. В машинном обучении это давно норма: PyTorch — это Python-обёртка над огромным слоем C++ и CUDA.

Это называют «проблемой двух языков». Mojo создан, чтобы её убрать: взять синтаксис Python, привычный миллионам, и дать ему систему типов, компиляцию в машинный код и прямой доступ к векторным инструкциям процессора и к GPU.

Синтаксис, который вы уже знаете. Отступы вместо фигурных скобок, def, print, циклы for ... in, срезы, декораторы. Питонист читает код на Mojo без словаря с первой минуты.

Скорость компилируемого языка. Значения размещаются в памяти без накладных расходов интерпретатора, циклы разворачиваются, вычисления векторизуются. Разрыв с Python на численных задачах измеряется не процентами, а порядками.

Безопасность работы с памятью без сборщика мусора. Как в Rust: компилятор отслеживает, кто владеет значением, и вставляет освобождение памяти сам. Никаких пауз на сборку мусора и никаких утечек.

Совместимость с экосистемой Python. Из Mojo можно вызывать любые Python-библиотеки — NumPy, pandas, matplotlib. Не нужно ждать, пока кто-то перепишет весь научный стек.

Один язык от прототипа до GPU. Тот же код, тот же синтаксис, та же система сборки — от скрипта до ядра, исполняющегося на видеокарте.

PythonMojoC++Rust
Синтаксиспростойпростойсложныйсредний
Скоростьнизкаявысокаявысокаявысокая
Управление памятьюсборщик мусоравладениевручнуювладение
Порог входанизкийсреднийвысокийвысокий
Экосистема библиотекогромнаязарождаетсяогромнаябольшая
Работа с GPUчерез сторонние библиотекивстроеннаячерез CUDAчерез сторонние библиотеки
Возраст34 года1.0 в 202640 лет15 лет

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

Реалистично — вот это:

  • численные алгоритмы, где Python слишком медленный, а переходить на C++ не хочется;
  • ускорение конкретных горячих участков в существующем Python-проекте;
  • работу с большими массивами данных и ручную векторизацию через SIMD;
  • вычислительные ядра для CPU и GPU;
  • утилиты командной строки, которым нужен быстрый старт и один бинарник без зависимостей.

Пока не стоит:

  • писать веб-бэкенды — фреймворков и драйверов баз данных, по сути, нет;
  • ждать зрелых библиотек под любую задачу, как в Python;
  • рассчитывать на большое количество вакансий — язык только вышел в 1.0.

Да, если вы пишете на Python и регулярно упираетесь в его скорость; вам интересны системное программирование и вычисления; вы хотите зайти в язык рано, пока сообщество маленькое, а вклад заметен.

Пока нет, если вы только учитесь программировать — начните с Python, и вернитесь сюда, когда почувствуете его ограничения. Владение значениями и метапрограммирование гораздо понятнее, когда есть с чем сравнивать.

Если решили попробовать — устанавливаем. Если хотите сначала посмотреть на код — загляните в главу Первая программа.

Примеры проверены на Mojo 1.0.0

Тексты курса — CC BY-NC-SA 4.0, код примеров — Apache 2.0