Rust
6.68K subscribers
261 photos
28 videos
3 files
826 links
Rust programming language

По всем вопросам- @haarrp

@ai_machinelearning_big_data - машинное обучение

@programming_books_it - бесплатные it книги

@pythonl - 🐍

@ArtificialIntelligencedl - AI

@datascienceiot - ml 📚
Download Telegram
Срезы

Другим типом данных, который не забирает во владение данные является срез (slice). Срез позволяет ссылаться на смежную последовательность элементов из коллекции, вместо полной коллекции.

Рассмотрим небольшую программную проблему: необходимо написать функцию, входным параметром которой является строка, а выходным значением функции является первое слово, которое будет найдено в этой строке. Если функция не находит пробелы, она возвращает полную строку.

Читать дальше

@rust_code
👍6
Что выведет код ?

Ответ: 1243

@rust_code
👍51
Что выведет код ?

Ответ: 14

@rust_code
👍10
Rust большая шпаргалка по языку

https://cheats.rs/

@rust_code
👍10🥰3
Что выведет код ?

Ответ: 123

@rust_code
👍6👏21
Перечисления и Сопоставление с образцом

В этой статье мы рассмотрим перечисления, также называемые enums. Перечисления позволяют определять тип, перечисляя его возможные варианты. Сначала, мы определим и воспользуемся перечислением, чтобы показать, как перечисление может закодировать значение вместе с данными. Далее мы рассмотрим особенно полезный enum, называемый Option, который выражает факт того, что значение может быть либо чем-то, либо ничем. Потом мы посмотрим на сопоставление с образцом в match выражении, позволяющем легко выполнять разный код для различных значений перечисления. Наконец, мы рассмотрим конструкцию if let - ещё одну удобную и лаконичную идиому, которая позволяет вам управлять перечислениями в коде.

Перечисления являются особенностью многих языков, но в каждом языке их возможности различаются. Перечисления в Rust наиболее похожи на алгебраические типы данных, Algebraic Data Types, представленные в таких функциональных языках как F#, OCaml и Haskell.

Читать дальше

@rust_code
👍8
Что выведет код ?

struct S;

fn main() {
let [x, y] = &mut [S, S];
let eq = x as *mut S == y as *mut S;
print!("{}", eq as u8);
}

Ответ: 1

@rust_code
👍7
Управление растущими проектами с помощью пакетов, крейтов и модулей

По мере роста кодовой базы ваших программ, организация проекта будет иметь большое значение, ведь отслеживание всей программы в голове будет становиться всё более сложным. Группируя связанные функции и разделяя код по основным функциональностям, (фичам, feature), вы делаете более прозрачным понимание о том, где искать код реализующий определённую функцию и где стоит вносить изменения для того чтобы изменить её поведение.

Программы, которые мы писали до сих пор, были в одном файле одного модуля. По мере роста проекта, мы можем организовывать код иначе, разделив его на несколько модулей и несколько файлов. Пакет может содержать несколько бинарных крейтов и опционально один крейт библиотеки. По мере роста пакета мы также можем извлекать части нашей программы в отдельные крейты, которые затем станут внешними зависимостями для основного кода нашей программы. Эта глава охватывает все эти техники. В свою очередь для очень крупных проектов, состоящих из набора взаимосвязанных пакетов развивающихся вместе, Cargo предоставляет рабочие пространства, workspaces, их мы рассмотрим за пределами данной главы, в разделе "Рабочие пространства Cargo" Главы 14.

Дополнительно к группированию функциональности, инкапсуляция деталей реализации позволяет повторно использовать код на более высоком уровне: после реализации операции, другой код может вызывать этот код через открытый интерфейс, не зная как работает реализация. То, как вы пишете код, определяет какие части общедоступны для использования другим кодом и какие части являются закрытыми деталями реализации для которых вы оставляете право на изменения только за собой. Это ещё один способ ограничить количество деталей, которые вы должны держать в голове.

Связанное понятие - это область видимости: вложенный контекст в котором написан код имеющий набор имён, которые определены «в текущей области видимости». При чтении, письме и компиляции кода, программистам и компиляторам необходимо знать, относится ли конкретное имя в определённом месте к переменной, к функции, к структуре, к перечислению, к модулю, к константе или другому элементу и что означает этот элемент. Можно создавать области видимости и изменять какие имена входят или выходят за их рамки. Нельзя иметь два элемента с тем же именем в одной области; есть доступные инструменты для разрешения конфликтов имён.

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

Пакеты, Packages: Функционал Cargo позволяющий собирать, тестировать и делиться крейтами
Крейты, Crates: Дерево модулей, которое создаёт библиотечный или исполняемый файл
Модули, Modules и use: Позволяют вместе контролировать организацию, область видимости и конфиденциальность путей
Пути, Paths: способ именования элемента, такого как структура, функция или модуль

Читать дальше

@rust_code
👍5
Сохранение списка значений с помощью вектора


Первым типом коллекции, который мы разберём, будет Vec<T>, также известный как вектор (vector). Векторы позволяют сохранять более одного значения в одной структуре данных, сохраняющей элементы в памяти один за другим. Векторы могут сохранять данные только одного типа. Их удобно использовать, когда нужно сохранить список элементов, например, список текстовых строк в файле, или список цен товаров в корзине покупок.

Создание нового вектора
Чтобы создать новый пустой вектор, мы вызываем функцию Vec::new, как показано в листинге 8-1.


let v: Vec<i32> = Vec::new();

Читать дальше

@rust_code
👍10
Dexios – быстрый, безопасный инструмент шифрования командной строки с открытым исходным кодом

Он полностью написан на Rust и уделяет первостепенное внимание безопасности, производительности и удобству

@rust_code | #Rust #Interesting #Useful

@rust_code
👍12👎1