LINUX.ORG.RU

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

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

Такой компилятор сейчас ровно один и называется compcert. GCC и Шланг – это не стабильные компиляторы.

Любой компилятор будет стабильным если он зафиксированной версии зафиксированной сборки.

потому что такая «штобильность» никак не предотвращает UB в твоём коде

У стабильного компилятора точно не изменится поведение через 100 лет, и там где не было UB - оно не появится неожиданно. В частности, в gcc 12.2 использование значения указателя после free - не UB. В каком-нить gcc 53.1 возможно, вдруг станет (мало ли). Но если мы зафиксируем gcc 12.2 - то оно всегда будет не UB.

И когда рано или поздно компилятор придётся обновить (например, для поддержки новой платформы), можно огрести.

Это всё может быть, а может не быть. Я кое-что, как раз в целях стабильности, до сих компилирую vc97 (для оффтопика), которым я его компилировал давно на старте проекта. У него в дефолтных .h/.lib даже нет поддержки winnt5 (например доп. кнопок мыши и горизонтального скролла), но это можно подкостылить. Переход на какой-нить arm тут разумеется невозможен без полного рефакторинга, но и не нужен. Если gcc начнут выкидывать фокусы с внедрением UB в неожиданных местах - зафиксирую и его, никаких проблем. Только тут уже будет версия современная со всеми платформами.

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

Такой компилятор сейчас ровно один и называется compcert. GCC и Шланг – это не стабильные компиляторы.

Любой компилятор будет стабильным если он зафиксированной версии зафиксированной сборки.

потому что такая «штобильность» никак не предотвращает UB в твоём коде

У стабильного компилятора точно не изменится поведение через 100 лет, и там где не было UB - оно не появится неожиданно. В частности, в gcc 12.2 использование значения указателя после free - не UB. В каком-нить gcc 53.1 возможно, вдруг станет (мало ли). Но если мы зафиксируем gcc 12.2 - то оно всегда будет не UB.

И когда рано или поздно компилятор придётся обновить (например, для поддержки новой платформы), можно огрести.

Это всё может быть, а может не быть. Я кое-что, как раз в целях стабильности, до сих компилирую vc97 (для оффтопика), которым я его компилировал давно на старте проекта. У него в дефолтных .h/.lib даже нет поддержки winnt5 (например доп. кнопок мыши и горизонтального скролла), но это можно подкостылить. Переход на какой-нить arm тут разумеется невозможен без полного рефакторинга, но и не нужен.