Por que não surgiu uma linguagem mais rápida e “melhor” do que C? [fechadas]

144

Com todos os novos idiomas "modernos" lançados hoje, como é que C ainda é considerado o mais rápido e "mais próximo da máquina"? Eu realmente não acredito em nunca haver apenas uma maneira correta de fazer as coisas, e C já existe há muito tempo (desde os anos 60!). Nós realmente não inventamos nada melhor do que algo escrito há quase 50 anos?

Estou ciente de que as linguagens modernas são de nível superior e cuidam de certas tarefas como coleta de lixo e alocação de memória e utilizam bibliotecas e coisas do tipo. Eu só estou perguntando por que nunca houve uma segunda opção verdadeira para C.

Será que C é tão perfeito que nenhuma outra maneira de operar um computador poderia ser possível (adoção de desenvolvedor à parte)?

EDITAR Olha, eu não estou tentando bater C ou qualquer que seja sua língua favorita. Eu estou querendo saber porque C se tornou o padrão e porque outras alternativas nunca surgiram e C foi apenas "aceito".

    
por Jason 08.12.2009 / 07:14
fonte

6 respostas

163

C é uma linguagem muito simples, e é por isso que, junto com sua longevidade, é rápido e otimizado. Também é extraordinariamente suportado, em preocupações com ambientes incorporados, microprocessadores, etc.

É difícil superar uma linguagem muito simples e rápida. A única coisa que melhora uma linguagem como essa é a usabilidade: diminua o tempo que leva para criar um código genérico semelhante e torne mais fácil modelar com abstrações.

É aí que entra o C ++. O C ++ pode ser tão rápido quanto o C. O problema é que o C ++ é uma linguagem muito mais complexa, o que significa que definitivamente aumenta a produtividade; desde que as pessoas saibam como usá-lo. C ++ e C não são quase a mesma linguagem.

Agora, D foi outro passo em frente. Mesma capacidade de código rápido, coleta de lixo opcional, etc., mas nunca pegou. Espero que isso mude, porque ele cai o que aflige o C ++: compatibilidade com versões anteriores do C.

Então, para responder à sua pergunta, "melhor" é algo difícil de julgar. Em termos de simplicidade e velocidade, o C é provavelmente o melhor que podemos fazer. Em termos de produtividade versus simplicidade, o C ++ é provavelmente o melhor que podemos fazer, embora essa opinião varie muito mais. Por fim, em termos de uma linguagem aprimorada e limpa, com a velocidade e a simplicidade de C, D ganha esse contexto.

    
por 08.12.2009 / 07:21
fonte
63

Existem mais rápido que os idiomas C.

Existem linguagens mais rápidas que C. Por exemplo, Fortran como já mencionado está indo muito bem porque tem muito mais regras de linguagem de aliasing restritas.

Há também assembly experimental como linguagens que atacam o C na frente, onde ele é usado como uma linguagem de alto nível, por exemplo, a criação de compiladores. Já ouviu falar sobre C-- ou Janus? Mas esses dois foram mortos pelo projeto LLVM.

Eu apostaria que o APL ou outras linguagens matemáticas irão liberar o C da água em domínios de aplicações especiais, já que eles construíram em suporte para unidades de processamento do Vetor. Isso é algo que não é possível para C (e galera: NÃO! As bibliotecas otimizadas especiais com ligação C não têm nada a ver com C como uma linguagem).

Os produtores de CPU também removeram todo o material ajudando os criadores de compiladores em outras linguagens - lembre-se dos códigos montadores aritméticos marcados para tornar rápida a implementação do LISP no SPARC? Ido com o vento.

E se você sair dos micro benchmarks para o desenvolvimento de aplicativos, haverá linguagens mais rápidas para o desenvolvimento de aplicativos. Meu exemplo pessoal aqui é sempre SmartEiffel. Ele tem como alvo C, mas está usando otimização global do sistema, o que torna mais rápido que C no desenvolvimento de aplicativos do mundo real.

Neste domínio, mesmo uma simples abstração errada ou de baixo nível pode matar todo o desempenho da linguagem. Como C não oferece abstrações altas, a maioria das pessoas diz que é um problema de programação, mas não é. Por exemplo, olhe para a falta de genéricos. Em C, você terá implementações lentas, como a função de biblioteca "qsort", que pode ser gravada com uma magnitude mais rápida com genéricos (onde a chamada de função para comparações de chaves é eliminada).

Basta comparar uma chamada de qsort em uma matriz de ints de megabytes com uma boa implementação escrita à mão que esteja usando o acesso à matriz e a incorporação de < ' operador.

    
por 08.12.2009 / 08:50
fonte
35

Boa pergunta. Eu acho que as linguagens conseguem encontrar um nicho. É importante notar que há muitas linguagens mais novas que são melhores que C em seus nichos.

  • O C já foi amplamente usado como uma linguagem de aplicativo e, nesse domínio, perdeu terreno para C ++, Java e, recentemente, todos os tipos de outras linguagens (principalmente as linguagens dinâmicas).

  • C costumava ser um idioma para escrever código do servidor. A Web empurrou uma incrível variedade de linguagens para esse espaço - Perl, Java, Python, VBScript, VB.NET, Ruby, C # - e casos em que C faz algum tipo de sentido para o código do servidor são poucos e distantes entre si. / p>

  • O C tem sido usado para computação científica, mas enfrenta concorrência de idiomas específicos do domínio, como Matlab e Mathematica, bem como bibliotecas como SciPy . Muitas pessoas que escrevem código neste nicho não são codificadores por comércio e C não é uma boa opção para eles.

Mas o nicho de C é o código do sistema. Kernels do sistema operacional. Drivers Bibliotecas de tempo de execução. É tão estabelecido nesse espaço que até mesmo o C ++ o está deslocando lentamente.

C ganhou de volta nos anos 70 por causa do UNIX, porque os idiomas concorrentes eram muito restritivos ou muito lentos, e porque o código C era considerado razoavelmente portátil (mentira, mesmo assim). Mas suas maiores vantagens hoje não estão relacionadas e derivam principalmente de décadas de domínio de seu nicho. Existem boas ferramentas para C: otimização de compiladores, depuradores de kernel, análise estática eficaz para encontrar erros no código do driver, etc. Quase todas as principais plataformas definem uma ABI e, frequentemente, é a lingua franca das bibliotecas. Há um grupo de programadores que sabe codificar C - e quem sabe quais são os problemas e as armadilhas de C.

A longo prazo, esse nicho não está desaparecendo; e C tem alguns problemas. Mas ainda seria extremamente difícil para qualquer recém-chegado competir.

    
por 08.12.2009 / 09:13
fonte
24

Parafraseando um comentário muito bom: Não há muitas maneiras diferentes de tornar um idioma rápido e "próximo à máquina" - C o fez bem e quase não há espaço para melhorar .

Resposta original:

Rápido para executar ou rápido para escrever coisas em?

As línguas não são rápidas ou lentas para executar implementações específicas. Um idioma só pode ser considerado mais rápido do que outros quando de alguma forma torna mais fácil ter implementações rápidas . Invariavelmente, isso significa "perto da máquina". Mas com as máquinas ficando mais rápidas exponencialmente, isso se tornou progressivamente menos interessante ao longo do tempo. Em vez disso, a facilidade e a velocidade de desenvolvimento e portabilidade tornaram-se muito mais importantes, por isso "melhor" passou a significar "longe da máquina" . Praticamente todos os esforços em design de linguagem foram nessa direção nas últimas 5 décadas.

Então você está: mais próximo da máquina e dos idiomas mais rápidos que o C; eles são aqueles que vieram antes de C : Assembler, Fortran. Provavelmente alguns esquecidos.

    
por 08.12.2009 / 08:15
fonte
21

O Fortran é mais rápido que o C para tarefas numéricas devido à forma como ele lida com referências de memória (os indicadores C são mais difíceis de otimizar). As bibliotecas numéricas pesadas na base de coisas como Matlab e Numpy ainda são escritas em Fortran.

Por outro lado, o C ++ pode ser tão rápido quanto o C, mas possui muitos recursos de programação mais avançados. É uma linguagem muito mais nova, a partir dos meados dos anos 80.

    
por 08.12.2009 / 07:17
fonte
16

Que diabos, eu vou falar com meus $ 0,02.

Em muitos casos, há uma diferença real ou percebida entre linguagens de "sistemas" e linguagens de nível superior. Ignorarei a maioria das linguagens de "nível superior", pois ninguém (pelo menos não muitos) argumentará que, para muitas tarefas, linguagens como Python, Ruby etc. são mais simples de se trabalhar.

O

C foi projetado para ser uma linguagem de sistemas, o que significa que foi projetado como a linguagem na qual o sistema operacional Unix foi escrito. Como tal, foi projetado para ser simples, poderoso e rápido. Uma linguagem simples ganha poder por meio dos que os programadores não-sistemas geralmente consideram perigosos: ponteiros, gerenciamento manual de memória, etc. Como já foi mencionado, C é bem simples. O K & R é de longe o menor livro da minha prateleira de programação (sem contar o O'Reilly Pocket References) e é apenas marginalmente "maior" que o Ruby Pocket Reference. C é bem poderoso. Se você precisar conversar com o hardware, verifique e gere manualmente a memória, etc. C tem a capacidade.

Da perspectiva de um programador, no entanto, C não é tão simples. A velocidade e o poder vêm com o preço do gerenciamento de memória manual e não com muito suporte de OOP embutido no idioma. C ++ (não minha linguagem favorita) é muito mais simples do ponto de vista de um programador, mas muito menos simples do ponto de vista de um compilador. Objetivo-C (possivelmente minha linguagem favorita) tem a mesma desvantagem, com ligeira inclinação na direção de manter a linguagem simples (coleta de lixo é um recém-chegado ao Objective-C, por exemplo). Mas, como o mundo da computação, como muitos de nós sabem, foi escrito em C, é difícil que linguagens mais novas, mais complicadas, mas "mais fáceis", ganhem ampla adoção.

Em alguns casos, especialmente quando o "padrão" atual é tão "bom o suficiente" quanto C, simplesmente não há muito incentivo para algo "melhor" (C ++, Objetivo-C, D etc.) ganhar tração , quando há incentivo ainda suficiente para criar algo "melhor".

    
por 08.12.2009 / 10:29
fonte

Tags