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 1.0
def main():
var x: Int = 42
print(x)

Два изменения в трёх строках: fndef и letvar. Именно так выглядит типичный пример из статьи 2024 года — и именно поэтому он не соберётся.

УстарелоАктуально в 1.0Комментарий
fn foo(...)def foo(...)fn объявлен устаревшим, компилятор ругается
let x = 5var x = 5 или x = 5let удалён из языка; неизменяемых переменных больше нет как понятия
inout x: Intmut x: Intпереименовано
borrowed x: Intx: Int (без ключевого слова)неизменяемая ссылка стала поведением по умолчанию
owned x: Stringvar x: Stringпередача владения теперь обозначается var
УстарелоАктуально в 1.0Комментарий
@value@fieldwise_initгенерирует конструктор по полям
@register_passableсоответствие трейтудекоратор удалён, заменён системой трейтов
fn __init__(inout self)def __init__(out self)и ключевое слово функции, и конвенция self
__copyinit__ / __moveinit____init__ с именованными аргументами копирования и перемещениястарые имена больше не распознаются автоматически
Копируемость по умолчаниюявные трейты Copyable, Movableпо умолчанию структура не копируема и не перемещаема
УстарелоАктуально в 1.0Комментарий
@parameter if / @parameter forcomptime if / comptime forновый и более читаемый синтаксис
constrained[cond, msg]()comptime assert
x[-1] (отрицательный индекс)x[len(x) - 1]отрицательная индексация удалена — она мешала оптимизациям
Stringable, RepresentableWritableтрейты объединены
mojo package, файлы .mojopkgmojo precompile, файлы .mojocпереименована команда и расширение
УстарелоАктуально в 1.0Комментарий
curl https://get.modular.com | shuv add mojo или pixi add mojoстарый установщик Modular больше не актуален
magic init / magic adduv или pixiменеджер magic был промежуточным решением
Пакет modularпакеты mojo и maxстарый пакет снимается с поддержки

Простой чек-лист. Если в примере из интернета встречается хотя бы одно из этого — код написан до Mojo 1.0 и требует правки:

  • слово fn в объявлении функции;
  • слово let;
  • inout, borrowed, owned в аргументах;
  • декоратор @value или @register_passable;
  • @parameter if;
  • установка через curl ... get.modular.com или через magic.

Изменения сверены с официальным мануалом Mojo 1.0 и заметками к релизам на mojolang.org. Если вы заметили, что какая-то строка таблицы устарела — поправьте её через ссылку «Редактировать страницу» внизу.

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

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