Por que várias linguagens de programação populares são influenciadas por C? [fechado]

Comentários

  • Ter a sintaxe c like não é o mesmo que ser baseado em c.
  • Além disso, TIOBE é um índice lixo.
  • Em vez disso, posso perguntar por que as linguagens de programação baseadas em C são mais populares?
  • Porque C é um descendente de ALGOL e ALGOL tem escopo de bloco laboratórios imperativos que Ab raham é para cristãos, judeus e muçulmanos.
  • Suas citações sobre PHP e Python não ' realmente dizem que ' é influenciado por C – e, embora PHP seja, Python não ' t parece ser.

Resposta

Com o surgimento do UNIX na década de 1970, sua linguagem de programação de sistemas padrão C rapidamente se tornou a língua franca do mundo da programação. Por um bom tempo, C foi praticamente obrigatório para todos os programadores. Como tal, o fato de que C influenciou quase todas as linguagens de programação que vieram depois dele de uma forma ou de outra não é surpreendente, por duas razões:

  • Ao projetar uma nova linguagem, faz sentido basear sua sintaxe, onde possível, em uma linguagem existente popular que pode ser considerada de conhecimento comum.
  • Uma nova linguagem tem mais chances de sucesso se a curva de aprendizado for superficial e uma sintaxe que se assemelhe a uma linguagem já conhecida geralmente é mais fácil de aprender (a menos que se comporte radicalmente diferente, apesar das semelhanças aparentes). Portanto, as linguagens que pegam emprestado a sintaxe do C geralmente ganham força mais rapidamente do que aquelas que não o fazem.

Mas outras linguagens existiam, e ainda existem, algumas delas até mesmo anteriores ao C – há a família LISP (CL, Clojure e Scheme sendo os dialetos modernos mais populares), a família ML (com vários dialetos modernos), há “todo um exército de dialetos BASIC (VB.NET e VBA são implementações modernas), há Pascal e seus parentes (Delphi sendo o mais conhecido) e muitas línguas “estranhas” que tiveram influências de muitas outras línguas e inventaram algumas coisas elas mesmas; exemplos incluem Go, Python, Lua, Haskell (e seu predecessor, Miranda), Prolog e Erlang. Embora nenhuma dessas linguagens (exceto Python) esteja entre as dez principais, muitas delas têm uma base de usuários estável e uma comunidade ativa; eles certamente não vão desaparecer.

Além disso, deve-se notar que a quantidade de influência do C nessas linguagens difere enormemente, variando de linguagens quase 100% compatíveis com C C ++ e Objective-C, até Python (que abandona deliberadamente muitos dos recursos de sintaxe do C). E essa é apenas a sintaxe: em termos de semântica, a maioria das linguagens nessa lista não tem muito em comum com C. A grande maioria tem gerenciamento de memória embutido na linguagem e, consequentemente, semântica de cópia, passagem de argumento, etc., são muito diferentes. JavaScript, por exemplo, tem fortes influências semânticas de Scheme, enquanto sua sintaxe foi projetada para se parecer com Java (que, por sua vez, baseia sua sintaxe de bits e peças em C, mas não em sua semântica). Outras diferenças (com exceção de C ++ e Objective-C, que são em sua maioria retrocompatíveis com C) incluem tratamento de erros, regras de escopo, bibliotecas padrão, inclusão de código externo (#include), e o fato de que muitas dessas linguagens são “virtualizadas”, ou seja, rodam em um interpretador, compilador JIT ou máquina virtual.

Python, a propósito, tem alguma influência C, mas certamente não é “baseado em” C. A sintaxe e a semântica diferem radicalmente de C, e isso ocorre por design. Python apenas empresta recursos de C onde outras alternativas são igualmente “boas” (de acordo com o “Zen de Python” – digite import this em um interpretador python).

Quanto ao futuro da programação; as previsões variam. A influência de C não está desaparecendo, mas desenvolvimentos recentes em hardware (máquinas multi-core se tornando comuns, GPU “s poderosas, a CPU deixando de ser o típico gargalo de desempenho, conexões de rede confiáveis e rápidas, etc.) exigem abordagens radicalmente diferentes à programação em geral.Qualquer pessoa que já escreveu um aplicativo distribuído multithread em uma linguagem imperativa pode dizer que é incrivelmente difícil, enquanto linguagens como Haskell têm recursos que removem a maioria dos problemas típicos e oferecem uma abordagem mais abstrata e estruturada para distribuído, simultâneo processamento paralelo (pureza é um conceito importante neste contexto). Linguagens de programação mais recentes (por exemplo, C # ou D) já incluem muitos recursos para oferecer suporte a esse idioma. Em qualquer caso, nem o forte impacto que C teve na programação, nem a existência de as linguagens não semelhantes a C vão desaparecer.

Comentários

  • Boa resposta, mas " CPU deixando de ser o gargalo de desempenho típico "? Na minha experiência, os problemas de desempenho são abundantes – CPU, IO, o que você quiser. Do contrário, os criadores de perfil não seriam necessários, embora não sejam muito eficaz.
  • @MikeDunlavey: Normalmente, os gargalos que encontro são causados por E / S, n rede, desempenho de cache de CPU, taxa de transferência de barramento e comunicação entre processos (ineficiente). Antigamente, a CPU era quase inevitavelmente o gargalo; isso simplesmente não ' não é mais verdade.

Resposta

Isso é muito parecido com perguntar por que o inglês é a língua dominante nos Estados Unidos. Por que não espanhol ou francês? Eles controlavam mais do território dos EUA do que as colônias inglesas. Por que não holandês? A primeira capital dos EUA foi em uma ex-colônia holandesa. Não tenho certeza se pode haver uma “resposta” para isso.

No entanto, a linha do tempo “Histórico das linguagens de computador” ( http://www.levenez.com/lang/ ) fornece todas as respostas possíveis.

Comentários

  • Porque a Grã-Bretanha desde 1600 -1880 foi aproximadamente a principal potência industrial e financeira do mundo, seguida pelos Estados Unidos desde 1880 até o presente (< –debatível). Tornou-se a linguagem dos negócios internacionais e é falado fluentemente por mais de 2 bilhões de pessoas em todo o mundo. Isso e ninguém quer falar espanhol ou holandês 🙂
  • @maple_shaft – " ninguém quer falar espanhol "?! … você sabe em quantos países ele é falado? en.wikipedia.org/wiki/Spanish_language
  • @ S.Lott: Você quer dizer a parte em que o Império Britânico foi o maior império que já existiu e ocupou 25% do território nacional ire world ' superfície? Esse tipo de " não poderoso "?
  • @DeadMG: I ' não estou falando sobre o mundo. Eu ' estou falando sobre os EUA nos 1700 ' s onde os franceses fizeram com que os britânicos se confinassem em uma pequena área ao longo da costa. Eu ' estou falando sobre os britânicos perderem combates militares apenas neste teatro. Os franceses controlavam claramente a maior parte do que se tornou os EUA. Ainda. Os EUA acabaram falando inglês. Não é francês. A mesma análise se aplica a C. É ' uma história complexa com muitos fatores de influência. Não há ' nenhuma resposta simples e trivial.
  • @ S.Lott Os franceses não ' ganharam todos encontro. Apenas olhando para a América do Norte, eles ganharam a maioria; mas perder 4 das 5 principais batalhas em NA durante 1559/60 resultou em uma derrota esmagadora no teatro. As capturas dos Fortes Ticonderoga e Niagara, The Plains of Abraham e a batalha de Restigouche foram todas vitórias britânicas. Ao cortar o fornecimento / reforço, o último tornou a vitória francesa em Sainte-Foy irrelevante.

Resposta

Se você faz uma nova linguagem de programação, tendo uma sintaxe semelhante às linguagens existentes populares torna o aprendizado mais fácil para seus novos usuários. Especialmente se muitos conceitos são semelhantes entre as linguagens.

Também acho que a sintaxe do estilo C é relativamente fácil de ler. Para comparar com Pascal, usar os símbolos “{” e “}” para blocos de código é mais legível do que “começar” e “fim”, que são opticamente muito semelhantes aos identificadores. Python é ainda mais legível, mas incluir espaços em branco na sintaxe abre um novo conjunto de problemas de edição. Outro exemplo: Lisp e JavaScript compartilham algumas ideias, mas quando a mesma coisa é escrita na sintaxe do estilo C, é menos obscura.

Tenho certeza de que muitas pessoas discordariam do segundo parágrafo, porque todos tem sua própria linguagem favorita, mas acho que a popularidade da sintaxe de estilo C é parcialmente uma coincidência histórica, mas parcialmente também mostra que os autores de C tomaram algumas boas decisões.

Resposta

As linguagens de programação evoluem ao longo do tempo como as linguagens naturais, com algumas linguagens mais antigas influenciando essa evolução de maneira mais forte do que outras , enquanto outros desaparecem na obscuridade e sua influência é mais difícil de rastrear no nível superficial, ou seja, sintaxe.

A influência de C vem de muitas fontes – é de baixo nível, generalizada, teve apoio em círculos Unix e Microsoft. É também a sobrevivência da questão mais adequada – é fácil ver que a sintaxe concisa como o C tinha mais apelo do que a sintaxe derivada de Algol prolixa de Pascal e outros concorrentes do C nas décadas de 1970 e 1980. Por isso, foi amplamente adotado pelas linguagens que vieram depois dele.

Com o crescimento atual da importância da programação multithread e das linguagens funcionais sendo particularmente adequadas a ela, eu diria que veremos sua influência crescer em o futuro. Caso em questão: Python, que até fez essa lista na postagem da pergunta.

Uma bela visão da linha do tempo da história da linguagem para refletir sobre

Comentários

  • Você entendeu errado. Ambos PASCAL e C são descendentes de ALGOL.
  • Verdadeiro, mas o próprio Algol é descendente de Fortran e escolheu algumas das construções que eu estava me referindo lá (programa, fim, sub-rotina em comparação com c ' s colchetes). Ainda assim, o que eu tinha em mente era, na verdade, uma sintaxe semelhante a Algol. Editado.
  • a sintaxe concisa do tipo C tinha mais apelo do que a sintaxe derivada de Algol detalhada de Pascal e outros concorrentes de C nos 70 ' se 80 ' s +1 para isso. Os programadores begin são humanos também end begin aqueles que acreditaram que isso ' s conveniente mapear sinais de pontuação para palavras como início e fim perderam sua batalha para as chaves fim da história
  • Não vejo nenhuma evidência que a sintaxe C é menos obscura, exceto no sentido de que a maioria dos desenvolvedores conhece C ou algum tipo de linguagem relacionada a C e, portanto, parece mais familiar. AFAICT, C conquistou Pascal por causa de sua estrutura, e pelo fato de que as implementações não ' precisaram lançar seus próprios links, não a sintaxe.
  • @ David- Pelo que me lembro, uma das razões pelas quais C venceu outras linguagens foi a relativa facilidade de acesso à memória em C (ou seja, ponteiros). Eu sei que eles estão confusos agora, mas na época em que 1 KB de RAM era muita memória, esse era um recurso muito poderoso da linguagem. Eu sei que outras linguagens fornecem recursos como ponteiros, mas nenhum tão facilmente quanto C.

Resposta

A maioria dos as linguagens que você lista não têm praticamente nada a ver com o C, além de semelhanças sintáticas irrelevantes. Os únicos dois derivados C reais são Objective-C e C ++.

Comentários

  • Se não estivermos considerando a sintaxe, então as únicas diferenças entre as linguagens são a disponibilidade de construções gerais de linguagem (loops, condicionais, variáveis, abstrações desses como classes e encerramentos, etc …) e que todos eles equivalem ao comportamento do código de máquina. Todas as linguagens de baixo nível são semelhantes entre si e todas as linguagens de alto nível são extremamente semelhantes entre si nesse ponto.
  • Você não deve ' t pensar em um linguagem como a funcionalidade que possui, mas como ela comunica o comportamento do aplicativo. Seu código-fonte é seu nível mais baixo de documentação e um escreve código-fonte para pessoas e NÃO para máquinas . Se escrevêssemos código estritamente para máquinas, estaríamos todos codificando em assembly.
  • @maple_shaft: Isso mesmo! Fui convidado em uma entrevista para explicar a diferença entre linguagem de máquina (assembler) e linguagem de programação. Minha resposta foi: " Linguagem de máquina é para máquinas, linguagem de programação é para programadores. "
  • @maple_shaft: A sintaxe é irrelevante quanto à comunicação ' com pessoas . Se eu substituísse uma palavra em inglês por uma grafia diferente, o inglês ainda seria o mesmo idioma. A forma sintática é irrelevante, o que ' s comunicativo é a semântica da linguagem.
  • @DeadMG: Mas a questão é sobre sintaxe. Você pode considerar as semelhanças sintáticas irrelevantes, mas a pessoa que fez a pergunta deseja saber por que essas semelhanças irrelevantes existem .

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *