Как пользоваться курсом
Курс рассчитан на тех, кто уже пишет на 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 и Mojo рядом
Заголовок раздела «Python и Mojo рядом»Когда важна разница с Python, код показан в двух колонках:
def add(a, b): return a + bdef add(a: Int, b: Int) -> Int: return a + bТипы аргументов и результата в Mojo обязательны: по ним компилятор выбирает машинные инструкции.
Четыре вида врезок различаются по важности:
Проверь себя
Заголовок раздела «Проверь себя»В конце каждой главы — несколько вопросов. Ответ открывается по щелчку: сначала попробуйте ответить сами.
🎯 Проверь себя
Где лежат длинные примеры из глав?
В папке examples репозитория курса. Их можно скачать и запустить
у себя.
Термины
Заголовок раздела «Термины»Термин при первом упоминании даётся по-русски, а рядом в скобках — английский оригинал курсивом: владение (ownership), время жизни (lifetime). Так проще искать ответы на английском и читать официальную документацию. Все термины собраны в словаре.
Почему примерам можно верить
Заголовок раздела «Почему примерам можно верить»Mojo — молодой язык, и он меняется. Статья двухлетней давности чаще всего уже не компилируется. Поэтому код курса проверяется автоматически, на настоящем компиляторе:
- Каждая программа из папки
examplesкомпилируется и запускается, а её вывод сравнивается с ожидаемым. Тесты должны пройти, замеры — собраться и отработать на маленьких данных. - Каждая полная программа прямо из текста главы — любой блок
с
def main— тоже компилируется и запускается. Если за ней стоит «Результат», вывод сверяется с ним. - Фрагменты без
def mainхотя бы проходят разбор: в них не должно быть ошибок, кроме нехватки окружения. - Программы для видеокарты дополнительно собираются под GPU NVIDIA и AMD. Видеокарты у проверки нет, поэтому эти ядра только собираются, но не запускаются, — в главе об этом сказано.
Отдельное правило: если компилятор хотя бы предупреждает, что
конструкция устарела (deprecated), пример считается сломанным. Курс
не должен учить тому, что скоро удалят.
Проверка запускается при каждом изменении глав и примеров и ещё раз в неделю по расписанию. Если вышла новая версия Mojo и что-то сломалось, мы узнаем об этом раньше читателей.
Внизу каждой страницы написано, на какой версии Mojo проверены её примеры. Сравните её со своей:
uv run mojo --versionЕсли ваша версия новее, почти всё будет работать: внутри ветки 1.x
язык меняется в основном дополнениями. Если старше — обновите Mojo,
выполнив в папке проекта uv add mojo --upgrade-package mojo.
Замеры скорости — исключение: их результат зависит от машины.
Поэтому рядом с каждой цифрой указано, на каком процессоре она получена,
а код замера лежит в examples — повторите его у себя.
Если что-то не работает
Заголовок раздела «Если что-то не работает»- Проверьте версию Mojo — см. выше.
- Загляните в «Диагностику проблем»: там собраны частые трудности с установкой и запуском.
- Если пример из курса не работает, а версия совпадает — это наша
ошибка. Напишите о ней в
issues на GitHub:
какая страница, какая ОС, вывод
uv run mojo --versionи полный текст ошибки.
Лицензии
Заголовок раздела «Лицензии»Тексты курса распространяются по лицензии CC BY-NC-SA 4.0: их можно копировать и переделывать не в коммерческих целях, указав источник и распространяя переделку под той же лицензией.
Код примеров — под Apache 2.0: его можно брать в свои проекты, в том числе коммерческие, сохранив уведомление о лицензии.
Тексты курса — CC BY-NC-SA 4.0, код примеров — Apache 2.0