¿Por qué la mayoría de los programas de Linux están escritos en C?


30

¿Por qué la mayoría de los programas de Linux están escritos en C? ¿Por qué no están escritos con C ++, que es más nuevo?


14
C++es más nuevo que C, pero eso es un poco irrelevante. Son idiomas diferentes.
Mat

66
Probablemente debería preguntar esto en StackOverflow o Programmers (donde el tema ya se ha cubierto muy bien ).
rozcietrzewiacz

44
@ Mat Bueno, no es del todo correcto, ya que C ++ es un superconjunto de C. Puede programar en C y compilarlo con un compilador de C ++. Se compilará y funcionará como se espera.
polemon

8
@polemon: eso es incorrecto, hay incompatibilidades. en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Respuestas:


37

Ha habido muchas discusiones sobre esto. Principalmente, la razón es filosófica. C fue inventado como un lenguaje simple para el desarrollo del sistema (no tanto desarrollo de aplicaciones). Hay muchos argumentos para usar C ++, pero hay tantos para no usar C ++ y apegarse a C.

Al final, es un problema histórico. La mayoría de las cosas de la aplicación están escritas en C, porque la mayoría de las cosas del Kernel están escritas en C. Y desde entonces la mayoría de las cosas fueron escritas en C, las personas tienden a usar los lenguajes originales.

En este punto, alguien podría preguntar "OK, entonces, ¿por qué el núcleo está escrito en C y no está portado a C ++?" . Esto ha sido discutido en kerneltrap hace algún tiempo. Una buena explicación que se puede citar de este hilo es una respuesta de yoshi314 (citando directamente):

Esto se debe a que casi todas las aplicaciones de C ++ necesitan una biblioteca estándar de C ++ separada para funcionar. por lo que tendrían que portarlo al kernel y esperar una sobrecarga adicional en todas partes.

c ++ es un lenguaje más complejo y eso significa que el compilador crea un código más complejo a partir de él. por eso, encontrar que un problema se debe a un error del compilador, en lugar de un error de código, es más fácil en c.

También el lenguaje c es más básico, y es más fácil seguir su representación de ensamblaje, que a menudo es fácil de predecir.

c ++ es más versátil, pero c es más adecuado para cosas de bajo nivel o incrustadas.


Por otro lado, "la mayoría de los programas de Linux" es bastante engañoso. Echa un vistazo a las aplicaciones gráficas. Python está obteniendo cada vez más terreno, especialmente en entornos GUI en Linux. Casi lo mismo que está sucediendo con Windows y .NET.


3
Además, el C tiene ABI estable y se puede conectar fácilmente a otros idiomas a través de su FFI nativo, mientras que C ++ no tiene ABI legible por humanos y g ++ tuvo cambios en el ABI. Por lo tanto, las bibliotecas tienden a escribirse en C en lugar de C ++. Debido a que desea tener un idioma en el proyecto, también lo hicieron los programas incluidos en la biblioteca. (Al menos esa fue una historia con Gnome).
Maciej Piechotka

@MaciejPiechotka Todo esto es cierto, y es una buena discusión, pero c no tiene un ABI definido , excepto que a menudo hay una forma "obvia" de trabajar en cada plataforma. Después de eso, sigue al líder.
dmckee 01 de

@dmckee: No he declarado que se haya estandarizado, pero la API de C en cada plataforma sigue ciertas reglas simples (incluida la falta de manipulación o mínima) que rara vez cambia, lo que lo hace útil para el propósito incluso si no es 100% correcto.
Maciej Piechotka

2
Hoy en día, también puede considerar que ... * todo lo que puede hacer en C también lo puede hacer en C ++ de la misma manera, piense también en "C externo" ... * el compilador no hará un código más complejo si no escribe código más complejo ... * puede escribir el mismo material básico en C ++ ... * puede vincular y usar bibliotecas C ++ desde C. Al final, es un problema bastante histórico.
Zrin

7

Después de leer el siguiente correo electrónico de Linus Torvalds, el creador de Linux. No puedo evitar pensar que la respuesta anterior es incorrecta. Parece pensar que los programadores de C ++ no son buenos programadores de sistemas . Y que las características adicionales en C ++ a menudo causan más problemas a largo plazo en comparación con los beneficios que aportan a corto plazo. Si bien uno puede estar en desacuerdo con él, es difícil exagerar la influencia que ha tenido en el sistema operativo Linux.

http://harmful.cat-v.org/software/c++/linus


Maldición, eso fue dañino
AFP_555
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.