Устаревшие конструкции
Mojo развивался публично три года, и всё это время язык менялся быстро. К релизу 1.0 многое из того, что было в статьях, видео и книгах 2023–2025 годов, перестало работать.
Эта страница — противоядие. Если вы нашли в интернете пример, который не компилируется, сначала загляните сюда.
Главное: fn больше не используется
Заголовок раздела «Главное: fn больше не используется»Самое заметное изменение. Раньше в Mojo было два ключевых слова для функций:
def — «как в Python», с динамическим поведением, и fn — строгий,
типизированный, быстрый.
К версии 1.0 язык пришёл к одному ключевому слову. Победил def, но
со строгой семантикой прежнего fn: обязательные типы аргументов,
никакого неявного проброса исключений.
fn main(): let x: Int = 42 print(x)def main(): var x: Int = 42 print(x)Два изменения в трёх строках: fn → def и let → var.
Именно так выглядит типичный пример из статьи 2024 года — и именно
поэтому он не соберётся.
Таблица соответствий
Заголовок раздела «Таблица соответствий»Функции и переменные
Заголовок раздела «Функции и переменные»| Устарело | Актуально сейчас | Комментарий |
|---|---|---|
fn foo(...) | def foo(...) | fn удалён: 'fn' has been removed; use 'def' instead |
let x = 5 | var x = 5 | let удалён из языка; неизменяемых переменных больше нет как понятия |
x = 5 без объявления | var x = 5 | в 1.1 неявное объявление — ошибка |
alias N = 5 | comptime N = 5 | в 1.1 слово alias удалено |
inout x: Int | mut x: Int | переименовано |
borrowed x: Int, read x: Int | x: Int (без ключевого слова) или imm x: Int | неизменяемая ссылка — поведение по умолчанию; read в 1.1 удалён |
owned x: String | var x: String | передача владения теперь обозначается var |
Структуры
Заголовок раздела «Структуры»| Устарело | Актуально сейчас | Комментарий |
|---|---|---|
@value | @fieldwise_init | генерирует конструктор по полям |
@register_passable | соответствие трейту | декоратор удалён, заменён системой трейтов |
fn __init__(inout self) | def __init__(out self) | и ключевое слово функции, и конвенция self |
__copyinit__ / __moveinit__ | __init__ с именованными аргументами копирования и перемещения | старые имена больше не распознаются автоматически |
| Копируемость по умолчанию | явные трейты Copyable, Movable | по умолчанию структура не копируема и не перемещаема |
Метапрограммирование и прочее
Заголовок раздела «Метапрограммирование и прочее»| Устарело | Актуально сейчас | Комментарий |
|---|---|---|
@parameter if / @parameter for | comptime if / comptime for | новый и более читаемый синтаксис |
constrained[cond, msg]() | comptime assert | |
x[-1] (отрицательный индекс) | x[len(x) - 1] | отрицательная индексация удалена — она мешала оптимизациям |
Stringable, Representable | Writable | трейты объединены: write_to даёт и print(x), и String(x) |
EqualityComparable | Equatable | переименован |
GreaterThanComparable | Comparable | поглощён: хватает одного __lt__ |
CollectionElement | Movable | List больше не требует копируемости |
from math import sqrt, from collections import Dict | from std.math import sqrt; Dict не нужно импортировать | с 1.0 стандартная библиотека импортируется только с префиксом std.: unable to locate module 'math' |
mojo package, файлы .mojopkg | mojo precompile, файлы .mojoc | переименована команда и расширение |
Установка и инструменты
Заголовок раздела «Установка и инструменты»| Устарело | Актуально сейчас | Комментарий |
|---|---|---|
curl https://get.modular.com | sh | uv add mojo или pixi add mojo | старый установщик Modular больше не актуален |
magic init / magic add | uv или pixi | менеджер magic был промежуточным решением |
Пакет modular | пакеты mojo и max | старый пакет снимается с поддержки |
Как проверять чужой код
Заголовок раздела «Как проверять чужой код»Простой чек-лист. Если в примере из интернета встречается хотя бы одно из этого — код написан до Mojo и требует правки:
- слово
fnв объявлении функции; - слова
letиalias; - переменные без
varпри первом присваивании; inout,borrowed,owned,readв аргументах;- декоратор
@valueили@register_passable; @parameter if;- установка через
curl ... get.modular.comили черезmagic.
Что дальше
Заголовок раздела «Что дальше»Справочник по старому синтаксису закончен — начинается сам язык: «Первая программа».
Источники
Заголовок раздела «Источники»Изменения сверены с официальным мануалом Mojo и заметками к релизам на mojolang.org. Если вы заметили, что какая-то строка таблицы устарела — поправьте её через ссылку «Редактировать страницу» внизу.
Тексты курса — CC BY-NC-SA 4.0, код примеров — Apache 2.0