Обработка ошибок является важным аспектом написания надежного кода. Rust предоставляет мощные инструменты для обработки ошибок, включая тип `Box<dyn Error>`, который обеспечивает гибкость и удобство обработки ошибок. В этой статье мы рассмотрим тип `Box<dyn Error>` в Rust, от его базового использования до более сложных сценариев. В Rust тип `Box<dyn Error>` является объектом трейта, который позволяет равномерно обрабатывать ошибки различных типов. Он позволяет создать объект ошибки в коробке (Box), которая может содержать любой тип, реализующий трейт `std::error::Error`...
Давайте возьмем стандартную библиотечную реализацию `HashMap`, измеренную на нашем синтетическом тесте. Для этого мы запустим профилировщик и изучим, где главное узкое место, и попытаемся улучшить это. Для моей системы Linux я буду использовать утилиту perf. Не забудьте построить исполняемый файл с использованием символов отладки. Кроме того, рекомендуется профилировать релизную сборку. Согласно отчету профилировщика, наибольшие накладные расходы (30%) приходятся на метод `get_index()`. Для интереса,...
Продолжим наш путь по написанию собственной хеш-таблицы с нуля, мы будем совершенствовать и оптимизировать нашу реализацию с алгоритмической точки зрения. Одним из возможных обновлений реализации является возможность повторного использования удаленных записей. В настоящее время удаленные являются по существу мертвыми записями, которые просто тратят пространство массива. Единственным способом их полного удаления является вызов метода `resize()`, который создает экземпляр новой хэш-таблицы. Более эффективное использование удаленных записей заключается в их переработке, если это возможно...
В предыдущих историях мы написали структуру данных хеш-таблицы полностью с нуля в Rust. Сегодня давайте напишем тестовую функцию, чтобы убедиться, что наша хеш-таблица ведет себя точно так же, как и стандартная библиотека. Затем мы напишем простые тесты для сравнения их производительности. Что касается теста, я вызову пять методов `insert()`, `get()`, `get_mut()`, `remove()` и `len()` миллион раз в случайном порядке со случайным ключом и значениями. Для каждой итерации я сравниваю результат, с результатом полученным от объекта, созданного от стандартной библиотеки...
2 года назад
Если нравится — подпишитесь
Так вы не пропустите новые публикации этого канала