Costumo ouvir o termo que a linguagem A é escrita na linguagem B. Por exemplo, PHP foi escrito C , C # é escrito em C ++ .
Alguém pode explicar o que isso significa e se está correto? Isso tem algo a ver com o compilador de intérpretes usado pelo idioma?
Além disso, quais são os fatores sobre os quais se baseia a escolha da linguagem de implementação?
s/written/implemented/
e é muito mais claro.Respostas:
A maioria das linguagens de programação se enquadra em duas categorias: linguagens interpretadas e compiladas.
Um idioma compilado é traduzido por um compilador em código de máquina , o idioma que a CPU executa diretamente passo a passo. Uma linguagem interpretada, por outro lado, usa um intermediário, um intérprete , para executar o código da linguagem. O intérprete é outro programa, geralmente ele próprio compilado no código da máquina.
PHP é uma linguagem interpretada. Você precisa de um programa separado para executar o código PHP, o computador não executa o programa diretamente. Esse programa separado, o interpretador PHP, é ele próprio escrito em C.
C # é uma linguagem compilada, mas não é compilada no código de máquina. Em vez disso, ele é compilado em um idioma especializado, código de bytes, para ser executado em uma máquina virtual. Java é outro exemplo dessa configuração. Você pode vê-lo como um híbrido entre compilação e interpretação, onde a máquina virtual é um intérprete. A máquina virtual para C # (a CLI ou Common Language Infrastructure ) é gravada em C ++.
Outros exemplos são:
fonte
Você está basicamente certo. Se for dito que Ruby é escrito em C, isso significa que o interpretador de linguagem e partes da biblioteca principal são escritos em C.
Portanto, o intérprete Ruby é um programa em C que recebe um arquivo de texto como entrada, processa-o e depois chama funções que estão em outro arquivo de texto (se escrito em Ruby) ou que são compiladas em código C, além da funcionalidade básica necessária acessar diretamente os recursos do sistema, como memória, sistema de arquivos e muito mais. E algumas funções que exigem desempenho muito alto.
Portanto, você tem diferentes partes de um idioma que podem ou precisam ser escritas em outros idiomas. Nada o impediria de escrever o intérprete em C e as bibliotecas em C ++ (embora talvez dificulte algumas coisas). Você pode até ter várias etapas e usar uma linguagem muito boa no processamento de texto para gerar alguns dados intermediários que são processados por algum código C.
Os fatores para a decisão podem ser exatamente os mesmos que para outras aplicações complexas. O desempenho é um. A capacidade de escrever código que pode acessar os recursos do sistema diretamente em outro. Portanto, na maioria dos casos, deve ser uma linguagem compilada (embora, em teoria, você possa escrever um intérprete Ruby em Python). A disponibilidade em diferentes sistemas é importante se você deseja que seu idioma seja executado no Linux, Win, OS X e outros.
fonte
Significa simplesmente que a maior parte do núcleo da linguagem A está escrita na linguagem B. O "núcleo da linguagem A" pode diferir de idioma para idioma, mas, em termos gerais, você acha certo, significa compilador ou intérprete. O fator decisivo para escolher um idioma para escrever outro idioma é, como em quase todos os projetos, em quais idiomas os desenvolvedores estão mais familiarizados.
Dito isto, "a linguagem A está escrita na linguagem B" é uma simplificação excessiva para a maioria das línguas modernas. Se tomarmos o Python como exemplo, enquanto a implementação de referência, CPython , foi realmente escrita em C, existem implementações escritas em outras linguagens, como Jython (escrita em Java), IronPython (escrita em C #), PyPy ( escrita em Python), CLPython (escrito em Common Lisp), Stackless Python (escrito em C e Python) e Unladen Swallow (escrito em C ++).
Uma linguagem de programação é uma definição e, como mostra o exemplo do Python, não há realmente restrições sobre quais idiomas seu compilador, intérprete e bibliotecas podem ser escritos. E, é claro, também é possível que uma linguagem seja escrita em si mesma, através de um processo chamado bootstrapping .
fonte
string.lower(s)
é uma função python que delega isso parareturn s.lower()
, isso está correto. As operações de caso 3.3 cordas CPython são implementados em C.Da perspectiva de usar uma linguagem de programação, uma linguagem de programação é apenas um programa. Pode ser um compilador, ou um intérprete, ou pode ser algum tipo de máquina virtual. Todas essas coisas são apenas programas de computador e, portanto, podem ser escritas em qualquer idioma.
Portanto, se você deseja criar sua própria versão do PHP, pode começar com qualquer idioma com mais fluência. Você escreveria um programa que pode ler código no formato PHP e fazer o que a especificação do PHP diz que seu programa deve fazer . Você está criando a linguagem PHP na linguagem X.
fonte
explode
que pegaString
e retorna aArray
, sua implementação (ou seja, o código que operará na cadeia de caracteres para produzir a matriz) é escrita em C , certo?Um fraseado muito semelhante com significado completamente diferente é "escrevendo a linguagem A na linguagem B", por exemplo, "escrevendo C em Java".
Isso descreve o código sintaticamente correto em um idioma, mas usa estruturas, expressões idiomáticas e convenções de outro idioma. No exemplo "escrevendo C em Java", os sinais disso seriam declarar todas as variáveis locais em cima de cada método, usando constantes inteiras em vez de enumerações, identificadores_com_underscores etc.
Normalmente, isso acontece quando alguém trabalha com um idioma há muito tempo (especialmente quando trabalha apenas com esse idioma) e é muito novo no idioma atual (ou não está interessado em escrever código limpo).
fonte
A tecnologia é um processo inerentemente iterativo. Começamos com ferramentas simples e depois as usamos para criar melhores. As primeiras linguagens assembly eram praticamente traduções 1: 1 dos códigos de instruções padronizados para o chip; a arquitetura 8086 e seu assembler tornaram-se dominantes sobre outras arquiteturas como Z80, RISC, etc. Por isso, começamos a desenvolver linguagens que poderiam ser digeridas no assembly 8086, como FORTRAN, COBOL, Pascal e C. O programa que interpreta o código fonte de essas linguagens precisam ser escritas em algo mais primitivo; caso contrário, você acaba com um argumento de galinha e ovo; se o código-fonte do primeiro compilador C foi escrito em C, o que compilou esse código-fonte C e, por definição, não seria o primeiro compilador C?
Basicamente, "C # é escrito em C ++" deve significar que a primeira e / ou mais popular compiladora e bibliotecas de tempo de execução / núcleo que obedecem às especificações da linguagem C # (aquelas que são o Microsoft .NET Framework da Microsoft e o compilador de linha de comando programa CSC.exe) são escritos em C ++.
fonte
"O idioma A está escrito no idioma B" significa que a única implementação do idioma A (ou a única amplamente utilizada) é aquela que é realmente um projeto desenvolvido no idioma B e o único completo e atualizado A especificação de A é o código-fonte B que o implementa, de modo que, se a documentação e o programa B discordam, o programa B geralmente é considerado correto.
fonte