Às vezes, durante a programação em diferentes linguagens (C / C ++, C #), esse pensamento vem à minha mente:
- Cada linguagem é escrita na linguagem de programação C?
- A linguagem C é a mãe / pai de todas as línguas?
- Cada conceito ( OOP , etc.) é todo implementado em C?
Estou na direção certa?
programming-languages
c
FaizanRabbani
fonte
fonte
Respostas:
Não.
Dialetos OCaml, Haskell, Lisp, como Scheme, e várias outras linguagens são freqüentemente usados no desenvolvimento de linguagens de hobby.
Muitas linguagens são implementadas em C porque é uma linguagem onipresente, e as ferramentas de escrita do compilador, como os geradores lexer-parser (como yacc e bison), são bem compreendidas e quase onipresentes.
Mas o próprio C não pôde originalmente ser desenvolvido em C quando foi criado. Foi, de fato, originalmente desenvolvido usando a linguagem B. Idiomas anteriores (como o Fortran) eram geralmente inicializados usando uma linguagem assembly nativa ou mesmo código de máquina muito antes de C existir.
Independentemente, paradigmas de linguagem como OOP geralmente são independentes de linguagem . O paradigma funcional, por exemplo, foi desenvolvido (por Alonzo Church) como um fundamento da matemática muito antes de qualquer linguagem de programação existir. Os paradigmas processuais e de programação estruturada surgiram do trabalho matemático de teóricos como John von Neumann. A orientação a objetos foi desenvolvida por vários esforços diferentes e não relacionados , alguns fora do cálculo lambda (o paradigma funcional) e outros fora de sistemas de programação dinâmica, como o SmallTalk na Xerox PARC, por Alan Kay.
C é apenas uma pequena parte da história, décadas depois que essas idéias surgiram.
fonte
Uma linguagem é um conjunto de regras e restrições matemáticas abstratas ("se eu escrever isso , isso acontece"). Não está escrito em nada, realmente.
É especificado, geralmente em uma mistura de um subconjunto formalizado de inglês, notação matemática e talvez alguma linguagem de especificação especializada. A sintaxe é frequentemente especificada em uma variante do EBNF ou ABNF .
Por exemplo, aqui está a especificação da
for
expressão da ISO Ruby Language Specification:Aqui está um exemplo diferente das regras de conformidade de tipo do Scala:
Não não é. C é bem jovem. Existem muitos idiomas antigos. Como a viagem no tempo é fisicamente impossível, é simplesmente impossível que C tenha tido alguma influência sobre os idiomas antigos.
Tudo isso existia antes mesmo de C ser inventado. E muitos outros não têm influência de C neles, mesmo depois de existir. A família de idiomas PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Oberon ativo, Pascal componente) é uma linhagem completamente separada. Toda a família Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket etc.) também não está relacionada. Linguagens funcionais (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) e toda a família de tipo dependente (Agda, Coq, GURU, Idris) estão o mais longe possível de C. O mesmo vale para a família Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), a família de programação lógica (PLANNER, Prolog, Mercury), SQL e muitas outras.
As primeiras linguagens com conceitos de OO foram Simula (1960) e Smalltalk (1972), mas os sistemas orientados a objetos foram construídos desde 1953 (sem chamá-los assim). Novamente, muito antes de C existir, o OO não pode ter nenhuma relação com o C.
fonte
x := x + y
sintaxe em vez do familiar C-likex = x + y
. Esta crítica acontece apesar do fato de que C ainda não foi inventado ...A maior parte do núcleo de muitas línguas importantes está escrita em C, mas as coisas estão mudando:
O primeiro compilador Java desenvolvido pela Sun Microsystems foi escrito em C, mas agora as bibliotecas de classes são sempre escritas em Java (pois elas devem ser executadas usando a Java VM em si). Certas bibliotecas que usam JNI (Java Native Interface) podem ser parcialmente escritas em uma variedade de outras linguagens, pois elas devem ser usadas FORA DA JVM.
A Sun / Oracle VM é escrita em C ++. A VM BEA / Weblogic / Oracle é escrita em C. Mas há JVM gravada em Java, Lisp, SmallTalk (IBM) ...
Há muitas razões pelas quais o C foi escolhido com frequência: desempenho, portabilidade, experiência.
O último provavelmente sendo o mais importante: o Python foi iniciado em 1991, o PHP em 1994/1995, o Perl em 1988, o Ruby em 1995. Naqueles anos, o Java foi lançado e o C ++ ainda não estava bem padronizado.
Um pouco relacionado:
fonte
Não, alguns idiomas são anteriores a C. E muitos são implementados independentemente de C, por exemplo, consulte http://en.wikipedia.org/wiki/Lisp_%28programming_language%29
fonte
javac
do Oracle JDK / OpenJDK, escrito por Martin Odersky (da Scala fame) em 100% Java, o Eclipse Compiler, escrito em 100% Java (derivado do compilador Jikes da IBM ), o compilador de O J9 da IBM, também derivado de Jikes e 100% Java. AFAIK, o único compilador Java em uso um tanto generalizada de que não está escrito em Java é GCJGostaria de fazer um comentário se pudesse, mas não posso, e aqui vai:
Uma das razões pelas quais C parece tão onipresente é porque é uma das linguagens mais antigas desenvolvidas e uma enorme quantidade de linguagens modernas se baseia em sua estrutura (Java, Go, PHP, Perl etc.) - fazendo parecer que é mais lugares do que é.
Outra razão muitas vezes esquecida é que em 1973 o Unix foi reescrito em C e muitas das chamadas de sistema do Unix também estão disponíveis como programas / funções em C, tornando os dois altamente interligados. Como o Unix era uma parte poderosa do desenvolvimento da programação moderna como um todo, o C foi arrastado para a infâmia.
Dito tudo isso, a resposta para sua pergunta é "Não". C é baseado em um idioma chamado ALGOL, e havia muitos concorrentes tanto com ALGOL (FORTRAN, Lisp, COBOL) quanto C (nenhum vem à mente). A programação orientada a objetos, sem dúvida a maior mudança de paradigma no design de programação, não se originou no C - apesar do C ++ ser uma linguagem OOP muito popular (apareceu primeiro no Lisp ou no Simula 67, dependendo de quem você pergunta). Quando a OOP surgiu, o C era uma linguagem tão popular que não precisava ser a primeira - era tão popular que a "expansão" do C ++, por assim dizer, também se tornou uma das principais linguagens da OOP. Ele permanece em uso moderno principalmente por causa de seus poderosos recursos de controle de memória (você pode alocar e desalocar diretamente a memória que suas estruturas criam), permitindo criar programas com orçamentos limitados de memória (pense em videogames) e seu compilador altamente otimizado (obviamente dependendo do compilador). É certo que mesmo esses recursos estão perdendo espaço à medida que a compilação Java JIT e os gerenciadores de memória em linguagem se tornam mais avançados.
fonte
Obviamente não. Como o primeiro compilador C poderia ser escrito em C se C não existia antes? Este não é o problema da galinha e dos ovos.
Existem várias maneiras de escrever o primeiro compilador de um idioma chamado bootstrapping.
Além disso, muitos compiladores tentam se auto-hospedar ou compilar sua própria linguagem, principalmente para promover a linguagem e o próprio compilador.
fonte
Aqui está uma lista de algumas linguagens de programação que não são escritas em C, ao lado das linguagens em que são implementadas:
As melhores linguagens para implementar um compilador provavelmente estarão bem distantes do C. As linguagens funcionais oferecem coisas como esquemas de recursão e combinadores de analisador monádico (desde que você tenha classes tipográficas), o que os torna especialmente adequados para o trabalho do compilador.
Segundo, para responder à sua pergunta sobre se C é a "mãe / pai de todas as linguagens de programação" - na verdade não. C era uma linguagem bem projetada no momento em que apareceu e, sem dúvida, influenciou os designers de linguagem que depois fizeram coisas muito diferentes. Mas no final do dia, Haskell parte de C em praticamente todos os aspectos possíveis. C tem 45 anos e não é surpreendente que tenhamos aprendido a fazer melhor nesse meio tempo.
Finalmente, para responder à sua terceira pergunta, simplesmente não é o caso que C implementa "todos os conceitos". Em particular, tentar implementar alguns dos conceitos avançados da programação funcional (como metamorfismos ou, se Deus não permitir, sincrromorfismos) em C seria monstruosamente difícil. Não estou particularmente familiarizado com programação orientada a objetos, mas sei de fato que algumas linguagens orientadas a objetos têm tipos de soma.
fonte
Linguagens de programação são especificações (não software!) Geralmente escritas em algum documento em inglês (com alguma formalização, por exemplo, EBNF para a maior parte da sintaxe; às vezes, sua semântica também é parcialmente formalizada).
Por exemplo, C11 é definido pelo n1570 (que você deve ler). Algum dialeto do esquema é definido pelo R5RS (que você também deve ler, está muito bem escrito).
Linguagens de programação podem ser implementadas por alguns softwares. Às vezes, esse software é um compilador escrito na própria linguagem de programação. Leia sobre os compiladores de inicialização .
Pode-se escrever um compilador na própria linguagem de programação compilada. Se esse idioma XX for totalmente novo, você precisará executar uma etapa temporária que envolva escrever um intérprete ou compilador mínimo de um subconjunto desse idioma em alguma outra linguagem de implementação (talvez C) e, posteriormente, você poderá jogar fora esse compilador temporário ou intérprete (que não precisa ser "bom", apenas o suficiente para compilar o outro compilador). Depois de compilar seu compilador XX escrito em XX, você pode jogar fora seu compilador temporário.
Frequentemente (mas nem sempre) o sistema de tempo de execução é parcialmente escrito em C (em particular o coletor de lixo ).
Observe que o bones é um compilador de esquema e um tempo de execução totalmente escrito por si mesmo (e você pode encontrar muitos outros exemplos de implementações totalmente iniciadas).
BTW, é conveniente usar C como o idioma de destino dos compiladores .
Hoje, muitas implementações de linguagens de programação são software livre ou código aberto . Sinta-se livre para estudar (e talvez contribuir para) seu código fonte!
fonte