Ao pesquisar sobre a diferença, encontrei estas definições:
Compilar é o termo geral para pegar o código-fonte escrito em uma linguagem e transformá-lo em outra.
Transpilar é um termo específico para pegar o código-fonte escrito em uma linguagem e transformá-lo em outra linguagem que tenha um nível de abstração semelhante.
Eu entendo o que é Abstração.
Mas o que significa "nível semelhante de abstração" na definição acima? E como encontramos o nível de abstração em uma linguagem?
compiler-construction
abstraction
transpiler
Nishi Mahto
fonte
fonte
Respostas:
A definição que você citou acima é muito geral para um iniciante entender completamente, então deixe-me simplificá-la para algo que vemos na prática.
Compilador: é um termo abrangente para descrever um programa que pega o código-fonte escrito em uma linguagem e produz um (ou vários) arquivo de saída em alguma outra linguagem. Na prática, usamos esse termo principalmente para descrever um compilador como o gcc, que recebe o código C como entrada e produz um executável binário (código de máquina) como saída.
Os transpiladores também são conhecidos como compiladores fonte-a-fonte. Então, em essência, eles são um subconjunto de compiladores que pegam um arquivo de código-fonte e o convertem em outro arquivo de código-fonte em alguma outra linguagem ou em uma versão diferente da mesma linguagem. A saída é geralmente compreensível por um ser humano. Essa saída ainda precisa passar por um compilador ou interpretador para poder ser executada na máquina.
Alguns exemplos de transpiladores:
Agora, o que eles querem dizer com "nível semelhante de abstração": como eu disse que compila / transpila para um arquivo de origem, pode-se argumentar que a linguagem assembly também é um arquivo de origem e, portanto, o gcc também é um transpilador. Então, esse argumento é o que esse nível semelhante de vazios de abstração.
A noção de categorizar as linguagens em níveis inferior, médio e superior é baseada no nível de abstração que fornecem a partir do funcionamento real da máquina / arquitetura.
Linguagens de nível inferior como assembly são muito próximas da arquitetura do processador, ou seja, têm instruções diferentes para processadores diferentes. Enquanto C / C ++ / Java / JavaScript, abstraia tudo isso fornecendo mais abstração.
Portanto, um transpiler compila para uma linguagem que está mais próxima da linguagem com a qual você começou nos termos dessa abstração (ou está mais perto do nível dessa linguagem na escada de linguagem de nível inferior-médio-superior).
Espero que isto ajude!
fonte
Esta é uma forma descritiva de responder
Se você pensar em camadas de abstração como este exemplo:
Um compilador vai para um nível inferior (número inferior). Um transpiler muda de um idioma (ou versão de um idioma) para outro no mesmo número.
fonte
javac
compilador ou não.Eu concordo principalmente com tapananand resposta, mas ...
definição
As palavras são "feitas", por isso têm um propósito. E isso também muda com o tempo.
Agora tendemos a usar o transpilador para especificar um compilador que traduz o código em algum outro código "mais semelhante" ao código-fonte, o que um compilador pode fazer. E é usado para diferenciar ambos principalmente quando ambos são mencionados no mesmo contexto (mais uma vez, implicando principalmente que uma linguagem transpilar terá que ser compilada pelo menos mais uma vez)
exemplos
Então, tudo é muito subjetivo. No momento da redação deste artigo:
fazit
Portanto, o transpile é atualmente muito raramente usado, e apenas para diferenciar dois compiladores.
Provavelmente desaparecerá como conceito, já que a compilação é muito mais complicada do que isso (mesmo / superior / inferior idioma, versão, etc), e a palavra não parece ser mais útil ("transpilers" agora são onipresentes)
fonte
Ex: TypeScript (um superconjunto da Microsoft de JavaScript com verificação de segurança de tipo) transpila para código JavaScript que pode ser executado em diferentes tipos de navegadores.
https://en.wikipedia.org/wiki/Microsoft_TypeScript "Microsoft TypeScript é uma linguagem de programação de código aberto desenvolvida e mantida pela Microsoft. É um superconjunto sintático estrito de JavaScript e adiciona tipagem estática opcional à linguagem.
TypeScript é projetado para o desenvolvimento de grandes aplicativos e transcompilar para JavaScript. [5] Como TypeScript é um superconjunto de JavaScript, os programas JavaScript existentes também são programas TypeScript válidos. O TypeScript pode ser usado para desenvolver aplicativos JavaScript para execução no lado do cliente e no lado do servidor (Node.js). "
fonte