Комментарии 9
Rust std без Tokio и Rayon?
ну хотя-бы в тегах упомянуть...
В Rust существует всего 9 основных умных указателей
Из вашего списка: Cell, RefCell, Mutex, RwLock и ManuallyDrop не являются не то что умными, а даже тупыми указателями - это просто обертки поверх данных.
Остаётся только 4 умных указателя: Box, Rc, Arc и Weak.
Другими словами, только за счет использования правильных типов данных, точно так же как в С++ :-)
Есть маленькое такое различие. В C++ при использовании “неправильных” типов данных ты молча получаешь UB, а в Rust - ошибку компиляции, потому что компилятор любезно укажет, что твой тип не Send + Sync и так далее. Дальше ты либо берешь “правильный” тип, либо с помощью unsafe даешь понять, что готов добровольно отстрелить себе тут конечности.
В C++ при использовании “неправильных” типов данных ты молча получаешь UB, …
Так может нужно научится правильно использовать С++, не пенять на плохой инструмент?
Так в том и дело - в вашей же статье написано, что безопасность в C++ оплачивается "дисциплиной, ограничениями и автоматизированными проверками". Rust просто автоматизирует эту оплату: компилятор и есть та самая дисциплина, только встроенная в инструмент, а не в регламент команды.
Призыв "научиться правильно использовать C++" - это, по сути, призыв делать руками то, что можно делать автоматически. Например, в этой статье приводятся данные Microsoft и Google: ~70% уязвимостей в их продуктах приходилось на ошибки памяти - и это при лучших в мире процессах, санитайзерах и code review. Если дисциплина не масштабируется даже там, то проблема именно в инструменте, а не в людях.
Я не утверждаю, что проблема именно в людях, а пишу про то, что дело не только в самом инструменте. Платить приходится за все, и разработчиком Rust в том числе (ограничениями, изменением архитектуры, соглашениями или упрощениями предметной области и т.д.).
Поэтому было бы честно признавать, что в С++ нет встроенной memory safety, поэтому приходится либо использовать сторонние инструменты/библиотеки, либо жертвовать безопасностью с прицелом на последующие исправления, либо нанимать еще одну команду разработчиков Rust и какое-то время платить x2 (а скорее всего даже больше) за миграцию кода, синхронизацию фич и т.д. и все ради чего? Чтобы не было ошибок при работе с памятью? Если бы это было критично для бизнеса, он бы давно перешел на более безопасные решения (библиотеки, стандарты или языки).
Ведь за ошибки платит пользователь, а не бизнес, тогда как у бизнеса всего есть классный аргумент для обоснования необходимости оплаты новой версии версии ПО с целью устранения ошибок и уязвимостей.

Параллелизм с общим состоянием в Rust