Skip to content

Как пользоваться курсом

This content is not available in your language yet.

Курс рассчитан на тех, кто уже пишет на Python. Объяснять, что такое переменная и цикл, мы не будем. Зато подробно разберём всё, чего в Python нет: типы, владение значениями, вычисления на этапе компиляции, SIMD, указатели и работу с памятью.

РазделО чёмКак читать
Началозачем нужен Mojo, что нового в последней версииодин раз
Установка и окружениеWSL, macOS, Linux, VS Code, удалённая машина, диагностикасвою платформу
Из Python в Mojoчто осталось прежним, что изменилось, как читать ошибкиподряд, если пришли из Python
Базовый Mojoпеременные, типы, строки, функции, ошибки, структуры, коллекции, стандартная библиотека, модулиподряд
Владение значениямикопирование, перемещение, ссылки, времена жизниподряд, это ядро языка
Метапрограммированиеcomptime, параметры, трейты, ограниченияподряд
Производительностьзамеры, SIMD, параллелизм, указатели, замыкания, потоки и asyncпо интересу, но после базы
ИнтеграцияPython из Mojo и Mojo из Python, C, пакеты, тестыпо задаче
Практикачетыре проекта от начала до концапосле базы и владения
Справочниксловарь терминов, шпаргалка, ошибки, ресурсыкогда нужно

Разделы «Базовый Mojo», «Владение значениями» и «Метапрограммирование» стоит читать по порядку: каждая глава опирается на предыдущие. Остальное можно брать в любом порядке, когда понадобится.

Вы пишете на Python и хотите понять, что такое Mojo. Зачем нужен Mojo → установка для своей платформы → Что осталось как в Python → Что изменилось → Первая программа и дальше по порядку. На разделе «Владение значениями» стоит притормозить: это главное, чем Mojo отличается от Python.

Нужно ускорить конкретный Python-проект. Установка → Вызов Mojo из Python → проект «Ускоряем Python-скрипт». Там показан весь путь: профилировщик, перенос горячей функции в Mojo и честное сравнение с готовой библиотекой. Пробелы в синтаксисе закрывайте главами «Базового Mojo» по мере надобности.

Интересна скорость ради скорости. База и владение значениями → Как честно мерить скорость → весь раздел «Производительность» → проекты «Матричная библиотека» и «Первое знакомство с GPU».

Вы только учитесь программировать. Честный совет — начните с Python и возвращайтесь, когда упрётесь в его ограничения. Многие идеи Mojo понятнее, когда есть с чем сравнивать.

Под программой стоит блок «Результат» — то, что она печатает:

def main():
var total = 0
for i in range(1, 11):
total += i
print("сумма от 1 до 10:", total)
Результат
сумма от 1 до 10: 55

Этот вывод не набран вручную. Программа из блока выше компилируется и запускается настоящим компилятором, а её вывод сравнивается с тем, что написано в блоке «Результат». Если они разойдутся, проверка курса упадёт. Подробнее — ниже, в разделе «Почему примерам можно верить».

Иногда у блока другая подпись — например, «С видеокартой», если вывод получается только на определённом железе. Об этом всегда сказано в тексте рядом.

Длинные программы лежат в репозитории курса, в папке examples, и на странице показаны с именем файла в заголовке. Их можно скачать и запустить у себя как есть.

Ошибки мы не пересказываем, а показываем дословно — так, как их печатает компилятор. Под текстом ошибки — что она значит по-русски и как её исправить:

error: implicit declaration of 'x' is not allowed; add 'var' to declare a new name
Что это значит

В Python переменная появляется при первом присваивании. В Mojo новое имя нужно объявить явно.

Как исправить

Напишите var x = 5. Подробнее — в главе «Переменные».

Текст ошибки удобно искать поиском по сайту: скопируйте начало сообщения из своего терминала. Если такой ошибки в курсе нет, загляните в главу «Как читать ошибки компилятора».

Когда важна разница с Python, код показан в двух колонках:

🐍 Python
def add(a, b):
return a + b
🔥 Mojo
def add(a: Int, b: Int) -> Int:
return a + b

Типы аргументов и результата в Mojo обязательны: по ним компилятор выбирает машинные инструкции.

Четыре вида врезок различаются по важности:

В конце каждой главы — несколько вопросов. Ответ открывается по щелчку: сначала попробуйте ответить сами.

🎯 Проверь себя

Где лежат длинные примеры из глав?

В папке examples репозитория курса. Их можно скачать и запустить у себя.

Термин при первом упоминании даётся по-русски, а рядом в скобках — английский оригинал курсивом: владение (ownership), время жизни (lifetime). Так проще искать ответы на английском и читать официальную документацию. Все термины собраны в словаре.

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

  1. Каждая программа из папки examples компилируется и запускается, а её вывод сравнивается с ожидаемым. Тесты должны пройти, замеры — собраться и отработать на маленьких данных.
  2. Каждая полная программа прямо из текста главы — любой блок с def main — тоже компилируется и запускается. Если за ней стоит «Результат», вывод сверяется с ним.
  3. Фрагменты без def main хотя бы проходят разбор: в них не должно быть ошибок, кроме нехватки окружения.
  4. Программы для видеокарты дополнительно собираются под GPU NVIDIA и AMD. Видеокарты у проверки нет, поэтому эти ядра только собираются, но не запускаются, — в главе об этом сказано.

Отдельное правило: если компилятор хотя бы предупреждает, что конструкция устарела (deprecated), пример считается сломанным. Курс не должен учить тому, что скоро удалят.

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

Внизу каждой страницы написано, на какой версии Mojo проверены её примеры. Сравните её со своей:

Окно терминала
uv run mojo --version

Если ваша версия новее, почти всё будет работать: внутри ветки 1.x язык меняется в основном дополнениями. Если старше — обновите Mojo, выполнив в папке проекта uv add mojo --upgrade-package mojo.

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

  1. Проверьте версию Mojo — см. выше.
  2. Загляните в «Диагностику проблем»: там собраны частые трудности с установкой и запуском.
  3. Если пример из курса не работает, а версия совпадает — это наша ошибка. Напишите о ней в issues на GitHub: какая страница, какая ОС, вывод uv run mojo --version и полный текст ошибки.

Тексты курса распространяются по лицензии CC BY-NC-SA 4.0: их можно копировать и переделывать не в коммерческих целях, указав источник и распространяя переделку под той же лицензией.

Код примеров — под Apache 2.0: его можно брать в свои проекты, в том числе коммерческие, сохранив уведомление о лицензии.

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

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