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

23

As 10 principais linguagens de programação, de acordo com o índice TIOBE, parecem ser fortemente influenciadas por C:

1. Java

A linguagem deriva grande parte de sua sintaxe de C e C ++, mas possui um modelo de objeto mais simples e menos recursos de baixo nível. - wikipedia.org

2. C

C é uma das linguagens de programação mais amplamente usadas de todos os tempos e existem muito poucas arquiteturas de computador para as quais não existe um compilador C. - wikipedia.org

3. C #

Durante o desenvolvimento do .NET Framework, as bibliotecas de classes foram originalmente escritas usando um sistema de compilador de código gerenciado chamado Simple Managed C (SMC). Em janeiro de 1999, Anders Hejlsberg formou uma equipe para construir um novo idioma na época chamado Cool, que significa "Linguagem Orientada a Objetos tipo C". - wikipedia.org

4. C ++

Foi desenvolvido por Bjarne Stroustrup a partir de 1979 no Bell Labs como um aprimoramento da linguagem C. - wikipedia.org

5. Objetivo-C

Objective-C é uma linguagem de programação reflexiva e orientada a objetos que adiciona mensagens no estilo Smalltalk à linguagem de programação C. - wikipedia.org

6. PHP

Ele reescreveu esses scripts como binários CGI (Common Gateway Interface) da linguagem de programação C, estendendo-os para adicionar a capacidade de trabalhar com formulários da Web e se comunicar com bancos de dados e chamou essa implementação de "Personal Home Page / Forms Interpreter" ou PHP / FI. - wikipedia.org

8. Python

O Python foi concebido no final dos anos 80 e sua implementação foi iniciada em dezembro de 1989 por Guido van Rossum na CWI na Holanda como sucessor da linguagem de programação ABC (ela própria inspirada no SETL) capaz de manipular exceções e fazer interface com o sistema operacional Amoeba. - wikipedia.org

ABC (linguagem de programação) Seus projetistas afirmam que os programas ABC têm tipicamente cerca de um quarto do tamanho dos programas Pascal ou C equivalentes e são mais legíveis. - wikipedia.org

9. Perl

O Perl empresta recursos de outras linguagens de programação, incluindo C, script de shell (sh), AWK e sed. - wikipedia.org

10. JavaScript

JavaScript usa sintaxe influenciada pela de C. - wikipedia.org

Parece que a maioria empresta sua sintaxe de C e / ou é fortemente influenciada de várias outras maneiras, pelo menos em seus inícios. Por quê?

John Isaiah Carmona
fonte
15
Ter c como sintaxe não é o mesmo que basear-se em c.
Oded
15
Além disso, o TIOBE é um índice de lixo eletrônico.
DeadMG 17/02/2012
3
Em vez disso, posso perguntar por que as linguagens de programação baseadas em C são mais populares?
precisa
3
@YannisRizos Grande salvamento da pergunta! Na verdade, é uma ótima pergunta agora.
Maple_shaft
16
Porque C é um descendente da ALGOL, e a ALGOL deve bloquear as labutas imperativas com escopo definido, o que Abraão é para cristãos, judeus e muçulmanos.
Ingo

Respostas:

40

Com o surgimento do UNIX na década de 1970, sua linguagem de programação padrão de sistemas 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 C ter influenciado quase todas as linguagens de programação que vieram depois de uma maneira ou de outra não é surpreendente, por duas razões:

  • Ao projetar uma nova linguagem, faz sentido basear sua sintaxe, sempre que possível, em uma linguagem popular existente que possa ser assumida como conhecimento comum.
  • É provável que um novo idioma seja bem-sucedido se a curva de aprendizado for superficial, e geralmente é mais fácil aprender uma sintaxe que se assemelha a um idioma já conhecido (a menos que se comporte radicalmente diferente, apesar das aparentes semelhanças). Portanto, os idiomas que emprestam sintaxe de C geralmente ganham força mais rapidamente do que os que não.

Mas outras línguas existiam, e ainda existem, algumas delas até anteriores ao C - há a família LISP (CL, Clojure e Scheme são os dialetos modernos mais populares), a família ML (com vários dialetos modernos), há todo um exército de Dialetos BÁSICOS (VB.NET e VBA são implementações modernas), há Pascal e seus parentes (Delphi é o mais conhecido) e muitas linguagens 'estranhas' que tiveram influência de muitas outras linguagens e inventaram algumas coisas; exemplos incluem Go, Python, Lua, Haskell (e seu antecessor, Miranda), Prolog e Erlang. Embora nenhuma dessas linguagens (exceto Python) esteja entre as 10 principais, muitas delas possuem uma base de usuários estável e uma comunidade ativa; eles certamente não vão embora.

Além disso, deve-se notar que a quantidade de influência C nessas linguagens difere bastante, variando entre as linguagens C ++ e Objective-C quase 100% compatíveis com C, até o Python (que abandona deliberadamente muitos dos recursos de sintaxe de C). E essa é apenas a sintaxe: em termos de semântica, a maioria dos idiomas nessa lista não tem muito em comum com C. A esmagadora maioria possui gerenciamento de memória embutido no idioma e, consequentemente, copia a semântica, a passagem de argumentos etc. , são muito diferentes. O JavaScript, por exemplo, tem fortes influências semânticas do Scheme, enquanto sua sintaxe foi projetada para se parecer com Java (que, por sua vez, baseia sua sintaxe de bits e partes em C, mas não sua semântica). Outras diferenças (com exceção de C ++ e Objective-C, que são compatíveis com versões anteriores do C) incluem tratamento de erros, regras de escopo,#include) e o fato de muitas dessas linguagens serem 'virtualizadas', ou seja, executadas em um intérprete, compilador JIT ou máquina virtual.

A propósito, o Python tem alguma influência em C, mas certamente não é "baseado em" C. A sintaxe e a semântica diferem radicalmente de C, e isso ocorre por design. O Python empresta apenas recursos do C, onde outras alternativas são igualmente "boas" (conforme o tipo "Zen do Python", import thisem um intérprete de python).

Quanto ao futuro da programação; as previsões variam. A influência do C não está desaparecendo, mas os desenvolvimentos recentes em hardware (máquinas com vários núcleos se tornando comuns, GPUs poderosas, a CPU deixando de ser o gargalo de desempenho típico, conexões de rede rápidas e confiáveis, etc.) exigem abordagens radicalmente diferentes da programação em geral. Qualquer pessoa que já tenha escrito um aplicativo distribuído multithread em uma linguagem imperativa pode dizer que é incrivelmente difícil, enquanto linguagens como Haskell possuem recursos que removem a maioria dos problemas típicos e oferecem uma abordagem mais abstrata e mais estruturada ao processamento distribuído, simultâneo e paralelo. (pureza sendo um conceito importante nesse contexto). As linguagens de programação mais recentes (por exemplo, C # ou D) já incluem muitos recursos para suportar esse idioma. Em qualquer caso,

tdammers
fonte
Boa resposta, mas "a CPU deixa de ser o gargalo de desempenho típico"? Na minha experiência, abundam os problemas de desempenho - CPU, E / S, o nome dele. Caso contrário, os criadores de perfil não seriam necessários, mesmo que não sejam muito eficazes.
9118 Mike On-line
6
@ MikeDunlavey: Geralmente, os gargalos que encontro são causados ​​por E / S, rede, desempenho do cache da CPU, taxa de transferência de barramento e comunicação (ineficiente) entre processos. Antigamente, a CPU era quase inevitavelmente o gargalo; isso simplesmente não é mais verdade.
tdammers
1

É como perguntar por que o inglês é a língua dominante nos EUA. Por que não espanhol ou francês? Eles controlavam mais o território dos EUA do que as colônias inglesas. Por que não holandês? A primeira capital dos EUA estava em uma ex-colônia holandesa. Não tenho certeza de que possa haver uma "resposta" para isso.

No entanto, a linha do tempo "Computer Languages ​​History" ( http://www.levenez.com/lang/ ) fornece todas as respostas possíveis.

S.Lott
fonte
6
Porque a Grã-Bretanha de 1600-1880 era aproximadamente a principal potência industrial e financeira do mundo, seguida pelos Estados Unidos de 1880 até o presente (<- discutível). Tornou-se o idioma 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
6
@ maple_shaft - "ninguém quer falar espanhol" ?! ... você sabe em quantos países é falado? en.wikipedia.org/wiki/Spanish_language
Rook
12
@ 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% da superfície do mundo inteiro? Esse tipo de "não é poderoso"?
23412 DeadMG
3
@DeadMG: Eu não estou falando sobre o mundo. Estou falando dos EUA nos anos 1700, onde os franceses tinham os britânicos cercados em uma pequena área ao longo da costa. Estou falando dos britânicos perdendo compromissos militares apenas neste teatro. Os franceses controlavam claramente a maior parte do que se tornou ele nos 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 existe uma resposta trivial e simples.
21812 S.Lott
4
@ S.Lott Os franceses não venceram todos os encontros. Só de olhar para a América do Norte, eles conquistaram a maioria; mas perder 4 das 5 principais batalhas de NA durante 1559/60 resultou em uma derrota esmagadora no teatro. As capturas dos fortes Ticonderoga e Niagara, as planícies de Abraão e a batalha de Restigouche foram todas vitórias britânicas. Ao interromper a oferta / reforço, este último tornou irrelevante a vitória francesa em Sainte-Foy.
Dan Neely
0

Se você criar uma nova linguagem de programação, ter uma sintaxe semelhante às linguagens existentes populares facilita o aprendizado para seus novos usuários. Especialmente se muitos conceitos forem semelhantes entre idiomas.

Também acho que a sintaxe no estilo C é relativamente fácil de ler. Para comparar com Pascal, o uso dos símbolos "{" e "}" para blocos de código é mais legível que "begin" e "end", que são opticamente muito semelhantes aos identificadores. O Python é ainda mais legível, mas incluir espaço em branco na sintaxe abre um novo conjunto de problemas com a edição. Outro exemplo: Lisp e JavaScript compartilham algumas idéias, mas quando a mesma coisa é escrita na sintaxe no estilo C, é menos obscura.

Tenho certeza de que muitas pessoas discordariam do segundo parágrafo, porque todo mundo tem seu próprio idioma favorito, mas acho que a popularidade da sintaxe no estilo C é parcialmente uma coincidência histórica, mas em parte também mostra que os autores de C fizeram algumas coisas boas. decisões.

Viliam Búr
fonte
-1

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

A influência de C vem de muitas fontes - é de baixo nível, generalizada, apoiada nos círculos Unix e Microsoft. Também é a sobrevivência da questão mais adequada - é fácil ver que a sintaxe concisa do tipo C teve mais apelo do que a sintaxe detalhada do Algol de Pascal e outros concorrentes do C nas décadas de 1970 e 1980. Por isso, foi amplamente adotado pelos idiomas que vieram depois dele.

Com o atual crescimento da importância da programação multithread e das linguagens funcionais sendo particularmente adequadas a isso, eu diria que veremos a influência deles no futuro. Caso em questão: Python, que chegou a fazer essa lista no post de perguntas.

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

scrwtp
fonte
Você entendeu errado. PASCAL e C são descendentes de ALGOL.
Ingo
É verdade, mas o próprio Algol é descendente de Fortran e escolheu algumas das construções às quais eu estava me referindo (programa, final, sub-rotina em comparação com os colchetes de c). Ainda assim, o que eu tinha em mente era de fato uma sintaxe semelhante ao Algol. Editado.
Scrwtp 17/02/12
A sintaxe semelhante a C teve mais apelo do que a sintaxe detalhada de Algcal, derivada de Algol, e de outros concorrentes de C nas décadas de 70 e 80, por isso. começar programadores são seres humanos também acabar começar a aqueles que acreditaram que é conveniente para mapear sinais de pontuação para palavras como começar-final perdeu sua batalha para chaves Fim da história
mosquito
Não vejo evidência de que a sintaxe C seja menos obscura, exceto no sentido de que a maioria dos desenvolvedores conhece C ou algum tipo de linguagem relacionada a C, e por isso parece mais familiar. AFAICT, C conquistou Pascal por causa de sua estrutura e pelo fato de as implementações não precisarem rolar seus próprios links, não a sintaxe.
David Thornley
@ David-Pelo que me lembro, uma das razões pelas quais C venceu outras línguas foi por causa da relativa facilidade de acessar a memória em C (ou seja, ponteiros). Eu sei que eles estão preocupados agora, mas quando 1 KB de RAM tinha muita memória, esse era um recurso muito poderoso da linguagem. Eu sei outras línguas fornecidas ponteiro como características, mas nenhum tão facilmente como C.
Dunk
-3

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

DeadMG
fonte
Se não estamos considerando a sintaxe, as únicas diferenças entre as linguagens são a disponibilidade de construções gerais de linguagem (loops, condicionais, variáveis, abstrações dessas classes e fechamentos, etc ...) e todas elas equivalem ao comportamento da máquina código. Todos os idiomas de baixo nível são semelhantes entre si e todos os idiomas de alto nível são extremamente semelhantes nesse momento.
Maple_shaft
2
Você não deve pensar em uma linguagem como qual funcionalidade ela possui, mas como ela comunica o comportamento do aplicativo. Seu código-fonte é o 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 o código estritamente para máquinas, estaríamos todos codificando em assembly.
Maple_shaft
1
@ maple_shaft: Muito bem! Fui convidado em uma entrevista para explicar a diferença entre linguagem de máquina (assembler) e linguagem de programação. Minha resposta foi: "A linguagem de máquina é para máquinas, a linguagem de programação é para programadores".
21312 Treb
1
@ maple_shaft: a sintaxe é irrelevante quanto à comunicação com as pessoas . Se eu substituísse uma palavra em inglês por uma ortografia diferente, o inglês continuaria sendo o mesmo idioma. A forma sintática é irrelevante, o que é comunicativo é a semântica da linguagem.
DeadMG
3
@DeadMG: Mas a questão é sobre sintaxe. Você pode considerar as semelhanças sintáticas irrelevantes, mas a pessoa que faz a pergunta quer saber por que essas semelhanças irrelevantes existem .
Nicol Bolas