История изменений
Исправление 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 тут разумеется невозможен без полного рефакторинга, но и не нужен.