Найти в Дзене
Восстановлен блог rusty-code.ru после его потери. Проект будет продолжен.
10 месяцев назад
Rust - обработка ошибок стала проще
Обработка ошибок является важным аспектом написания надежного кода. Rust предоставляет мощные инструменты для обработки ошибок, включая тип `Box<dyn Error>`, который обеспечивает гибкость и удобство обработки ошибок. В этой статье мы рассмотрим тип `Box<dyn Error>` в Rust, от его базового использования до более сложных сценариев. В Rust тип `Box<dyn Error>` является объектом трейта, который позволяет равномерно обрабатывать ошибки различных типов. Он позволяет создать объект ошибки в коробке (Box), которая может содержать любой тип, реализующий трейт `std::error::Error`...
2 года назад
Реализация в Rust - хэш-таблица часть 5
Давайте возьмем стандартную библиотечную реализацию `HashMap`, измеренную на нашем синтетическом тесте. Для этого мы запустим профилировщик и изучим, где главное узкое место, и попытаемся улучшить это. Для моей системы Linux я буду использовать утилиту perf. Не забудьте построить исполняемый файл с использованием символов отладки. Кроме того, рекомендуется профилировать релизную сборку. Согласно отчету профилировщика, наибольшие накладные расходы (30%) приходятся на метод `get_index()`. Для интереса,...
2 года назад
Реализация в Rust - хэш-таблица часть 4
Продолжим наш путь по написанию собственной хеш-таблицы с нуля, мы будем совершенствовать и оптимизировать нашу реализацию с алгоритмической точки зрения. Одним из возможных обновлений реализации является возможность повторного использования удаленных записей. В настоящее время удаленные являются по существу мертвыми записями, которые просто тратят пространство массива. Единственным способом их полного удаления является вызов метода `resize()`, который создает экземпляр новой хэш-таблицы. Более эффективное использование удаленных записей заключается в их переработке, если это возможно...
2 года назад
Реализация в Rust - хэш-таблица часть 3
В предыдущих историях мы написали структуру данных хеш-таблицы полностью с нуля в Rust. Сегодня давайте напишем тестовую функцию, чтобы убедиться, что наша хеш-таблица ведет себя точно так же, как и стандартная библиотека. Затем мы напишем простые тесты для сравнения их производительности. Что касается теста, я вызову пять методов `insert()`, `get()`, `get_mut()`, `remove()` и `len()` миллион раз в случайном порядке со случайным ключом и значениями. Для каждой итерации я сравниваю результат, с результатом полученным от объекта, созданного от стандартной библиотеки...
2 года назад
Реализация в Rust - хэш-таблица часть 2
Давайте продолжим с того места, на котором мы остановились в предыдущей статье. Мы хотим реализовать метод `get_mut()`. Это должно работать так же, как метод get(), но компилятор не позволит нам просто обновлять неизменяемые и изменяемые варианты. Решение состоит в том, чтобы закольцевать записи через итератор, а не перебирать по индексу как делали программисты старой школы. Так как нам нужно начинать с заданного индекса и циклически проходить через весь массив, заканчивая `index — 1`, это само по себе немного сложно, но может быть сделано с помощью метода `Iterator::split_at_mut()`...
2 года назад
Реализация в Rust - хэш-таблица часть 1
Давайте внедрим структуру данных хэш-таблицы в Rust. Хэш-таблицы невероятно важны в структурах данных благодаря их эффективности и универсальности. Реализуя её с нуля, мы сможем получить представление о лежащих в его основе алгоритмах и структурах данных. Мало того, у нас также будет шанс улучшить наши навыки Rust. Говоря об алгоритме, мы собираемся реализовать исследование линейной адресации хэш-таблицы. Есть и другие варианты, но я думаю, что с этого, проще начать. Я возьму подход сверху вниз,...
2 года назад
Закрепление данных по постоянному адресу в rust
`Pin` - очень запутанная тема, с которой я столкнулся при программировании в Rust. Я старался научиться этому, но руководства, статьи и видео, которые я смотрел, трудно понять. Они обычно связаны с необходимостью знать другую сложную концепцию в Rust, и это заставило меня ходить между статьями, видео и руководствами по другим концепциям. В этой статье я отфильтрую для Вас все остальные понятия и сосредоточусь исключительно на `pin`. Прочитав эту статью, вы научитесь применять pin в коде и понимать его использование в других исходниках...
100 читали · 2 года назад
Tokio - высвобождение мощности асинхронного программирования в Rust
В области разработки программного обеспечения умение писать эффективные и надежные приложения является необходимым навыком. Здесь в игру вступает Tokio, асинхронная среда выполнения для языка программирования Rust. Tokio - это не просто инструмент, это средство, которое предоставляет строительные блоки, необходимые для создания сетевых приложений. Она обеспечивает гибкость для широкого спектра систем, от больших серверов с десятками ядер до небольших встраиваемых устройств. Tokio - продукт сообщества, построенный для сообщества...
220 читали · 2 года назад
Заметки о Rust - Unique and NonNull
`Unique<T>` - это тип указателя в Rust, который обычно используется внутри Rust для представления уникальной семантики владения и полезен для построения абстракций, таких как `Box<T>`, `Vec<T>`, `String` и `HashMap<K, V>`. В стандартной библиотеке объявляется в `core/src/ptr/unique.rs` как: `Unique<T>` - это ненулевой ковариантный уникальный указатель. Вот что означают эти термины: Такое сочетание свойств позволяет Rust делать определенные допущения, позволяющие оптимизировать код. Например, поскольку...
2 года назад
Перечисления - Rust объекты необычного размера
Как оптимизация компилятора для перечисления обеспечивает производительность наших программ. Недавно, во время путешествия по исходному коду `std::io::Result`, я нашел что-то, что бросило вызов моему пониманию типов перечисления Rust. В 64-разрядных системах s`td::io::Error` - это обертка вокруг внутреннего представления в битовой упаковке `Repr`: Определение `Repr` выглядит пугающим, но детали не важны. Все, что вам нужно знать, это то, что, несмотря на представление нескольких возможных видов...
2 года назад
Перегрузка кода Rust - магия умных указателей
Умные указатели предлагают множество преимуществ по сравнению с обычными указателями. Эта статья научит вас всему, что вам нужно знать об умных указателях в Rust. Одним из сильных преимуществ Rust является управление памятью, особенно потому, что безопасность не нарушена. Структура владения Rust помогает компилятору гарантировать безопасность кода и отсутствуют проблемы с памятью, такие как висячие указатели и утечка памяти. В дополнение к обычным указателям, Rust поддерживает умные указатели с дополнительными метаданными и возможностями...
2 года назад