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

let cmd = &args[1];

let num = &args[2];

// parse the number

let number: i32 = match num.parse() {

Ok(n) => {

n

},

Err(_) => {

eprintln!("ошибка: второй аргумент не является числом");

help();

return;

},

};

// парсим команду

match &cmd[..] {

"increase" => increase(number),

"decrease" => decrease(number),

_ => {

eprintln!("ошибка: неизвестная команда");

help();

},

}

},

// все остальные случаи

_ => {

// показываем сообщение с помощью

help();

}

}

}

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

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

$ ./match_args Rust

Это не ответ.

$ ./match_args 42

Это ответ!

$ ./match_args do something

ошибка: второй аргумент не является числом

usage:

match_args

Проверяет является ли данная строка ответом.

match_args {increase|decrease}

Увеличивает или уменьшает число на 1.

$ ./match_args do 42

ошибка: неизвестная команда

usage:

match_args

Проверяет является ли данная строка ответом.

match_args {increase|decrease}

Увеличивает или уменьшает число на 1.

$ ./match_args increase 42

43

<p id="foreign_function_interface"><strong><a l:href="#foreign_function_interface">Foreign Function Interface</a></strong></p>

Rust предоставляет интерфейс внешних функций (Foreign Function Interface, FFI) к библиотекам, написанным на языке С. Внешние функции должны быть объявлены внутри блока extern и аннотированы при помощи атрибута #[link], который содержит имя внешней библиотеки.

use std::fmt;

// Этот extern-блок подключает библиотеку libm

#[link(name = "m")]

extern {

// Это внешняя функция, которая считает квадратный корень

// комплексного числа одинарной точности

fn csqrtf(z: Complex) -> Complex;

fn ccosf(z: Complex) -> Complex;

}

// Так как вызовы внешних функций считаются unsafe,

// принято писать над ними обёртки.

fn cos(z: Complex) -> Complex {

unsafe { ccosf(z) }

}

fn main() {

// z = -1 + 0i

let z = Complex { re: -1., im: 0. };

// вызов внешней функции - unsafe операция

let z_sqrt = unsafe { csqrtf(z) };

println!("квадратный корень от {:?} равен {:?}", z, z_sqrt);

// вызов безопасного API в котором находится unsafe операция

println!("cos({:?}) = {:?}", z, cos(z));

}

// Минимальная реализация комплексного числа одинарной точности

#[repr(C)]

#[derive(Clone, Copy)]

struct Complex {

re: f32,

im: f32,

}

impl fmt::Debug for Complex {

fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {

if self.im < 0. {

write!(f, "{}-{}i", self.re, -self.im)

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

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

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

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

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

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