Найти в Дзене
Покупайте СтеллыИ дарите их за контент
1 год назад
 • Вы подписаны

Восстановлен блог rusty-code.ru после его потери. Проект будет продолжен.

3 года назад
 • Вы подписаны

Rust - обработка ошибок стала проще

Обработка ошибок является важным аспектом написания надежного кода. Rust предоставляет мощные инструменты для обработки ошибок, включая тип `Box<dyn Error>`, который обеспечивает гибкость и удобство обработки ошибок. В этой статье мы рассмотрим тип `Box<dyn Error>` в Rust, от его базового использования до более сложных сценариев. В Rust тип `Box<dyn Error>` является объектом трейта, который позволяет равномерно обрабатывать ошибки различных типов. Он позволяет создать объект ошибки в коробке (Box), которая может содержать любой тип, реализующий трейт `std::error::Error`...

3 года назад
 • Вы подписаны

Реализация в Rust - хэш-таблица часть 5

Давайте возьмем стандартную библиотечную реализацию `HashMap`, измеренную на нашем синтетическом тесте. Для этого мы запустим профилировщик и изучим, где главное узкое место, и попытаемся улучшить это. Для моей системы Linux я буду использовать утилиту perf. Не забудьте построить исполняемый файл с использованием символов отладки. Кроме того, рекомендуется профилировать релизную сборку. Согласно отчету профилировщика, наибольшие накладные расходы (30%) приходятся на метод `get_index()`. Для интереса,...

3 года назад
 • Вы подписаны

Реализация в Rust - хэш-таблица часть 4

Продолжим наш путь по написанию собственной хеш-таблицы с нуля, мы будем совершенствовать и оптимизировать нашу реализацию с алгоритмической точки зрения. Одним из возможных обновлений реализации является возможность повторного использования удаленных записей. В настоящее время удаленные являются по существу мертвыми записями, которые просто тратят пространство массива. Единственным способом их полного удаления является вызов метода `resize()`, который создает экземпляр новой хэш-таблицы. Более эффективное использование удаленных записей заключается в их переработке, если это возможно...

3 года назад
 • Вы подписаны

Реализация в Rust - хэш-таблица часть 3

В предыдущих историях мы написали структуру данных хеш-таблицы полностью с нуля в Rust. Сегодня давайте напишем тестовую функцию, чтобы убедиться, что наша хеш-таблица ведет себя точно так же, как и стандартная библиотека. Затем мы напишем простые тесты для сравнения их производительности. Что касается теста, я вызову пять методов `insert()`, `get()`, `get_mut()`, `remove()` и `len()` миллион раз в случайном порядке со случайным ключом и значениями. Для каждой итерации я сравниваю результат, с результатом полученным от объекта, созданного от стандартной библиотеки...

3 года назад
 • Вы подписаны

Реализация в Rust - хэш-таблица часть 2

Давайте продолжим с того места, на котором мы остановились в предыдущей статье. Мы хотим реализовать метод `get_mut()`. Это должно работать так же, как метод get(), но компилятор не позволит нам просто обновлять неизменяемые и изменяемые варианты. Решение состоит в том, чтобы закольцевать записи через итератор, а не перебирать по индексу как делали программисты старой школы. Так как нам нужно начинать с заданного индекса и циклически проходить через весь массив, заканчивая `index — 1`, это само по себе немного сложно, но может быть сделано с помощью метода `Iterator::split_at_mut()`...

Покупайте СтеллыИ дарите их за контент