Por que a maioria dos programas Linux são escritos em C?


30

Por que a maioria dos programas Linux são escritos em C? Por que eles não são escritos com C ++, que é mais recente?


14
C++é mais recente C, mas isso é um pouco irrelevante. Eles são idiomas diferentes.
Mat

6
Você provavelmente deve perguntar isso no StackOverflow ou Programmers (onde o tópico já foi realmente bem abordado ).
rozcietrzewiacz

4
@ Mat Bem, não é totalmente correto, como C ++ é um superconjunto de C. Você pode programar em C e compilá-lo com um compilador C ++. Compilará e funcionará como esperado.
Polemon

8
@ Polemon: isso está incorreto, existem incompatibilidades. pt.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B
Mat

Respostas:


37

Houve muitas discussões sobre isso. Principalmente, o motivo é filosófico. C foi inventado como uma linguagem simples para o desenvolvimento do sistema (não tanto para o desenvolvimento de aplicativos). Existem muitos argumentos para usar C ++, mas há tantos para não usar C ++ e aderir a C.

No final, é uma questão histórica. A maioria das coisas de aplicativos é escrita em C, porque a maioria das coisas de Kernel é escrita em C. E como na época a maioria das coisas eram escritas em C, as pessoas tendem a usar os idiomas originais.

Nesse momento, alguém pode perguntar "OK, então por que o kernel está escrito em C e não portado para C ++?" . Isso foi discutido no kerneltrap há algum tempo. Uma boa explicação que pode ser citada neste tópico é uma resposta de yoshi314 (citando diretamente):

isso ocorre porque quase todo aplicativo c ++ precisa de uma biblioteca padrão c ++ separada para operar. então eles teriam que portá-lo para o kernel e esperar uma sobrecarga extra em todos os lugares.

c ++ é uma linguagem mais complexa e isso significa que o compilador cria código mais complexo a partir dele. por isso, descobrir que um problema decorre de um erro do compilador, em vez de um erro de código é mais fácil em c.

também a linguagem c é mais básica e é mais fácil seguir sua representação de montagem, o que geralmente é fácil de prever.

O c ++ é mais versátil, mas o c é mais adequado para coisas de baixo nível ou incorporadas.


Por outro lado, "a maioria dos programas Linux" é bastante enganadora. Dê uma olhada nas aplicações gráficas. O Python está ganhando cada vez mais espaço, especialmente em ambientes de GUI no Linux. Sobre a mesma coisa que está acontecendo com o Windows e .NET.


3
Além disso, o C possui ABI estável e pode ser facilmente conectado a outras línguas por meio de seu FFI nativo, enquanto o C ++ não possui ABI legível por humanos e o g ++ teve alterações no ABI. Portanto, as bibliotecas tendem a ser escritas em C e não em C ++. Como você deseja ter um idioma no projeto, os programas foram empacotados com a biblioteca. (Pelo menos essa foi uma história com o Gnome).
Maciej Piechotka 30/10/11

@MaciejPiechotka Tudo isso é verdade, e é uma boa discussão, mas c não possui uma ABI definida , exceto que geralmente existe uma maneira "óbvia" de trabalhar as coisas em cada plataforma. Depois disso, siga o líder.
dmckee

@dmckee: Eu não afirmei que ele padronizou, mas a API C em cada plataforma segue certas regras simples (incluindo nenhuma ou mínima manipulação) que raramente mudam - o que a torna útil para a finalidade, mesmo que não seja 100% correta.
Maciej Piechotka 1/11/11

2
Atualmente, você também pode considerar que ... * tudo o que você pode fazer em C, você também pode fazer em C ++ da mesma maneira, pense também em "C externo" ... * o compilador não criará um código mais complexo se você não escreve código mais complexo ... * você pode escrever o mesmo material de barebone em C ++ ... * você pode vincular e usar bibliotecas C ++ de C. No final, é uma questão histórica.
Zrin

7

Depois de ler o seguinte email de Linus Torvalds, o criador do linux. Não consigo deixar de pensar que a resposta acima está incorreta. Ele parece pensar que os programadores de C ++ não são bons programadores de sistemas . E que os recursos extras em C ++ geralmente causam mais problemas a longo prazo, em comparação com os benefícios que trazem a curto prazo. Embora alguém possa discordar dele, é difícil exagerar a influência que ele teve no sistema operacional linux.

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


Porra, isso era prejudicial
AFP_555 17/10
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.