Я должен признать, что я все еще пишу псевдо-код C89 (не полностью совместимый с C99) в основном из-за Microsoft. Я сильно полагаюсь на MSVC для Windows, и они все еще не полностью совместимы с C99, вместо этого уделяя основное внимание C ++ 17 и более поздним версиям.
Вдобавок ко всему, я работаю над C SDK, против которых многие разработчики плагинов используют MSVC для разработки своих плагинов, а некоторые до сих пор MSVC 2010. Таким образом, все еще существуют популярные компиляторы, которые широко используются на платформах, не столь экзотичных (если вы не считаете, что Windows экзотика), которая даже еще не полностью внедрила C99. Когда вы нацелены на широкую совместимость с наибольшим диапазоном компиляторов (что является одной из основных причин, по которым SDK написан на C, а не на C ++), все еще существует ряд широко используемых (по крайней мере, MSVC), которые отстают от времени когда дело доходит до поддержки C. Прошло уже несколько десятилетий с C99, и у нас до сих пор нет VLA, например, в MSVC AFAIK (еще не проверял MSVC 2017, но, учитывая позицию Microsoft в отношении C, я сомневаюсь, что она гораздо более совместима с C99) ,
И поэтому, к сожалению, все еще существуют новые компиляторы, которые на самом деле довольно хороши с хорошими оптимизаторами и отладчиками, которые еще не полностью совместимы с C99. Конечно, если бы не это, я бы прыгнул по всему С11.
Помимо совместимости исходного кода с плагинами и MSVC, существует также взаимодействие с другими языками. Некоторые другие языки используют SDK через FFI, а некоторые из этих FFI понимают только C89. Они не могли понять , bool
или в _Bool
качестве простого примера при импорте функций из dylib и понять только, скажем, int
.
Да, аргумент в пользу переносимости, но вопрос в том, существуют ли на самом деле негипотетические системы, которые могут использовать только компилятор C89, но компилируют новые дистрибутивы программного обеспечения. т.е. если бы я начинал новый проект C, как бы я решил, если присоединение к C89 может увеличить количество потенциальных пользователей?
Только что заметил это, но в некотором роде Blrfl
это говорит о том , что прирост производительности при использовании C99 и C11 в моем случае не так уж велик, в то время как потеря возможности разрешать людям писать свои плагины в MSVC может быть огромной ценой (особенно с учетом того, что продукт, на котором я работаю) На данный момент он имеет наибольшую долю рынка на стороне Windows, и средний пользователь часто покупает и загружает множество сторонних плагинов). Продукт, над которым я работаю, находится почти на полпути между средой разработки для программистов / сценаристов и конечным продуктом для художников, так как очень многие люди хотят разрабатывать новые вещи на его основе, чтобы предоставить новые возможности и достичь специальных эффектов Добрые люди еще не видели. Так что в моем случае это было довольно простое решение - отдать предпочтение C89 хотя бы для SDK.
Я полагаю, вам нужно посмотреть на компиляторы вокруг вас и попытаться выяснить вашу целевую демографию. Если вы не разрабатываете архитектуру плагинов для Windows, не занимаетесь встроенным программированием или не пытаетесь создать комплект разработки программного обеспечения, который может использоваться самыми разными компиляторами и языками, то это, безусловно, облегчит работу с C99 +. прочь. Также, возможно, подумайте, какой прирост производительности вы получаете от C99 и выше. Я не сильно выигрываю от таких вещей, как VLA, так как полагаюсь на достаточно простые способы использования стека, когда данные помещаются в кучи, а в остальном - кучи.
Но есть много вещей, отстающих от популярных компиляторов, таких как MSVC, от FFI на других языках, которые классны в том смысле, что они могут импортировать и вызывать функции C напрямую из dylib, но также могут немного отстать раз. Так что в зависимости от вашей области нужно рассмотреть гораздо больше практических бизнес-вещей, чем просто отдать предпочтение старым и стандартизированным для какой-либо эстетики.