LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

Ладно, попробую объяснить, видимо это не всем очевидно.

В Rust вся система типов, весь язык сделан так, что ты эту ошибку без unsafe не допустишь никак.

Ты можешь исхитряться сколько угодно, но система типов там железобетонная.

То, что ты показываешь - это уже не C. Это тулинг вокруг C. Эвристики компилятора отлавливают самые простейшие баги. Более сложные тулзы отлавивают баги посложней. Но должно быть очевидно, что все баги они не отловят. Иначе таких багов бы не было, а они есть.

valgrind это вообще другое. И без valgrind эта программа печатает мусор, тут семи пядей во лбу быть не надо, чтобы понять, что что-то не так. valgrind штука хорошая, но она тебе не поможет, если эта функция выполняется редко. К примеру это обработчик ошибки, который ты при тестировании не вызываешь. А вот хакер вызовет и почитает, чего у тебя там в стеке интересное лежит. А может и модифицирует. Ну и без хакеров багов хватает. Продакшн под valgrind-ом не запустишь. И под виндой valgrind не запустишь. И на микроконтроллере valgrind не запустишь. И ядерный драйвер под valgrind вроде не запустишь, раз уж мы тут ядро обсуждаем.

И, да, все эти valgrind-ы и линтеры это следствие недостаточной строгости C. Которую приходится компенсировать более строгими инструметами. Это вся полезно и нужно, и в Rust это нужно, там тоже не все баги ловятся языком, и unsafe тоже никто не отменял.

Исходная версия vbr, :

Ладно, попробую объяснить, видимо это не всем очевидно.

В Rust вся система типов, весь язык сделан так, что ты эту ошибку без unsafe не допустишь никак.

Ты можешь исхитряться сколько угодно, но система типов там железобетонная.

То, что ты показываешь - это уже не C. Это тулинг вокруг C. Эвристики компилятора отлавливают самые простейшие баги. Более сложные тулзы отлавивают баги посложней. Но должно быть очевидно, что все баги они не отловят. Иначе таких багов бы не было, а они есть.

valgrind это вообще другое. И без valgrind эта программа печатает мусор, тут семи пядей во лбу быть не надо, чтобы понять, что что-то не так. valgrind штука хорошая, но она тебе не поможет, если эта функция выполняется редко. К примеру это обработчик ошибки, который ты при тестировании не вызываешь. А вот хакер вызовет и почитает, чего у тебя там в стеке интересное лежит. А может и модифицирует. Ну и без хакеров багов хватает. Продакшн под valgrind-ом не запустишь.

И, да, все эти valgrind-ы и линтеры это следствие недостаточной строгости C. Которую приходится компенсировать более строгими инструметами. Это вся полезно и нужно, и в Rust это нужно, там тоже не все баги ловятся языком, и unsafe тоже никто не отменял.