Debo admitir que todavía escribo código pseudo-C89 (no totalmente compatible con C99) principalmente debido a Microsoft. Me apoyo mucho en MSVC para el lado de Windows y todavía no son totalmente compatibles con C99, sino que centran su atención en C ++ 17 y en adelante.
Además de eso, estoy trabajando en SDK C contra los cuales muchos desarrolladores de complementos usan MSVC para su desarrollo de complementos, y algunos siguen siendo MSVC 2010. Así que todavía hay compiladores populares que se usan ampliamente en plataformas no tan exóticas (a menos que consideres Windows exótico) que ni siquiera implementan completamente C99 todavía. Cuando apunta a una amplia compatibilidad con la mayor variedad de compiladores (que es una de las razones principales por las que el SDK está escrito en C y no en C ++), todavía hay una gran cantidad de ellos que se usan ampliamente (al menos MSVC) que están atrasados en los tiempos cuando se trata de soporte C. Han pasado casi un par de décadas desde C99 y todavía no tenemos VLA, por ejemplo, en MSVC AFAIK (aún no he verificado MSVC 2017 pero dada la postura de Microsoft sobre C, dudo que sea mucho más compatible con C99) .
Y, por lo tanto, todavía hay desafortunadamente nuevos compiladores que en realidad son bastante buenos con buenos optimizadores y depuradores que aún no son totalmente compatibles con C99. Por supuesto, si no fuera por esto, estaría saltando por todo C11.
Además de la compatibilidad de fuente con complementos y MSVC, también hay interoperabilidad con otros idiomas. Algunos otros idiomas usan el SDK a través de un FFI, y algunos de esos FFI solo entienden C89. Ellos no pueden entender bool
o _Bool
como un simple ejemplo, al importar las funciones de un dylib y sólo comprender, por ejemplo, int
.
Sí, el argumento a favor es la portabilidad, pero la pregunta es si realmente hay sistemas no hipotéticos que solo pueden usar un compilador C89 pero están compilando nuevas distribuciones de software. es decir, si estaba comenzando un nuevo proyecto en C, ¿cómo decidiría si adherirme a C89 podría aumentar el número de usuarios potenciales?
Acabo de darme cuenta de esto, pero haciendo eco Blrfl
, la ganancia de productividad al usar C99 y C11 no es tan enorme en mi caso, mientras que perder la capacidad de permitir que las personas escriban sus complementos en MSVC podría ser un costo enorme (especialmente porque el producto con el que trabajo on tiene la mayor cuota de mercado, con diferencia, en el lado de Windows y el usuario promedio a menudo compra y descarga muchos complementos de terceros). El tipo de producto en el que trabajo está casi a medio camino entre un entorno de desarrollo para programadores / scripters y un producto de usuario final para artistas, ya que mucha gente quiere desarrollar cosas nuevas para permitir nuevas capacidades y lograr efectos especiales de un personas amables aún no han visto. Entonces, en mi caso, en realidad fue una decisión bastante simple favorecer a C89 al menos para el SDK.
Supongo que tienes que mirar los compiladores que te rodean y tratar de averiguar tu objetivo demográfico. Si no está desarrollando una arquitectura de complementos para Windows o está haciendo una programación integrada o tratando de construir un kit de desarrollo de software que pueda ser utilizado por la más amplia gama de compiladores e idiomas, entonces ciertamente hace que las cosas sean más fáciles de alcanzar para C99 + correctamente lejos. También puede considerar cuánto aumento de productividad obtiene de C99 en adelante. No me beneficio tanto de cosas como los VLA, ya que confío en formas lo suficientemente simples como para usar la pila cuando los datos se ajustan y se acumulan de otra manera.
Pero hay muchas cosas por detrás que van desde compiladores populares como MSVC a FFI en otros lenguajes que son geniales en el sentido de que pueden importar y llamar funciones C directamente desde un dylib, pero también pueden estar un poco atrasados en el veces. Por lo tanto, hay muchas cosas comerciales más prácticas a considerar, dependiendo de su dominio, que simplemente favorecer a los más antiguos y estandarizados para algún tipo de estética.