Два способа записи

Язык можно набирать целиком на русской раскладке клавиатуры: все конструкции, для которых раньше нужны были { }, ->, &&, <>, [], $ и другие знаки, которых на русской раскладке нет, имеют словесную запись. Это основной способ записи; во всей документации примеры даны в нём. Старая запись по-прежнему принимается компилятором (можно даже смешивать в одном файле), так что существующие программы продолжают работать без изменений.

Старая записьНовая запись (русская раскладка)
{ ... }тело сразу после заголовка, закрывается конец
-> тип: тип
&&, `\\, !`и, или, не
<, >, <=, >=меньше, больше, не больше, не меньше
Список<целое>Список из целых
Словарь<текст, целое>Словарь из текста и целого
функция обмен<Т>(...)функция обмен из Т (...)
результат<целое>, канал<текст>результат из целого, канал из текста
числа[0]числа(0)
целое[5], целое[]целое(5), целое()
[1, 2, 3]массив(1, 2, 3)
$имя, ${выражение}%имя%, %(выражение)%; %% — знак процента

Падежи в типах

После слова из встроенные типы можно писать в родительном падеже, как в обычной русской речи:

Одна штукаМного штук
результат из целого, канал из текстаСписок из целых, Список из текстов
Словарь из текста и целогоСписок из дробных, Список из верных

Формы: целого/целых, дробного/дробных, текста/текстов, верного/верных. Прежняя запись (результат из целое, Список из текст) продолжает работать, так что старый код менять не нужно. Для собственных структур слово остаётся в исходной форме: Список из Пользователь. Слова вроде текста по-прежнему можно использовать как имена переменных: особый смысл они получают только сразу после из.

&, `\, ^, ~, <<, >>`наложить_маску(а, б), включить_биты(а, б), переключить_биты(а, б), инвертировать_биты(а), сдвинуть_влево(а, н), сдвинуть_вправо(а, н)

Правила, о которых стоит знать:

  • конец общий для цепочки иначе если: каждая цепочка

закрывается одним конец. иначе если считается цепочкой, только если если стоит на той же строке, что и иначе; если если начинается на следующей строке, это обычный оператор внутри блока иначе со своим конец.

  • Разделитель типов — и (запятая тоже принимается): `Словарь из

текста и целого`. Если вложенный обобщённый тип стоит не последним аргументом, пиши его в скобках старой записи (`Словарь<Список<целое>, текст>) — иначе и` читалось бы неоднозначно.

  • числа(0) — это индексация, если числа — переменная или

параметр (локальное имя побеждает одноимённую функцию), либо поле структуры, не совпадающее с именем метода.

  • Пустые () в типе (целое() — динамический массив) нельзя

писать сразу после : в типе возврата — там пиши [].

  • Зарезервированные слова: конец, из, и, или, не,

меньше, больше больше нельзя использовать как имена переменных.

  • % в строках: %имя% подставляет значение; чтобы получить

обычный знак процента, пиши %% (например, "100%%").

Конвертер старого кода

Компилятор сам переписывает программу из старой записи в новую:

запустить --в-русский файл.код              # результат на экран
запустить --в-русский файл.код --на-месте   # перезаписать файл

Комментарии и форматирование сохраняются. После конвертации результат разбирается заново, и дерево программы сравнивается с исходным: если они не совпали, файл не записывается, а печатается сообщение об ошибке. Так были переведены все файлы самого проекта (примеры, тесты, стандартная библиотека, сайт, панель разработчика).