Muszę przyznać, że nadal piszę kod pseudo-C89 (nie w pełni zgodny z C99) głównie z powodu Microsoftu. Opieram się mocno na MSVC po stronie Windows i nadal nie są one w pełni zgodne z C99, zamiast tego skupiają się głównie na C ++ 17 i nowszych.
Ponadto pracuję nad pakietami SDK języka C, w stosunku do których wielu programistów wtyczek używa MSVC do opracowywania wtyczek, a niektórzy wciąż używają MSVC 2010. Tak więc nadal istnieją popularne kompilatory szeroko stosowane na platformach, które nie są tak egzotyczne (chyba że uważasz, że Windows egzotyczne), które nawet nie w pełni implementują C99. Gdy dążysz do zapewnienia szerokiej kompatybilności z największą gamą kompilatorów (co jest jednym z głównych powodów, dla których SDK jest napisany w C, a nie w C ++), nadal wiele z nich jest powszechnie używanych (przynajmniej MSVC), które są opóźnione jeśli chodzi o wsparcie C. Minęło już prawie kilkadziesiąt lat od C99 i nadal nie mamy VLA, np. W MSVC AFAIK (jeszcze nie sprawdziłem MSVC 2017, ale biorąc pod uwagę stanowisko Microsoftu w C, wątpię, że jest znacznie bardziej zgodny z C99) .
Tak więc wciąż istnieją niestety nowe kompilatory, które są całkiem dobre z dobrymi optymalizatorami i debuggerami, które wciąż nie są w pełni zgodne z C99. Oczywiście, gdyby nie to, skakałbym po całym C11.
Oprócz kompatybilności źródła z wtyczkami i MSVC, istnieje również interakcja z innymi językami. Niektóre inne języki używają zestawu SDK za pośrednictwem interfejsu FFI, a niektóre z tych interfejsów obsługują tylko C89. Nie może zrozumieć, bool
lub _Bool
jako prosty przykład podczas importowania funkcji z dylib i tylko zrozumieć, powiedzmy int
.
Tak, argumentem przemawiającym na korzyść jest przenośność, ale pytanie brzmi, czy faktycznie istnieją nie hipotetyczne systemy, które mogą korzystać tylko z kompilatora C89, ale kompilują nowe dystrybucje oprogramowania. tzn. gdybym rozpoczynał nowy projekt C, jak zdecydowałbym, czy przestrzeganie C89 mogłoby zwiększyć liczbę potencjalnych użytkowników?
Właśnie zauważyłem ten jeden, ale jakby echo Blrfl
, wzrost wydajności przy użyciu C99 i C11 nie jest tak ogromny w moim przypadku, a utrata możliwości pozwalania ludziom na pisanie wtyczek w MSVC może być ogromnym kosztem (szczególnie, ponieważ produkt, w którym pracuję Zdecydowanie największy udział w rynku ma strona systemu Windows, a przeciętny użytkownik często kupuje i pobiera wiele wtyczek stron trzecich). Rodzaj produktu, nad którym pracuję, znajduje się prawie w połowie drogi między środowiskiem programistycznym / programistycznym a produktem końcowym dla artystów, ponieważ tak wielu ludzi chce nad nim opracowywać nowe funkcje, aby umożliwić nowe możliwości i osiągnąć specjalne efekty mili ludzie jeszcze nie widzieli. Tak więc w moim przypadku była to dość prosta decyzja, aby faworyzować C89 przynajmniej dla SDK.
Podejrzewam, że musisz spojrzeć na kompilatory wokół ciebie i spróbować ustalić docelową sytuację demograficzną. Jeśli nie tworzysz architektury wtyczek dla systemu Windows, nie tworzysz żadnego oprogramowania wbudowanego ani nie próbujesz zbudować zestawu programistycznego, który może być używany przez najszerszą gamę dostępnych kompilatorów i języków, z pewnością łatwiej jest sięgnąć po C99 +, prawda z dala. Zastanów się też, ile możesz zwiększyć produktywności od C99 wzwyż. Nie czerpię zbyt wiele korzyści z takich rzeczy jak VLA, ponieważ polegam na wystarczająco prostych sposobach użycia stosu, gdy dane pasują i stertują się inaczej.
Ale istnieje wiele rzeczy opóźnionych od popularnych kompilatorów, takich jak MSVC, do FFI w innych językach, które są fajne w tym sensie, że mogą importować i wywoływać funkcje C bezpośrednio z dylib, ale mogą być również nieco opóźnione czasy. Dlatego w zależności od domeny należy rozważyć o wiele więcej praktycznych rzeczy biznesowych niż po prostu faworyzowanie starszych i ustandaryzowanych pod kątem estetyki.