Устаревшие конструкции
This content is not available in your language yet.
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 года — и именно
поэтому он не соберётся.
Таблица соответствий
Заголовок раздела «Таблица соответствий»Функции и переменные
Заголовок раздела «Функции и переменные»| Устарело | Актуально в 1.0 | Комментарий |
|---|---|---|
fn foo(...) | def foo(...) | fn объявлен устаревшим, компилятор ругается |
let x = 5 | var x = 5 или x = 5 | let удалён из языка; неизменяемых переменных больше нет как понятия |
inout x: Int | mut x: Int | переименовано |
borrowed x: Int | x: Int (без ключевого слова) | неизменяемая ссылка стала поведением по умолчанию |
owned x: String | var 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 for | comptime if / comptime for | новый и более читаемый синтаксис |
constrained[cond, msg]() | comptime assert | |
x[-1] (отрицательный индекс) | x[len(x) - 1] | отрицательная индексация удалена — она мешала оптимизациям |
Stringable, Representable | Writable | трейты объединены |
mojo package, файлы .mojopkg | mojo precompile, файлы .mojoc | переименована команда и расширение |
Установка и инструменты
Заголовок раздела «Установка и инструменты»| Устарело | Актуально в 1.0 | Комментарий |
|---|---|---|
curl https://get.modular.com | sh | uv add mojo или pixi add mojo | старый установщик Modular больше не актуален |
magic init / magic add | uv или 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. Если вы заметили, что какая-то строка таблицы устарела — поправьте её через ссылку «Редактировать страницу» внизу.
Тексты курса — CC BY-NC-SA 4.0, код примеров — Apache 2.0