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

println!("size of `f` in bytes: {}", std::mem::size_of_val(&f));

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

В предыдущем коде используются некоторые вещи, которые не были объяснены ранее. Вот краткое объяснение для нетерпеливых читателей:

   • fun(&foo) используется для передаче аргумента в функцию по ссылке, вместо передачи по значению (fun(foo)). Подробнее см. заимствование или соответствующую главу в книге.

   • std::mem::size_of_val является функцией, но вызывается с указанием полного пути. Код можно разделить на логические единицы, называемые модулями. В данном случае, функция определена в модуле mem, а модуль mem определён в контейнере std. Подробнее см. модули и контейнеры, а так же соответствующую главу в книге

<p id="Вывод_типов"><strong><a l:href="#Вывод_типов">Вывод типов</a></strong></p>

Движок вывода типов весьма умён. Он делает куда больше, чем просто смотрит на тип r-value при инициализации. Он также смотрит, как используется значение после инициализации, чтобы вывести его тип. Вот расширенный пример вывода типов:

fn main() {

// Благодаря выведению типов компилятор знает, `elem` имеет тип - u8.

let elem = 5u8;

// Создадим пустой вектор (расширяемый массив).

let mut vec = Vec::new();

// В данном месте компилятор не знает точный тип `vec`, он лишь знает,

// что это вектор чего-то там (`Vec<_>`).

// Добавляем `elem` в вектор.

vec.push(elem);

// Ага! Теперь компилятор знает, что `vec` - это вектор, который хранит в себе тип `u8`

// (`Vec`)

// ЗАДАНИЕ ^ Попробуйте закомментировать строку `vec.push(elem)`

println!("{:?}", vec);

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Не потребовалось никакой аннотации типов переменных, компилятор счастлив, как и программист!

<p id="Псевдонимы"><strong><a l:href="#Псевдонимы">Псевдонимы</a></strong></p>

Оператор type используется, чтобы задать новое имя существующему типу. Имя типа должно быть в стиле UpperCamelCase, иначе компилятор выдаст предупреждение. Исключением являются примитивные типы: usize, f32 и другие.

// `NanoSecond` это новое имя для `u64`.

type NanoSecond = u64;

type Inch = u64;

// Используйте этот атрибут, чтобы не выводить предупреждение

// о именах не в стиле CamelCase

#[allow(non_camel_case_types)]

type u64_t = u64;

// ЗАДАНИЕ ^ Попробуйте удалить атрибут

fn main() {

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

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

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

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

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

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