Общее изменяемое состояние в Rust: действительно ли это корень всех зол?
Автор статьи — Systems Engineer в EPAM Ирине Кокилашвили.

Введение
На написание этой статьи меня вдохновил видеоролик Тома Кайтчука на YouTube — Why Rust is a significant development in programming languages. Статья предназначена для всех, кто интересуется Rust и разработкой ПО. Я написала ее в процессе изучения общего изменяемого состояния (англ. shared mutable state) в Rust и хочу поделиться своими знаниями.
Выражаю искреннюю благодарность своим коллегам Андрею, Илье и Антону, которые уделили время рецензированию и дали ценный фидбек на эту статью.
Сборка мусора и управление памятью
Часто после успешного выполнения компьютерной задачи происходит выход на новый уровень абстракции, что позволяет разрабатывать последующие программы без полного погружения в исходную проблему. Если задача остается невыполненной, она может всплыть в измененном виде на следующем уровне абстракции.
Рассмотрим пример управления памятью и сборки мусора. Сборка мусора — это процесс, в ходе которого среда выполнения автоматически определяет и освобождает память, больше не нужную программе. Это позволяет сосредоточиться на логике приложения, не беспокоясь об управлении памятью.
Хотя внедрение сборщика мусора позволило частично решить задачи, связанные с памятью, возникли другие, — например, потенциальные проблемы с производительностью. Стоит также упомянуть о сложностях при комбинировании различных режимов работы сборщика мусора. К примеру, при интеграции библиотек Java и Go и согласовании их работы в приложении на Python «безудержное веселье» вам гарантировано.
Недостатки Rust
Несмотря на то, что у Rust есть масса достоинств, ему присущи и определенные недостатки.
Одна из сложностей связана с поддержкой асинхронного программирования, которое в языках со сборкой мусора происходит достаточно безболезненно. Хотя в Rust есть возможности асинхронного программирования, сложность возникает из-за модели владения и заимствования, которая делает обработку асинхронных операций гораздо более трудной, чем в других языках.
В Rust также есть мощные функции для работы с общей памятью, но когда программы на Rust взаимодействуют с внешними ресурсами или системами, работать с этими аспектами приходится отдельно.
В своем посте When Rust hurts Роман Кашицын пишет: «Помните, что пути — это обычные указатели, в том числе в Rust. Большинство операций с файлами по своей сути небезопасны и могут приводить к гонкам данных (в широком смысле), если неправильно синхронизировать доступ к файлам. Например, по состоянию на февраль 2023 года у меня уже шесть лет как присутствует concurrency bug в rustup».
Выводы
Rust, благодаря характерным для него безопасности и контролю, — это отличный вариант языка для системного программирования и приложений, где безопасность памяти крайне важна. Однако разработчики должны разбираться в таких тонкостях Rust, как модель владения и заимствования, асинхронный код и небезопасный код.
Мнения, выраженные в статьях на сайте, принадлежат исключительно авторам и могут не совпадать с мнением редакции или участников Anywhere Club.