¡Te ruego que obtengas la máxima puntuación! ! ¡Programación web! ¡Planificación de autoestudio! ¡Perspectivas de desarrollo! ¡Tantas preguntas! ¡Estoy pidiendo a algunos expertos de buen corazón que me den orientación~!
Bjarne Stroustrup: diseñador del lenguaje C
Tim Lindholm: famoso ingeniero de Sun Company
¿Apostando por Java? ¿O insistir en C sin vacilar? ¿O deberías considerar C#? ¿Estás indeciso? Por lo tanto, también puede escuchar las opiniones de los siguientes expertos y comprender el estado actual y el futuro de los lenguajes de programación orientados a objetos.
Palabras clave: C, Java, C#, POO
La tecnología avanza rápidamente, los ciclos de producción de productos son cada vez más cortos y muchos programadores no tienen tiempo para dominar un segundo lenguaje. Independientemente de si se considera o no la capacidad técnica de un programador, el tipo de proyectos en los que podrá participar en el futuro y el tipo de empresa a la que podrá incorporarse dependerá en gran medida del lenguaje de programación que elija hoy. Para ayudar a todos a comprender claramente la situación actual y futura de los dos lenguajes OOP más populares, C y Java, entrevistamos a Bjarne Stroustrup, el diseñador del lenguaje C, y a Tim Lindholm, un famoso ingeniero de Sun. Las siguientes son sus opiniones, que cubren el futuro de la programación, las comparaciones entre lenguajes, las compensaciones en el desarrollo y la innovación de los lenguajes OOP y los estándares de diseño de programas.
El futuro
¿Qué cambios ocurrirán en la forma en que los programadores escriben código en los próximos tres años?
Stroustrup: En C, puede resultar complicado realizar cualquier tarea importante sin las bibliotecas adecuadas detrás. Y una vez que tengamos la biblioteca adecuada, cualquier cosa podrá controlarse desde la palma de nuestras manos. Por tanto, la importancia de construir y utilizar bibliotecas está aumentando. Esto también implica que la programación genérica se utilizará cada vez más. Sólo a través de GP podemos garantizar la versatilidad y alta eficiencia de la biblioteca. También anticipo un crecimiento apasionante en la informática distribuida y en las aplicaciones de "componentes". Para la mayoría de los programadores, estas tareas de desarrollo serán simples y directas mediante el uso de bibliotecas convenientes y aplicables. Actualmente existe una tendencia entre los proveedores de compiladores de intentar vender su exclusivo "modelo de objetos" y detalles de su interfaz gráfica (GUI) a los usuarios. Por ejemplo, COM de Microsoft y los atributos de clase "propiedades" de Inprise. Para los usuarios, esto es innecesario e indeseable. La biblioteca que me gustaría ver debería ser una biblioteca construida en C estándar, con una interfaz flexible y una biblioteca confiable. Normalmente, estas interfaces deberían ser independientes de la plataforma. C es extremadamente expresivo y debería ser suficiente para lograr esto sin usar muchas macros. Incluso si algunos lugares no pueden cumplir este principio al 100%, la dependencia de las plataformas y los fabricantes debería ser limitada. La consecución de este objetivo puede reflejar la atención de la industria de herramientas de software a la industria de desarrollo de aplicaciones. Sospecho que actualmente no existe mercado para proveedores independientes multiplataforma. Si se puede establecer un mercado de este tipo, se podrá alentar a los fabricantes a fabricar productos "verdaderamente útiles" para los clientes.
Lindholm: Para los desarrolladores que escriben código, las principales fuerzas motrices seguirán siendo dos: la red y la distribución, es decir, la necesidad de diseñar y desarrollar software que no dependa de una sola máquina. La mayoría de las aplicaciones no se ejecutarán solas en un único dispositivo, sino que serán programas distribuidos independientes de la plataforma que utilizarán tecnologías como EJB y JSP. Los programadores tendrán que afrontar los numerosos obstáculos de la informática distribuida. Esto planteará serios desafíos a los patrones de diseño, las técnicas y la intuición en los que confían muchos programadores. Esto es algo que debes tener en cuenta antes de elegir un lenguaje de programación, aunque las características de diseño de los diferentes lenguajes pueden facilitar o dificultar esta transformación. Una parte importante del crecimiento de las aplicaciones de red es el crecimiento explosivo de pequeños dispositivos móviles y dispositivos de Internet especializados.
Cada uno de estos dispositivos tiene su propio sistema operativo, o sólo tiene el mismo sistema operativo en un campo de dispositivo específico. Ahora podemos enumerar estos dispositivos uno por uno: equipos de acceso doméstico, teléfonos móviles, periódicos electrónicos, PDA, equipos de red automatizados, etc. Pero el número y la profundidad de estas áreas de dispositivos rápidamente se volverán inconmensurables. Todos sabemos que este mercado es asombrosamente grande y el auge de las PC no es nada comparado con él. Por tanto, la competencia en el mercado de aplicaciones para estos dispositivos será brutal. Una de las formas importantes de ganar es ingresar al mercado lo antes posible. Los desarrolladores necesitan excelentes herramientas para escribir y depurar su software de manera rápida y eficiente. La independencia de plataforma también es una fórmula ganadora, que permite a los programadores desarrollar software que admita múltiples plataformas de dispositivos. Otro cambio que anticipo es que nuestra capacidad para desarrollar aplicaciones colaborativas de código (Java) y datos (XML) seguirá mejorando. Esta sinergia es uno de los objetivos principales del desarrollo de aplicaciones potentes. Hemos visto esta tendencia a partir de la rápida popularidad de XML y el progreso de la especificación ebXML. ebXML es una infraestructura abierta basada en XML para el comercio electrónico y el comercio internacional, desarrollada conjuntamente por el Centro de las Naciones Unidas para la Promoción del Comercio y el Comercio Electrónico (UN/CEFACT) y la Organización para el Avance de los Estándares de Información Estructurada (OASIS).
¿Podemos esperar que surja un verdadero lenguaje orientado a componentes? ¿Quién podría ser su creador?
Stroustrup: Sospecho que la falta de resultados en esta área se debe precisamente a que la gente, principalmente los no programadores, ponen demasiadas expectativas en la vaga palabra "componente". Estas personas soñaban que algún día los componentes sacarían de alguna manera a los programadores de la historia. En el futuro, los "diseñadores" competentes sólo necesitarán utilizar componentes preajustados, arrastrar y soltar el mouse para ensamblar el sistema. Para los fabricantes de herramientas de software, esta idea tiene otro significado: creen que sólo ellos conservarán la tecnología necesaria y tendrán la capacidad de escribir dichos componentes. Hay una falacia fundamental en esta idea: es difícil que un componente así gane popularidad generalizada. Si un solo componente o estructura puede cumplir con la mayoría de los requisitos de una aplicación o industria, es un producto rentable para su fabricante y no es técnicamente difícil. Sin embargo, varios competidores en la industria pronto descubrirán que si todos adoptan estos componentes, sus productos serán los mismos y no habrá diferencia entre ellos. Se verán reducidos a simples empleados y sus principales ganancias serán. bolsillos de esos proveedores de componentes/estructuras!
Los "componentes" pequeños son útiles, pero no crean el apalancamiento deseado. Los componentes de tamaño mediano y más versátiles son muy útiles, pero requieren una flexibilidad inusual en su construcción. En C, hemos logrado algunos avances en este sentido mediante el uso integral de jerarquías de clases con diferentes formas compartidas e interfaces cuidadosamente diseñadas mediante plantillas. Espero obtener algunos resultados interesantes y útiles en esta área, pero creo que es más probable que se trate de un nuevo estilo de programación en C que de un nuevo lenguaje.
Lindholm: Escribir aplicaciones orientadas a componentes parece ser más una cuestión de inversión, diseño y gestión del programador que una cuestión de lenguaje de programación. Por supuesto, algunos lenguajes tienen ventajas inherentes a este respecto, pero es puramente engañoso decir que existe un nuevo lenguaje mágico que puede simplificar enormemente la escritura de componentes.
Microsoft ha hecho todas sus apuestas por C#, ¿hacia dónde irán el resto de lenguajes?
Stroustrup: C seguirá siendo un lenguaje dominante durante la próxima década. Cuando se enfrenta a nuevos desafíos, se levanta para afrontarlos. Un lenguaje que ha creado tantos sistemas excelentes nunca "se quedará sentado y dejará que las flores se desvanezcan".
Espero que Microsoft se dé cuenta de que tiene un gran interés en C (me refiero al estándar ISO C) como puente entre él y el resto del mundo de TI y para construir grandes sistemas. Una herramienta eficaz para y. sistemas integrados, y también una poderosa herramienta para cumplir con los requisitos de alto rendimiento. Otros idiomas parecen prestar más atención a esos fluidos programas comerciales.
Competencia
¿C# obtendrá una aceptación generalizada y desplazará a otros lenguajes?
Lindholm: Normalmente, una lengua no se beneficia ni se ve excluida de otras lenguas. ¿No siguen usando Fortran esos programadores comprometidos de Fortran? Para los individuos, la elección del idioma, por supuesto, variará de vez en cuando, pero en general, los tipos de idiomas solo aumentarán gradualmente, es decir, la relación entre ellos es "contigo y conmigo" en lugar de "con tú y sin mí". La aceptación de un nuevo idioma depende a menudo de su capacidad. La tecnología Java fue rápidamente aceptada por muchas razones, incluidas las interfaces de Internet y la World Wide Web, la frustración frente a otras tecnologías y la capacidad de influir plenamente en la dirección del desarrollo de la tecnología Java. Otra razón importante es que Java es independiente del proveedor, lo que significa que puedes elegir fácilmente productos compatibles.
¿C# obtendrá una aceptación generalizada? Sujeto a disponibilidad. En general, a los programadores que son indiferentes a la independencia de la plataforma y del proveedor les puede gustar C#. Aquellos que están atados a la plataforma Microsoft seguramente querrán buscar una excelente alternativa a VB y VC. Pero los programadores que estén particularmente preocupados por las capacidades de ejecución multiplataforma de sus programas se apegarán a lenguajes como Java. Esta capacidad es fundamental para múltiples dispositivos de acceso y modelos informáticos distribuidos, y el lenguaje Java proporciona un entorno de ejecución estándar independiente del proveedor.
Stroustrup: La popularidad de C# depende casi por completo de cuánto dinero invierte Microsoft. Parece que el auge de C# definitivamente sacrificará los intereses de otros lenguajes, pero en realidad puede que no sea así. El floreciente desarrollo de Java no ha provocado el declive de C. La aplicación de C sigue creciendo de manera constante (por supuesto, ya no es un crecimiento explosivo). Quizás otras lenguas también puedan encontrar su lugar. Sin embargo, realmente no veo la necesidad de inventar un nuevo lenguaje propietario. Especialmente Microsoft, desde que nació VB, ¿por qué necesita C#?
¿Cuáles son las ventajas y desventajas de los diferentes lenguajes de programación orientada a objetos?
Stroustrup: Las ventajas de C son las mismas de principio a fin: es flexible, eficiente y no es un lenguaje propietario. Ahora, la aparición del estándar ISO C ha solidificado el último punto. Creo que la eficiencia de C es su ventaja más fundamental. Esta eficiencia proviene de su modelo informático y de datos único, que está más cerca de la máquina que Java y C#. Pero, ¿qué programas realmente anhelan este nivel de eficiencia? Esto es un problema. Creo que hay muchos de este tipo de programas. Las expectativas de la gente respecto de las computadoras siempre superarán la velocidad de desarrollo de la tecnología de hardware. Obviamente, los diseñadores de Java y C# tienen ideas diferentes. Creen que en muchos lugares las cuestiones de eficiencia son irrelevantes. Las principales deficiencias de C, atribuidas a la mala educación (por aquellos que siempre piensan en C como un lenguaje puramente orientado a objetos y por aquellos que piensan en C como una variante de C), se atribuyen a inconsistencias entre diferentes plataformas, atribuidas a incompletos. y la implementación de compiladores no estándar, y en la falta de bibliotecas a nivel de sistema independientes de la plataforma. Todos estos problemas se reducen a una cosa: la falta de un fabricante excelente que pueda satisfacer las necesidades de toda la comunidad C y que tenga el coraje de invertir mucho dinero en el desarrollo de las bibliotecas necesarias.
Lindholm: El éxito de la tecnología Java se debe a que apareció en el lugar correcto en el momento adecuado y seleccionó razonablemente el lenguaje y la plataforma informática objetivo. Java no es superior a otros lenguajes de programación orientada a objetos en todas las situaciones, pero puede resolver muy bien los nuevos problemas que surgen.
Está orientado al entorno informático de Internet, evita las oscuras estructuras de C y supera con éxito los molestos problemas del mecanismo de herencia. El mecanismo de recolección de basura mejora significativamente la productividad y reduce la complejidad. El uso de máquinas virtuales en el contexto de las redes, junto con una variedad de opciones de diseño en materia de seguridad y carga dinámica, satisface las necesidades y deseos emergentes. Estas características hacen de Java no sólo una nueva arma para los programadores existentes, sino que también crean un espacio de mercado próspero para los nuevos programadores.
Además, Java tiene una forma binaria estandarizada de la biblioteca de clases, lo que proporciona la independencia de plataforma y proveedor necesaria (pero ciertamente no suficiente). La independencia de plataforma y proveedor requiere que una tecnología tenga especificaciones claras y abandone características que obstaculizan la implementación de estándares binarios. Aunque existe un estándar ISO para C, de hecho, incluso para varias plataformas con el mismo sistema y el mismo sistema de instrucciones, no existe un estándar binario práctico que sea compatible con cada versión. Históricamente, muchos lenguajes que utilizan máquinas virtuales han sido criticados por su bajo rendimiento debido a intérpretes lentos y recolectores de basura deficientes. Las primeras implementaciones de Java fueron severamente criticadas por el mismo problema. Sin embargo, desde entonces, la industria ha invertido mucho dinero en nuevas tecnologías de implementación de máquinas virtuales y ha logrado resultados notables. Ahora, en la mayoría de los casos, el rendimiento de Java no es inferior al de los lenguajes compilados estáticamente convencionales. Esto permite a los programadores obtener independencia de plataforma y proveedor sin tener que pagar el precio del rendimiento. C no impone un enfoque orientado a objetos, por lo que escribir un buen código orientado a objetos requiere una disciplina considerable por parte del programador. Muchas empresas abandonaron C por este motivo. Como lenguaje, una de las ventajas sobresalientes de Java es que impone un enfoque orientado a objetos y no permite estructuras no orientadas a objetos. C# está entre C y Java, por lo que no es ni seguro ni complejo. Para las empresas, adoptar un nuevo lenguaje supone un coste enorme. Es difícil contratar buenos programadores (nadie está familiarizado con el nuevo lenguaje), la formación es prohibitivamente cara, la productividad y la calidad del producto disminuyen durante el proceso de aprendizaje, años de experiencia se pierden con el viento, etc.
¿Cómo supera un idioma estas barreras?
Lindholm: Tienes razón, adoptar cosas nuevas suele ser muy caro. Pero la pregunta es: ¿esta novedad ahorrará más dinero o proporcionará una gran mejora y obtendrá un rendimiento razonable? Muchas empresas han descubierto que el cambio a la tecnología Java tiene un impacto significativo tanto en el back-end del desarrollo (tiempo de comercialización más rápido, desarrollo iterativo rápido, simplicidad de mantenimiento) como en el front-end (lanzamiento multiplataforma, tecnología aplicable desde niveles bajos). -dispositivos finales hasta servidores de alta gama, seguridad). La aceptación de cosas nuevas suele estar sometida a una presión dolorosa. En gran medida, esto es exactamente lo que pasó con Java. La aparición de Java fue una reacción a las deficiencias de muchos sistemas en ese momento. La tecnología Java alivia el dolor de los desarrolladores a través de los siguientes medios: 1) Surgió teniendo en cuenta las necesidades de la informática en red. 2) Mantener el buen gusto y tener en cuenta la psicología del público a la hora de tomar decisiones sobre capacidades técnicas. 3) Utilizar tácticas moderadamente coercitivas para hacer cumplir las decisiones de diseño. Además, la tecnología Java se ha convertido en la corriente principal en la enseñanza universitaria, lo que también asegura el crecimiento continuo del equipo de desarrolladores de Java. Pero el punto más importante es que no existe otra tecnología de programación que permita a los programadores desarrollar aplicaciones en diferentes plataformas basadas en Internet como Java. El excelente desempeño de la plataforma Java a este respecto ha sido demostrado por una gran cantidad de ejemplos. Java se ha convertido en la plataforma de aplicaciones predeterminada en Internet y las API de Java también se han convertido en una plataforma natural para el desarrollo de aplicaciones de Internet.
Stroustrup: Microsoft y Sun están invirtiendo enormes sumas de dinero en Java, VB y C#, no por su conciencia, ni porque realmente crean que estos lenguajes pueden aportar mejores cosas a los programadores. La vida depende de los intereses.
Hay un dicho que dice que si los fabricantes de herramientas de software pueden asumir las tareas profesionales y técnicas de los desarrolladores de aplicaciones, obtendrán enormes beneficios económicos. Soy bastante escéptico sobre el análisis económico detrás de esto y creo que es muy poco probable que esto se convierta en realidad, especialmente cuando los desarrolladores de aplicaciones utilizan herramientas abiertas y estandarizadas que les brindan una variedad de opciones, lo que hace que la idea anterior sea aún más improbable.
¿Hace muchos años, C ya tenía capacidades genéricas (es decir, plantillas y STL), sobrecarga de operadores y tipos de enumeración? ¿Veremos estas características en futuras versiones de Java? ¿Java debería incorporar estas características? Strousturp: C ha tenido plantillas desde 1988-89. Pero dedicamos mucho tiempo a comprender cómo utilizar mejor esta herramienta. Al principio, la calidad del soporte de plantillas entre los distintos fabricantes también variaba mucho. Algunos fabricantes de compiladores han tardado en actuar. Al menos un fabricante importante de compiladores (parece referirse a Microsoft), Microsoft solo comenzó a admitir plantillas en Visual C 4.0. Antes de eso, siempre afirmaban que las plantillas eran una tecnología demasiado compleja e inútil. Hasta el día de hoy, el soporte de plantillas de Visual C se encuentra entre los peores entre los principales compiladores (Nota del traductor) alentó en secreto la infame propaganda anti-plantillas hasta que finalmente aprendieron la tecnología ellos mismos. A día de hoy, todavía es necesario mejorar la calidad del soporte de plantillas.
Creo que Java (y C#) deberían y gradualmente introducirán las características que mencionaste anteriormente. Las características y conceptos del lenguaje que son más útiles para los programadores se concentrarán gradualmente y se convertirán en la elección inevitable de los lenguajes convencionales. Dicho esto, creo que mecanismos como los destructores y la especialización de plantillas son mucho más importantes que mecanismos como las enumeraciones.
Lindholm: Una de las razones del éxito de la tecnología Java es que está muy claro lo que no se debe hacer. Necesitamos preguntarnos algunos porqués más: ¿Es esta característica esencial? ¿Qué gastos generales conllevaría aumentarlo? La sobrecarga de operadores es una característica extremadamente poderosa en C, pero también aumenta en gran medida la complejidad del lenguaje C, lo que es difícil de resistir para muchas personas. Java ha tomado decisiones acertadas entre varias posibles compensaciones y ha encontrado el equilibrio perfecto entre capacidades y necesidades. Por supuesto, Java evolucionará y, lo más importante, son los desarrolladores quienes impulsan el desarrollo. La adición de capacidades genéricas a Java es un buen ejemplo de cómo Java puede determinar el equilibrio adecuado en las compensaciones mediante la participación de toda la comunidad de desarrolladores. La "Solicitud de especificación de Java, JSR" (Solicitud de especificación de Java, JSR) sobre la adición de tipos genéricos ha ingresado al programa JCP (Proceso de la comunidad de Java) y se ha desarrollado durante mucho tiempo (consulte JSR-in /aboutJava/communityprocess/ 014). Actualmente, se están discutiendo más de 80 JSR en el JCP, lo que refleja plenamente los comentarios positivos y el alto grado de cooperación entre todo el sistema y los desarrolladores. Esto es lo que impulsa la evolución continua de la plataforma Java.
Evolución vs. Revolución (Evolución vs. Revolución)
C es un lenguaje de desarrollo, Java y C# parecen ser más lenguajes innovadores (están diseñados desde cero)? ¿Cuándo es necesario un lenguaje innovador?
Lindholm: La tecnología Java no surge de la nada, sino que se parece más al desarrollo. Todas las características de Java ya existían en al menos otro entorno antes de la introducción de la plataforma Java. La contribución de Java es hacer elecciones razonables entre las muchas características y compensaciones, haciendo que el producto sea práctico y elegante. La actitud de la tecnología Java hacia los programadores es: nutrirlos, pero no mimarlos.
Stroustrup: Técnicamente hablando, no creo que Java y C# sean lenguajes innovadores "diseñados desde cero". Si Java fuera diseñado desde cero basándose en principios técnicos, probablemente no imitaría la fea y patológica sintaxis de C/C (no se sorprenda, Stroustrup ha dicho en muchas ocasiones que C usa la forma de sintaxis de C por razones de compatibilidad). . Sexo. Él mismo prefiere la gramática de Simula - traductor). Creo que sólo cuando los problemas que enfrentan los programadores cambien fundamentalmente, o cuando descubramos una tecnología de programación nueva y extremadamente superior que no sea compatible en absoluto con los lenguajes existentes, necesitaremos un lenguaje completamente nuevo. El problema es que es posible que nunca nos encontremos con esas situaciones "fundamentales" y "nuevas". Creo que desde la aparición de la programación orientada a objetos, las únicas tecnologías de programación nuevas que pueden considerarse "fundamentales" son la programación genérica y la programación generativa. Estas dos tecnologías se derivan principalmente de C. El uso de tecnología de plantillas, algunas de las cuales alguna vez se consideraron componentes secundarios. de lenguajes funcionales y orientados a objetos, es ahora una tecnología formal, utilizable y asequible. Estoy muy entusiasmado con los resultados actuales en la programación de plantillas C. Por ejemplo, bibliotecas como POOMA, Blitz y MTL han cambiado la forma en que se realizan los cálculos numéricos en muchos lugares.
Uno de los "puntos de venta" de Java y C# es su simplicidad. ¿Java está casi perdiendo su punto de venta ahora?
Stroustrup: Los nuevos lenguajes siempre afirman lo simples que son, y hay muchas críticas sobre la complejidad de los lenguajes antiguos. De hecho, esta llamada "simplicidad" es, en pocas palabras, inmadurez. La complejidad del lenguaje aumenta gradualmente en el proceso de resolución de problemas complejos extremadamente engorrosos y especiales en el mundo real. Mientras un idioma viva lo suficiente, siempre habrá algunas áreas en las que se volverá cada vez más complejo, ya sea en el idioma mismo o en las bibliotecas y herramientas. Obviamente, C y Java no son una excepción, y creo que C# es lo mismo. Si una lengua sobrevive a su infancia, descubrirá que ha aumentado considerablemente en tamaño y complejidad.
Lindholm: Las funciones de la tecnología Java están aumentando y las cosas que hay que aprender también están aumentando. Sin embargo, una mayor funcionalidad no necesariamente conduce a una mayor complejidad. El desarrollo de la tecnología Java no ha hecho que la curva de aprendizaje sea más pronunciada, sólo ha seguido extendiéndose hacia la derecha.
Estándares
¿Cuáles son las ventajas y desventajas de los lenguajes estandarizados y los lenguajes abiertos?
Lindholm: No existen desventajas para un lenguaje estándar autorizado y obligatorio o un entorno operativo que sea abierto, no permita extensiones propietarias y no permita extensiones propietarias. Permitir extensiones propietarias permite a los proveedores aprovecharse de los clientes. Es particularmente importante estandarizar completamente toda la plataforma, no solo una parte de ella, para evitar que los fabricantes aprovechen las API patentadas de alto nivel. Los clientes exigen libertad para elegir proveedores y exigen creatividad y compatibilidad.
Stroustrup: Para un lenguaje, como C/C, la mayor ventaja de establecer un estándar formal (como el estándar ISO) es que puede evitar que un determinado fabricante manipule el lenguaje y lo utilice como su propia fuente de ingresos. La competencia de múltiples fabricantes trae consigo precios más bajos y mayor estabilidad para los usuarios. Las ventajas de los lenguajes propietarios son que son populares, baratos (pero la situación cambiará una vez que te quedes estancado) y pueden responder rápidamente a las necesidades comerciales. Una de las características de un lenguaje estandarizado es que no puede ignorar las necesidades de usuarios especiales. Por ejemplo, los requisitos de escala, confiabilidad y eficiencia de lo que estoy considerando en AT&T son completamente diferentes de los del software popular en el que se centran los fabricantes comunes. Naturalmente, esas empresas se centran sólo en las necesidades primarias.
Sin embargo, la mayoría de las grandes instituciones y empresas de vanguardia tienen necesidades especiales. El diseño de C es abierto, flexible y eficiente, capaz de satisfacer cualquier necesidad que pueda imaginar. Por eso C tiene tan poco paternalismo en comparación con otros lenguajes modernos. Por supuesto, las personas que no puedan apreciar esto criticarán a C por ser "peligroso". Los lenguajes con estándares formales y abiertos sirven principalmente a usuarios y clientes de herramientas de programación, mientras que los lenguajes con "estándares" propietarios sirven principalmente a los fabricantes.
Material de referencia: www.CSDN.NET