Найти тему
Ржавый код

Перегрузка кода Rust - магия умных указателей

Умные указатели предлагают множество преимуществ по сравнению с обычными указателями. Эта статья научит вас всему, что вам нужно знать об умных указателях в Rust.

Одним из сильных преимуществ Rust является управление памятью, особенно потому, что безопасность не нарушена.

Структура владения Rust помогает компилятору гарантировать безопасность кода и отсутствуют проблемы с памятью, такие как висячие указатели и утечка памяти.

В дополнение к обычным указателям, Rust поддерживает умные указатели с дополнительными метаданными и возможностями.

Умные указатели полезны для устранения утечек памяти.

Что такое умные указатели в Rust?

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

Поскольку Rust использует структуры для выполнения умных указателей, можно также и управлять умными указателями.

При соединении памяти с помощью умных указателей с динамически выделенными данными память автоматически освобождается.

Умные указатели предоставляют возможности ограничения срока службы объектов Rust, что делает их полезными для устранения ошибок, таких как обособление нулевых указателей и утечки памяти, которые распространены в других низкоуровневых языках, таких как C и C++.

Преимущества использования умных указателей

Ниже приведены некоторые преимущества использования умных указателей:

  • Управление памятью на автопилоте: По сравнению с ручным управлением памятью с помощью обычных указателей, интеллектуальные указатели позволяют автоматизировать управление памятью, включая выделение и освобождение.
  • Много безопасности: Интеллектуальные указатели обеспечивают семантику владения, гарантируя, что только один владелец может получить доступ к ресурсам одновременно, удаляя маршруты данных и проблемы, связанные с параллелизмом.
  • Гибкость: Для гибкой разработки безопасного кода, Rust допускает множество умных указателей, каждый со своим набором семантики владения.
  • Управление ресурсами: Умные указатели могут использоваться для управления дополнительными активами, такими как обработчики файлов и сетевые сокеты, инкапсулируя ресурсы в умные указатели, что позволяет легко контролировать их срок службы и гарантировать, что они правильно закрыты и удалены после использования.
  • Повышенная скорость: умные указатели повышают скорость, уменьшая копирование и выделение памяти. Использование умных указателей приводит к уменьшению объема памяти, что приводит к повышению производительности.

Умные указатели имеют смысл для приложений среднего и большого размера, особенно когда важно управление памятью.

Типы умных указателей

Rust поддерживает множество умных указателей, включая `Box`, `Rc`, `RefCell` и `Mutex`.

1. Box

`Box` - самый основной и часто используемый умный указатель Rust.

`Box` помогает с выделением памяти и создает штучный указатель для специальных возможностей.

Если необходимо гарантировать, что память немедленно освобождается, когда указатели находятся вне области действия, то полезен `Box`.

Чтобы создать и использовать указатель `Box`, выполните следующие действия.

-2

Поскольку тип `Box` является частью прелюдии Rust, импортировать его, в отличие от других умных указателей, не потребуется.

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

2. RC

Умный указатель `RC` (Reference Counted) позволяет создавать общие значения владения.

`RC` отслеживают количество ссылок на значение и освобождают его, когда конечная ссылка становится недействительной.

При необходимости совместного владения переменной для обеспечения доступности во многих частях программы используется `RC`.

Импортируйте структуру `RC` из стандартной библиотеки, создайте новый RC-указатель с помощью new функции, затем клонируйте переменную указателя с переменной, чтобы использовать `RC` указатель.

-3

Переменная `x` является переменной указателя `RC`, а переменная `y` является клоном с доступом к памяти.

Число ссылок равно двум, и значение освобождается из памяти, когда переменные больше не находятся в области действия.

3. RefCell

Внутренняя изменяемость указателя `RefCell` позволяет неизменяемым и изменяемым ссылкам сосуществовать до тех пор, пока существует только одна изменяемая ссылка в любой момент.

При изменении данных, принадлежащих изменяемым ссылкам, используется `RefCell`.

Поскольку метод `Refcell` отсутствует в прелюдии Rust, для использования необходимо импортировать структуру из стандартной библиотеки.

-4

Значение сохраняется в указателе `Refcell`, а переменная `y` является неизменяемой ссылкой на значение.

Функция `borrow_mut` преобразует значение в изменяемую ссылку.

Если есть только одна изменяемая ссылка, программа безопасна.

4. Mutex

Взаимные исключения предлагаются через указатель `Mutex`.

В параллельных программах интеллектуальный указатель `Mutex` полезен для синхронизации доступа к значениям сразу для нескольких потоков.

`Mutex` использует взаимное исключение, чтобы гарантировать, что только один поток может получить доступ к значению одновременно, не допуская гонки данных.

Чтобы использовать `Mutex` в Rust, импортируйте структуру `Mutex` и создайте новый экземпляр.

-5

Новый экземпляр `Mutex` представлен переменной `counter`.

Основная функция использует метод блокировки экземпляра `Mutex` для получения информации о блокировки `Mutex`.

Перед снятием блокировки и публикацией значения, блокировка обеспечивает безопасное изменение значения счетчика.

Тип `Mutex` позволяет одновременно использовать и изменять общие ресурсы (в данном случае переменную счетчика) только одному потоку.

Чтобы предотвратить гонку данных и другие трудности параллелизма, взаимное исключение гарантирует сериализацию параллельного доступа к общим ресурсам.

Модель владения Rust гарантирует безопасность памяти

Одним из методов безопасности и гибкости памяти Rust являются умные указатели.

С помощью средства проверки заимствования во время компиляции модель владения Rust гарантирует безопасный доступ программ к памяти.

Проверка заимствования является ключевым компонентом модели владения Rust, сохраняя строгие ограничения на доступ к памяти и изменения.

Статья на rusty-code.ru

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц