Читаем Rust на примерах полностью

// Точно так же, `mod inaccessible` и `mod nested` обнаружат файлы `nested.rs`

// и `inaccessible.rs`, и затем вставят их здесь в соответствующие модули


mod inaccessible;

pub mod nested;


pub fn function() {

println!("вызвана `my::function()`");

}


fn private_function() {

println!("вызывает `my::private_function()`");

}


pub fn indirect_access() {

print!("вызвана `my::indirect_access()`, которая\n> ");


private_function();

}

В my/nested.rs:

pub fn function() {

println!("вызвана `my::nested::function()`");

}


#[allow(dead_code)]

fn private_function() {

println!("вызвана `my::nested::private_function()`");

}

В my/inaccessible.rs:

#[allow(dead_code)]

pub fn public_function() {

println!("вызвана `my::inaccessible::public_function()`");

}

Давайте проверим, что все ещё работает, как раньше:

$ rustc split.rs && ./split

вызвана `my::function()`

вызвана `function()`

вызвана `my::indirect_access()`, которая

> вызвана `my::private_function()`

вызвана `my::nested::function()`

Контейнеры

Контейнер (crate) — единица компиляции в языке Rust. Когда вызывается rustc some_file.rs, some_file.rs обрабатывается как файл контейнера. Если в some_file.rs есть декларация mod, то содержимое модуля будет объединено с файлом контейнера перед его компиляцией. Другими словами, модули не собираются отдельно, собираются лишь контейнеры.

Контейнер может быть скомпилирован в исполняемый файл или в библиотеку. По умолчанию, rustc создаёт из контейнера исполняемый файл. Это поведение может быть изменено добавлением флага --crate-type со значением lib к rustc.

Создание проекта

Давайте создадим библиотеку и посмотрим, как связать её с другим контейнером.

pub fn public_function() {

println!("called rary's `public_function()`");

}


fn private_function() {

println!("called rary's `private_function()`");

}


pub fn indirect_access() {

print!("called rary's `indirect_access()`, that\n> ");


private_function();

}

$ rustc --crate-type=lib rary.rs

$ ls lib*

library.rlib

Библиотеки получают префикс «lib», и по умолчанию они получают имена в честь своего крейта, но это имя по умолчанию можно переопределить, передав параметр --crate-name в rustc или используя атрибут crate_name.

extern crate

Чтобы связать контейнер с новой библиотекой, нужна декларация extern crate. Она не только свяжет библиотеку, но и импортирует все элементы в модуль с тем же именем, что и сама библиотека. Правила видимости, применимые к модулям, так же применимы и к библиотекам.

// Ссылка на `library`. Импортируем элементы, как модуль `rary`

extern crate rary;


fn main() {

rary::public_function();


// Ошибка! Функция `private_function` приватная

//rary::private_function();


rary::indirect_access();

}

# Где library.rlib путь к скомпилированной библиотеке. Предположим, что

# она находится в той же директории:

$ rustc executable.rs --extern rary=library.rlib && ./executable

вызвана `public_function()` библиотеки rary

вызвана `indirect_access()` библиотеки rary, и в ней

> вызвана `private_function()` библиотеки rary

Cargo

cargo - официальный менеджер пакетов языка Rust. В нем много функций для улучшения качества кода и увеличения скорости разработки! К ним относятся:

   • Управление зависимостями и интеграция с crates.io (официальный реестр пакетов Rust)

   • Осведомлённость о модульных тестах

   • Осведомлённость о тестах производительности

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Ник Фимстер , Эндрю Таненбаум , Дэвид Уэзеролл

Учебные пособия, самоучители
Теоретический минимум по Computer Science
Теоретический минимум по Computer Science

Хватит тратить время на скучные академические фолианты! Изучение Computer Science может быть веселым и увлекательным занятием.Владстон Феррейра Фило знакомит нас с вычислительным мышлением, позволяющим решать любые сложные задачи. Научиться писать код просто — пара недель на курсах, и вы «программист», но чтобы стать профи, который будет востребован всегда и везде, нужны фундаментальные знания. Здесь вы найдете только самую важную информацию, которая необходима каждому разработчику и программисту каждый день.«Эта книга пригодится и для решения повседневных задач. Упреждающая выборка и кэширование помогут сложить рюкзак, параллелизм облегчит готовку на кухне.Ну и, разумеется, ваш программный код будет просто потрясающим».Владстон Феррейра Фило

Владстон Феррейра Фило

Учебные пособия, самоучители