Почему мьютексы в Rust реализованы именно так
https://habr.com/ru/post/659547/
https://habr.com/ru/post/659547/
Хабр
Почему мьютексы в Rust реализованы именно так
Я часто слышу от пробующих работать с Rust системных программистов жалобы на мьютексы и особенно на Rust Mutex API. Жалобы обычно выглядят так: Они не хотят, чтобы мьютекс содержал данные, только...
👍3
Rust 1.60.0: покрытие на основе исходного кода, новый синтаксис условной компиляции в Cargo, инкрементальная компиляция
https://habr.com/ru/post/659905/
https://habr.com/ru/post/659905/
Хабр
Rust 1.60.0: покрытие на основе исходного кода, новый синтаксис условной компиляции в Cargo, инкрементальная компиляция
Команда Rust публикует новую версию языка — 1.60.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. Если у вас есть предыдущая версия...
❤4
Мини-игра на Rust + macroquad
https://habr.com/ru/company/otus/blog/660503/
https://habr.com/ru/company/otus/blog/660503/
Хабр
Мини-игра на Rust + macroquad
macroquad Это простая и удобная Rust библиотека для разработки небольших 2D игр. Библиотека является кроссплатформенной и работает на Windows, Linux, MacOs, HTML5, Android, IOS. Основные особенности:...
🔥2👍1
Учим Rust вместе
1. Hello World
2. Guessing Game
3. переменные и типы данных
4. функции и контроль выполнения программы
5. разбор задач
6. владение
7. заимствование и слайсы
8. структуры и методы
9. перечислимые типы
10. пакеты и модули
#video #rust
https://www.youtube.com/watch?v=YNWu9V-V5c4&list=PLXhUgKrQD6UoggzaDTQ1luq3XMpYboMTM&ab_channel=%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D0%BA%D0%B8%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0
@rust_code
1. Hello World
2. Guessing Game
3. переменные и типы данных
4. функции и контроль выполнения программы
5. разбор задач
6. владение
7. заимствование и слайсы
8. структуры и методы
9. перечислимые типы
10. пакеты и модули
#video #rust
https://www.youtube.com/watch?v=YNWu9V-V5c4&list=PLXhUgKrQD6UoggzaDTQ1luq3XMpYboMTM&ab_channel=%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D0%BA%D0%B8%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%B0
@rust_code
YouTube
Учим Rust вместе, Hello World
Это первый ролик из серии "Учим Rust вместе" основанный на Rust Book https://doc.rust-lang.org/book/
В нем рассказано как установить Rust и написать первую программу. Для работы использовался простой текстовый редактор и консоль.
В нем рассказано как установить Rust и написать первую программу. Для работы использовался простой текстовый редактор и консоль.
🥰8👍1
Поток управления
Способность запускать некоторый код в зависимости от истинности условия или выполнять некоторый код многократно, пока условие истинно, является базовым элементом большинства языков программирования. Наиболее распространёнными конструкциями, позволяющими управлять потоком выполнения кода в Rust, являются выражения if и циклы.
https://doc.rust-lang.ru/book/ch03-05-control-flow.html
@rust_code
Способность запускать некоторый код в зависимости от истинности условия или выполнять некоторый код многократно, пока условие истинно, является базовым элементом большинства языков программирования. Наиболее распространёнными конструкциями, позволяющими управлять потоком выполнения кода в Rust, являются выражения if и циклы.
https://doc.rust-lang.ru/book/ch03-05-control-flow.html
@rust_code
👍5❤1🥰1👏1
Что такое владение в Rust?
Владение является центральной особенностью языка Rust. Хотя эту особенность легко объяснить, она весьма сильно повлияла на остальную часть языка.
Все программы во время выполнения используют память компьютера и используют разные подходы для управления своей памятью. В одних языках программирования для этой цели используют систему сборки мусора (garbage collection, GC) постоянно следящую за памятью программы, которая больше не используется программой. В других языках программист должен сам явно запрашивать и освобождать память. Rust же использует третий подход: память управляется с помощью системы владения с набором правил, которые компилятор проверяет только во время компиляции программы. Ни одно из правил владения не замедляет выполнение программы.
Читать дальше
@rust_code
Владение является центральной особенностью языка Rust. Хотя эту особенность легко объяснить, она весьма сильно повлияла на остальную часть языка.
Все программы во время выполнения используют память компьютера и используют разные подходы для управления своей памятью. В одних языках программирования для этой цели используют систему сборки мусора (garbage collection, GC) постоянно следящую за памятью программы, которая больше не используется программой. В других языках программист должен сам явно запрашивать и освобождать память. Rust же использует третий подход: память управляется с помощью системы владения с набором правил, которые компилятор проверяет только во время компиляции программы. Ни одно из правил владения не замедляет выполнение программы.
Читать дальше
@rust_code
👍5❤1🔥1🥰1👏1
Определение и инициализация структур
Структуры похожи на кортежи, рассмотренные в разделе "Тип Кортеж", так как оба хранят несколько связанных значений. Как и кортежи, части структур могут быть разных типов. В отличие от кортежей, в структуре необходимо именовать каждую часть данных для понимания смысла значений. Добавление этих имён обеспечивает большую гибкость структур по сравнению с кортежами: не нужно полагаться на порядок данных для указания значений экземпляра или доступа к ним.
Для определения структуры указывается ключевое слово struct и её название. Название должно описывать значение частей данных, сгруппированных вместе. Далее, в фигурных скобках для каждой новой части данных поочерёдно определяются имя части данных и её тип. Каждая пара имя: тип называется полем. Листинг 5-1 описывает структуру для хранения информации об учётной записи пользователя:
struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}
Читать дальше
@rust_code
Структуры похожи на кортежи, рассмотренные в разделе "Тип Кортеж", так как оба хранят несколько связанных значений. Как и кортежи, части структур могут быть разных типов. В отличие от кортежей, в структуре необходимо именовать каждую часть данных для понимания смысла значений. Добавление этих имён обеспечивает большую гибкость структур по сравнению с кортежами: не нужно полагаться на порядок данных для указания значений экземпляра или доступа к ним.
Для определения структуры указывается ключевое слово struct и её название. Название должно описывать значение частей данных, сгруппированных вместе. Далее, в фигурных скобках для каждой новой части данных поочерёдно определяются имя части данных и её тип. Каждая пара имя: тип называется полем. Листинг 5-1 описывает структуру для хранения информации об учётной записи пользователя:
struct User {
active: bool,
username: String,
email: String,
sign_in_count: u64,
}
Читать дальше
@rust_code
🔥4👍2
Интеллектуальный брутфорс: пишем головоломку и солвер для неё
https://habr.com/ru/company/beeline/blog/663852/
https://habr.com/ru/company/beeline/blog/663852/
Хабр
Интеллектуальный брутфорс: пишем головоломку и солвер для неё
Небольшое предисловие В колледже я много играл в головоломки . В статье под головоломками я буду подразумевать очень узкое подмножество таких игр. Вот некоторые из примеров: Stephen's Sausage Roll...
🔥5❤1
Ссылочные переменные и заимствование
Основная проблематика в подходе с использованием кортежа в листинге 4-5 заключается в том, что мы должны вернуть String в вызывающую функцию, чтобы мы могли использовать String после вызова функции calculate_length, потому что String была перемещена в функциюcalculate_length. Вместо этого мы можем предоставить ссылку на значение String Ссылка похожа на указатель в том смысле, что это адрес, по которому мы можем получить доступ к данным, хранящимся по этому адресу, принадлежащему какой-либо другой переменной. В отличие от указателя, ссылка гарантированно указывает на допустимое значение определённого типа. Вот как вы могли бы определить и использовать функцию calculate_length которая имеет ссылку на объект в качестве параметра вместо того, чтобы владеть значением:
Файл: src/main.rs
Читать дальше
@rust_code
Основная проблематика в подходе с использованием кортежа в листинге 4-5 заключается в том, что мы должны вернуть String в вызывающую функцию, чтобы мы могли использовать String после вызова функции calculate_length, потому что String была перемещена в функциюcalculate_length. Вместо этого мы можем предоставить ссылку на значение String Ссылка похожа на указатель в том смысле, что это адрес, по которому мы можем получить доступ к данным, хранящимся по этому адресу, принадлежащему какой-либо другой переменной. В отличие от указателя, ссылка гарантированно указывает на допустимое значение определённого типа. Вот как вы могли бы определить и использовать функцию calculate_length которая имеет ссылку на объект в качестве параметра вместо того, чтобы владеть значением:
Файл: src/main.rs
Читать дальше
@rust_code
👍4🔥2
Срезы
Другим типом данных, который не забирает во владение данные является срез (slice). Срез позволяет ссылаться на смежную последовательность элементов из коллекции, вместо полной коллекции.
Рассмотрим небольшую программную проблему: необходимо написать функцию, входным параметром которой является строка, а выходным значением функции является первое слово, которое будет найдено в этой строке. Если функция не находит пробелы, она возвращает полную строку.
Читать дальше
@rust_code
Другим типом данных, который не забирает во владение данные является срез (slice). Срез позволяет ссылаться на смежную последовательность элементов из коллекции, вместо полной коллекции.
Рассмотрим небольшую программную проблему: необходимо написать функцию, входным параметром которой является строка, а выходным значением функции является первое слово, которое будет найдено в этой строке. Если функция не находит пробелы, она возвращает полную строку.
Читать дальше
@rust_code
👍6
Используем клиентский процессор по максимуму. Часть 1: Rust + WebAssembly
https://habr.com/ru/company/ruvds/blog/662363/
https://habr.com/ru/company/ruvds/blog/662363/
Хабр
Используем клиентский процессор по максимуму. Часть 1: Rust + WebAssembly
На Хабре существует немало статей, посвящённых повышению производительности программ за счёт параллельных вычислений и использования векторных команд. Я решил дополнить этот список и рассказать о...
👍7❤1