Введение
Эта книга является основным справочником по языку программирования Rust.
Note
Известные ошибки и недочёты в этой книге перечислены в
разделе вопросов на GitHub. Если вы обнаружите случай, когда поведение компилятора не соответствует тексту в книге, создайте вопрос (issue), чтобы мы могли решить, какой вариант является правильным.
Релизы Rust
Новые версии языка Rust выпускаются каждые шесть недель.
Первый стабильный релиз языка — Rust 1.0.0, за ним последовали Rust 1.1.0 и так далее.
Инструменты (rustc, cargo и др.) и документация (GitHub issues, эта книга и др.) выпускаются вместе с релизом языка.
Последнюю версию этой книги, соответствующую последней версии Rust, всегда можно найти по адресу https://doc.rust-lang.org/reference/. Предыдущие версии можно найти, добавив версию Rust перед каталогом “reference”. Например, Справочник для Rust 1.49.0 находится по адресу https://doc.rust-lang.org/1.49.0/reference/.
Чем Справочник не является
Эта книга не служит введением в язык. Предполагается, что читатель уже знаком с основами языка. Для получения таких базовых знаний доступна book.
Эта книга также не является справочником по standard library, входящей в дистрибутив языка. Эти библиотеки документированы отдельно путём извлечения атрибутов документации из их исходного кода. Многие функции, которые можно было бы ожидать как возможности языка, в Rust являются возможностями библиотек, поэтому то, что вы ищете, может находиться там, а не здесь.
Аналогично, эта книга обычно не описывает специфику rustc как инструмента или Cargo.
У rustc есть rustc book.
У Cargo есть cargo book, которая содержит cargo reference.
Есть несколько страниц, таких как linkage, которые всё же описывают, как работает rustc.
Эта книга также служит справочником только по тому, что доступно в стабильной версии Rust. Для получения информации о нестабильных функциях, находящихся в разработке, см. Unstable Book.
Компиляторы Rust, включая rustc, выполняют оптимизации.
Справочник не определяет, какие оптимизации разрешены или запрещены.
Вместо этого рассматривайте скомпилированную программу как “чёрный ящик”.
Её можно исследовать только путём запуска, подачи на вход данных и наблюдения за её выводом.
Всё, что происходит таким образом, должно соответствовать тому, что указано в справочнике.
Как пользоваться этой книгой
Эта книга не предполагает, что вы читаете её последовательно. Каждая глава, как правило, может быть прочитана самостоятельно, но будет содержать перекрёстные ссылки на другие главы для аспектов языка, на которые она ссылается, но не обсуждает.
Есть два основных способа чтения этого документа.
Первый — найти ответ на конкретный вопрос.
Если вы знаете, какая глава отвечает на этот вопрос, вы можете перейти к этой главе через оглавление.
В противном случае вы можете нажать s или щёлкнуть значок лупы на верхней панели, чтобы найти ключевые слова, связанные с вашим вопросом.
Например, предположим, вы хотите узнать, когда удаляется временное значение, созданное в операторе let.
Если вы ещё не знаете, что lifetime of temporaries определено в главе о выражениях, вы можете выполнить поиск по запросу “temporary let”, и первый результат поиска приведёт вас к этому разделу.
Второй способ — в целом углубить свои знания об определённом аспекте языка. В этом случае просто просматривайте оглавление, пока не увидите что-то, о чём хотите узнать больше, и просто начните читать. Если ссылка выглядит интересной, щёлкните по ней и прочитайте соответствующий раздел.
Тем не менее, не существует неправильного способа читать эту книгу. Читайте её так, как, по вашему мнению, вам лучше всего подходит.
Соглашения
Как и все технические книги, эта книга использует определённые соглашения в отображении информации. Эти соглашения описаны здесь.
-
Утверждения, определяющие термин, содержат этот термин курсивом. Всякий раз, когда этот термин используется вне данной главы, он обычно представляет собой ссылку на раздел, содержащий это определение.
Пример термина — это пример определяемого термина.
-
Основной текст описывает последнюю стабильную редакцию (edition). Различия с предыдущими редакциями выделены в специальных блоках:
2018 Edition differences
До редакции 2018 года поведение было таким. Начиная с редакции 2018 года, поведение стало таким.
-
Примечания, содержащие полезную информацию о состоянии книги или указывающие на полезную, но в основном выходящую за рамки книги информацию, помещаются в блоки-примечания.
Note
Это пример примечания.
-
Блоки-примеры показывают пример, демонстрирующий какое-либо правило или отмечающий интересный аспект. Некоторые примеры могут содержать скрытые строки, которые можно просмотреть, нажав на значок глаза, который появляется при наведении курсора или нажатии на пример.
Example
Это пример кода.
#![allow(unused)] fn main() { println!("hello world"); } -
Предупреждения, показывающие некорректное (unsound) поведение в языке или, возможно, запутанные взаимодействия языковых возможностей, помещаются в специальные блоки-предупреждения.
Warning
Это пример предупреждения.
-
Фрагменты кода в тексте выделены
<code>тегами.Более длинные примеры кода помещаются в блок с подсветкой синтаксиса, который имеет элементы управления для копирования, выполнения и показа скрытых строк в правом верхнем углу.
// Это скрытая строка. fn main() { println!("Это пример кода"); }Все примеры написаны для последней редакции, если не указано иное.
-
Грамматика и лексические конструкции описаны в Нотация.
-
Идентификаторы правил появляются перед каждым языковым правилом в квадратных скобках. Эти идентификаторы предоставляют способ ссылаться на конкретное правило в языке и ссылаться на него (например). Идентификатор правила использует точки для разделения секций от наиболее общих к наиболее конкретным (например, destructors.scope.nesting.function-body). На узких экранах имя правила сворачивается и отображается как
[*].На имя правила можно щёлкнуть, чтобы перейти по ссылке на это правило.
Warning
Организация правил в настоящее время находится в процессе изменения. На данный момент эти имена идентификаторов нестабильны между релизами, и ссылки на эти правила могут не работать, если они изменены. Мы намерены стабилизировать их, когда организация устоится, чтобы ссылки на имена правил не ломались между релизами.
-
Правила, для которых существуют связанные тесты, будут содержать ссылку
Testsпод собой (на узких экранах ссылка выглядит как[T]). Нажатие на ссылку вызовет список тестов, на которые можно щёлкнуть для просмотра теста. Например, см. input.encoding.utf8.Связывание правил с тестами — это непрерывный процесс. Обзор см. в главе Сводка тестов.
Участие в разработке
Мы приветствуем любой вклад.
Вы можете внести свой вклад в эту книгу, открыв вопрос (issue) или отправив запрос на принятие изменений (pull request) в the Rust Reference repository.
Если эта книга не отвечает на ваш вопрос, и вы считаете, что ответ на него должен быть в ней, пожалуйста, не стесняйтесь создать вопрос или спросить об этом в потоке t-lang/doc на Zulip.
Знание того, для чего люди чаще всего используют эту книгу, помогает нам направить внимание на то, чтобы сделать эти разделы как можно лучше.
И, конечно, если вы видите что-то неправильное или не нормативное, но не указанное явно как таковое, также, пожалуйста, создайте вопрос.