Что такое прелюдия?

Говоря об импорте, слово прелюдия используется так часто у рустеков.

Что это за прелюдия, о которой они говорят?

Как это влияет на мои программы Rust?

Ответы

Ответ 1

В Rust, чтобы использовать символ, вы должны либо:

  • определили символ в текущей области
  • импортировали символ в текущей области действия с помощью директивы use: use std::mem;
  • ссылаться на символ, используя его абсолютный путь: std::mem::replace

однако, некоторые такие символы могут использоваться без таких действий: Option или Copy например!

Это связано с предикатом ржавчины.

Было оценено так часто, как правило, несколько признаков, типов и функций, которые имели смысл не требовать, чтобы их использование требовало явного импорта необходимых символов каждый раз. Это достигается благодаря двум неявным действиям, предпринятым компилятором:

  • в корне каждого ящика компилятор вводит неявный extern crate std;
  • в каждом модуле компилятор вводит неявный use std::prelude::v1::*; (пока)

std::prelude::v1 является просто регулярным модулем, который реэкспортирует те часто используемые символы, используя синтаксис pub use .... Его точное содержание можно найти здесь.


Ряд других библиотек или даже подкомпонентов стандартной библиотеки также определяют модуль prelude, который можно импортировать с тем же синтаксисом импорта glob: use xxx::prelude::*;. В отличие от std::prelude, однако эти компиляторы не имеют специальной оболочки и поэтому требуют явного импорта.


Компилятор не зависит от точного содержимого прелюдии, поэтому, если бы кто-то заменил ящик std своими собственными (например, во встроенной разработке), тогда можно было бы решить, что входит в их модуль std::prelude::v1.