Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, gandjustas, Вы писали:
V>>>Считается наоборот. Код с дырами в безопасности не может быть оптимальным. G>>Не понял о чем ты. Представь типичную программу на C++ до C++11, теперь прикинь сколько и где надо добавить проверок в рантайме, чтобы исключить обращения к освобожденной памяти?
V>А что изменилось после C++11 в этом плане?
После C++ умные указатели вошли в стандарт и стали основным способом работы. Это, кстати, позволяет намного сократить количество ошибок, но путем повышения тормозов. Если писать по старинке, через голые указатели, то очень много ошибок обращений к освобожденной памяти возникает, и довольно часто возникают утечки.
V>Протягивать динамику в статику можно только через зависимые типы. В этом случае некая проверка происходит лишь однажды, при "динамическом преобразовании" неких исходных данных (взятых с IO, скажем) в "типизированную версию", а затем все гарантии распространяются автоматом, не требуя дальнейших проверок в рантайме. Именно отсюда растут ноги эффективности — из ГАРАНТИЙ безопасности.
Это тебя в сторону унесло. Не нужны произвольные гарантии, их компилятор не обеспечит. Нужны базовые гарантии безопасности — отсутствие обращений к освобожденным объектам, отсутствие обращений к неинициализированной памяти, запрет реинтерпретации памяти. C++ с голыми указателями этого не дает. А совсем без голых указателей — привет тормоза и счетчиками ссылок.