Martin Michlmayr пересобрал 6200 пакетов Debian свежим компилятором GCC 4.1. При этом было обнаружено более 500 новых багов, из которых 2/3 приходятся на типичные ошибки с С++-коде.
У Microsoft совместимость со старыми компиляторами практически абсолютная. Тока красноглазые сначала жрут "public: foo::foo();" за милую душу, а через двадцать лет у них начинает что-то зудеть и чесаться и они объявляют данную конструкцию вне закона. Очень мило.
> У Microsoft совместимость со старыми компиляторами практически абсолютная.
А вот тут Вы батенька непгавы, непгавы (с лукавым прищуром) Слушай чудо, лежало б ты в мавзолее и не воняло. А то тебя в следующий раз не забальзамируют (заархивируют) и скомпилить не смогут (ленин жив)
>Надо ли говорить, что из-за этого дерьма ни одна программа десятилетней и более давности у пингвинаф не собирается ?
Закрой крышку гроба, вождь! *Правильно* написанная программа соберется в любом случае. Если программер пишет *неправильную* конструкцию только потому, что компилятор позволяет это потом собрать, то грош цена этому программеру.
1. Языки развиваются. Компиляторы развиваются вместе с ними. Компилятор, поддеживающий совместимость со стандартом 20-летней давности (и всеми промежуточными стандартами) - bloatware.
2. Если язык (или компилятор) развивается в сторону ужесточения проверки синтаксических конструкций - ПРАВИЛЬНО, что он ругается на криво написанный код.
Давность программы значения не имеет. Либо программа поддерживается кем-то, либо нет. В первом случае ответственность мейнтейнера - поддерживать ее компилящейся. Во втором - фтопку такую прогу.
>У Microsoft совместимость со старыми компиляторами практически абсолютная. Тока красноглазые сначала жрут "public: foo::foo();" за милую душу, а через двадцать лет у них начинает что-то зудеть и чесаться и они объявляют данную конструкцию вне закона. Очень мило.
Вы Ильич неправы. Обычно говорят о совместимости компилятора со стандартом. Совместимость компилятора с компилятором это, простите, тафтология.
Совместимость МАЙКРОСОФТОВСЬКОГО компилятора с МАЙКРОСОФТОВСЬКИМ компилятором это, увы, не тафтология: m$vc-компилер версии X соответствует m$vc-стандарту версии X, m$vc-компилер версии Y соответствует m$vc-стандарту версии Y. Если m$vc-стандарт версии X НЕ соответствует m$vc-стандарту версии Y (как правило), то и m$vc-компилер версии X не совместим с m$vc-компилером версии Y (хотя каждый из них идеально соответствует своему стандарту) %)
Или имелось в виду соответствие m$vc-стандарта ISO/ANSI стандарту? Так этого за жизни гейтса не будет. Ну разве что код вида #ifdef __M$__ ... #else ... #endif считать совместимым :)
ЗЫ: С++ в гроб, и два крестика на могилу! С и ниипет!
> *Правильно* написанная программа соберется в любом случае. Если программер пишет *неправильную* конструкцию только потому, что компилятор позволяет это потом собрать, то грош цена этому программеру.
Дружно объявляем ядро Linux неправильное программой :)
Ээээ, стоп!!! А жцц 4.1 чем собирался-то??? Если жцц 3.х (который согласно статье еще пропускал ошибки), то он мог пропустить ошибку которая по ошибке не пропускает ошибки которые не очень ошибки или совсем не ошибки %)))
> А жцц 4.1 чем собирался-то??? Если жцц 3.х (который согласно статье еще пропускал ошибки), то он мог пропустить ошибку которая по ошибке не пропускает ошибки которые не очень ошибки или совсем не ошибки %)))
Самим собой он собирался. Сначала собрали 4.1 какой-то другой версией (неважно какой), потом полученным бинариком собрали 4.1 еще раз.
Кстати, давайте составим список языков высокого уровня (или конкретных реализаций), в которых сборка их самих (т.е. полностью - компиллятор, либы, вирт. машины, если нужны) выполняется на них же.