Skip to content

Устаревшие конструкции

This content is not available in your language yet.

Mojo развивался публично три года, и всё это время язык менялся быстро. К релизу 1.0 многое из того, что было в статьях, видео и книгах 2023–2025 годов, перестало работать.

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

Самое заметное изменение. Раньше в Mojo было два ключевых слова для функций: def — «как в Python», с динамическим поведением, и fn — строгий, типизированный, быстрый.

К версии 1.0 язык пришёл к одному ключевому слову. Победил def, но со строгой семантикой прежнего fn: обязательные типы аргументов, никакого неявного проброса исключений.

🐍 Устарело
fn main():
let x: Int = 42
print(x)
🔥 Mojo
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 = 5var x = 5let удалён из языка; неизменяемых переменных больше нет как понятия
x = 5 без объявленияvar x = 5в 1.1 неявное объявление — ошибка
alias N = 5comptime N = 5в 1.1 слово alias удалено
inout x: Intmut x: Intпереименовано
borrowed x: Int, read x: Intx: Int (без ключевого слова) или imm x: Intнеизменяемая ссылка — поведение по умолчанию; read в 1.1 удалён
owned x: Stringvar 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 forcomptime if / comptime forновый и более читаемый синтаксис
constrained[cond, msg]()comptime assert
x[-1] (отрицательный индекс)x[len(x) - 1]отрицательная индексация удалена — она мешала оптимизациям
Stringable, RepresentableWritableтрейты объединены: write_to даёт и print(x), и String(x)
EqualityComparableEquatableпереименован
GreaterThanComparableComparableпоглощён: хватает одного __lt__
CollectionElementMovableList больше не требует копируемости
from math import sqrt, from collections import Dictfrom std.math import sqrt; Dict не нужно импортироватьс 1.0 стандартная библиотека импортируется только с префиксом std.: unable to locate module 'math'
mojo package, файлы .mojopkgmojo precompile, файлы .mojocпереименована команда и расширение
УстарелоАктуально сейчасКомментарий
curl https://get.modular.com | shuv add mojo или pixi add mojoстарый установщик Modular больше не актуален
magic init / magic adduv или 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. Если вы заметили, что какая-то строка таблицы устарела — поправьте её через ссылку «Редактировать страницу» внизу.

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

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