Обновить

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

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели5.6K
Всего голосов 5: ↑3 и ↓2+2
Комментарии9

Комментарии 9

Rust std без Tokio и Rayon?

ну хотя-бы в тегах упомянуть...

Спасибо за ваш комментарий! Учту на будущее, в этой же статье хотелось привести абстрактный пример с использованием лишь std.

В 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 (а скорее всего даже больше) за миграцию кода, синхронизацию фич и т.д. и все ради чего? Чтобы не было ошибок при работе с памятью? Если бы это было критично для бизнеса, он бы давно перешел на более безопасные решения (библиотеки, стандарты или языки).

Ведь за ошибки платит пользователь, а не бизнес, тогда как у бизнеса всего есть классный аргумент для обоснования необходимости оплаты новой версии версии ПО с целью устранения ошибок и уязвимостей.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации