To pytanie nie brzmi: „Dlaczego ludzie nadal używają starych języków programowania?” Rozumiem to całkiem dobrze. W rzeczywistości dwa języki programowania, które znam najlepiej, to C i Scheme, z których oba pochodzą z lat 70.
Ostatnio czytałem o zmianach w C99 i C11 w porównaniu do C89 (która nadal wydaje się być najczęściej używaną wersją C w praktyce i wersją, której nauczyłem się od K&R). Rozglądając się, wydaje się, że każdy intensywnie używany język programowania otrzymuje nową specyfikację przynajmniej raz na dekadę. Nawet Fortran wciąż otrzymuje nowe wersje, mimo że większość osób korzystających z niego nadal używa FORTRAN 77.
Porównaj to z podejściem, powiedzmy, systemu składu TeX. W 1989 roku wraz z wydaniem TeX 3.0 Donald Knuth zadeklarował, że TeX jest kompletny, a przyszłe wydania będą zawierać tylko poprawki błędów. Nawet poza tym stwierdził, że po jego śmierci „wszystkie pozostałe błędy staną się funkcjami” i absolutnie nie będą dokonywane żadne dalsze aktualizacje. Inni mogą rozwidlać TeX i zrobili to, ale nazwy systemów wynikowych zmieniają się, aby wskazać, że różnią się od oficjalnego TeXa. Nie dlatego, że Knuth uważa, że TeX jest doskonały, ale dlatego, że rozumie wartość stabilnego, przewidywalnego systemu, który zrobi to samo za pięćdziesiąt lat, co teraz.
Dlaczego większość projektantów języków programowania nie stosuje tej samej zasady? Oczywiście, gdy język jest stosunkowo nowy, sensowne jest, że przejdzie on okres szybkiej zmiany, zanim się ustabilizuje. I nikt nie może tak naprawdę sprzeciwić się drobnym zmianom, które nie robią nic więcej, jak tylko skodyfikować istniejące pseudo-standardy lub poprawić niezamierzone odczyty. Ale kiedy język wydaje się wymagać poprawy po dziesięciu lub dwudziestu latach, dlaczego nie po prostu rozwidlić go lub zacząć od nowa, zamiast próbować zmienić to, co już jest używane? Jeśli niektórzy ludzie naprawdę chcą programować obiektowo w Fortranie, dlaczego nie stworzyć w tym celu „Objective Fortran” i zostawić Fortran w spokoju?
Przypuszczam, że można powiedzieć, że bez względu na przyszłe wersje, C89 jest już standardem i nic nie stoi na przeszkodzie, aby ludzie nadal go używali. To trochę prawda, ale konotacje mają konsekwencje. W trybie pedantycznym GCC ostrzega przed składnią, która jest albo przestarzała, albo ma nieco inne znaczenie w C99, co oznacza, że programiści C89 nie mogą całkowicie zignorować nowego standardu. Dlatego w C99 musi być jakaś korzyść, która wystarczy, aby narzucić to obciążenie wszystkim, którzy używają tego języka.
To prawdziwe pytanie, a nie zaproszenie do kłótni. Oczywiście mam opinię na ten temat, ale w tej chwili staram się zrozumieć, dlaczego nie chodzi już o to, jak już się to robi. Przypuszczam, że pytanie brzmi:
Jakie są (rzeczywiste lub postrzegane) zalety aktualizacji standardu językowego, w przeciwieństwie do tworzenia nowego języka opartego na starym?
--std=x
Przełącznik GCC ), więc nie jest tak, jakby tworzenie nowych standardów skutkowało narzędziami destabilizującymi starszy kod.