Pull to refresh

Comments 12

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

На третий день В 2021 году индеец Зоркий Глаз Google заметил, что в тюрьме нет четвёртой стены умные указатели облегчают жизнь.
UFO just landed and posted this here

Я вот чего-то не понял. Безопасность предоставляемая Rust не совсем либо совсем не бесплатная?

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

RefCell использует проверки в рантайме, все остальное — во время компиляции (то есть бесплатно и быстрее любых аналогов на С++, а иногда и С).
Не забывайте еще и то, что любые аргументы функций в Rust имеют аналог спецификатора restrict, что еще сильнее повышает производительность и уже С может остаться позади.

Зависит от рассматриваемого контекста. Любые абстракции так или иначе стоят времени компиляции, это включая проверки времен жизни и границ блоков памяти, выравниваний и тд. После компиляции большая часть бесплатная. If it's compiled, it works. Иногда есть некоторые окна для оптимизаций (например обращение по индексу массива с выпиленным bound check через get_unchecked), но чаще всего они не дадут значимого прироста если код написан идиоматично. Всякие RefCell, Arc и иже с ними работают в динамике и как любые умные указатели они работают в момент работы программы и естественно для этого кейса блокировка указателя тоже будет стоить что-то. Частично это пытаются нивелировать при помощи недавно появившихся const функций который позволяют сделать бесплатную статичную альтернативу refcell, но естественно применимость тоже ограничена.

Сколько сырых указателей надо перевести на умные и оптимизированные по производительности, чтобы сайты Гугла, написанные с использованием Polymer, работали хотя бы со скоростью сайтов 2010 года?
150кбайт загружается с главной страницы, с одним полем, 2 кнопками и главным меню в уголочке. Несомненно, стоит оптимизировать умные указатели в С++ и изобретать прочие улучшения языка.

UFO just landed and posted this here

TLDR: как превратить С++ в плохой диалект Rust, который потребует проприетарных костылей и будет непонятен рядовому плюсовику.

Безопасное использование C++ - отсутствие использования C++

Sign up to leave a comment.