Babel é um compilador ou um transpiler?

eu tenho vindo a utilizar Babel por um tempo agora, e sempre tive a impressão de que Babel foi uma transpiler para a conversão de minha ES6 e ES7 JavaScript para ES5 JavaScript, como eu estava sob a suposição de que poderia tecnicamente tratar ES5 e ES6 como duas línguas diferentes.

No entanto, não pude deixar de notar que o título do site da Babel O descreve como um compilador , que eu acredito ser algo muito diferente de um transpiler .

Babel website title - 'Babel - The compiler for writing next generation JavaScript

O Babel é um transpilador ou um compilador , ou talvez ofereça ambas as opções? Ou o título do site é simplesmente incorreto?

Disclosure: eu sei que isto parece uma pergunta muito pedante, mas eu estou escrevendo documentação relacionada com Babel, e eu quero garantir que minha descrição é precisa

Author: AdamMcquiff, 2017-05-15

3 answers

As definições de" transpiler "e" compilador " são desfocadas. Ambos traduzem UM programa de uma língua para outra, mantendo o comportamento.

Normalmente chamamos-lhe "compilador" quando produz um executável binário. No entanto, binário é apenas outra linguagem, que pode ser interpretada por uma CPU. Cada programa é "executável" na respectiva máquina.

Normalmente chamamos-lhe "compilador" quando produz uma saída de nível mais baixo do que a entrada foi, por exemplo, C para montador. Ou Java para bytecode Java. Ou ES8 para ES5. Espera ... isso é mesmo um nível diferente?

Normalmente chamamos-lhe "transpiler" quando a sua saída está num nível semelhante à entrada, por exemplo Python para JavaScript ou ao contrário. No entanto, sempre haverá partes que usam uma abstração disponível em uma língua que precisa ser "compilado" para uma implementação de nível inferior na outra língua.

Então, para responder às suas perguntas ...

Eu acredito que um compilador é algo muito diferente de um transpiler.

Não.

Babel é um transpilador ou um compilador, ou talvez oferece ambas as opções?

Sim.

Ou o título do Site 'Babel-O compilador para escrever JavaScript da próxima geração ' está simplesmente incorrecto?

Não. Esse título centra-se nas características da próxima geração, ou seja, abstrações de nível superior que realmente precisam ser compiladas em um muito diferente saida. Mesmo que a saída ainda seja comum, principalmente legível por humanos, JavaScript.

Estou a escrever documentação relacionada com Babel, e quero garantir que a minha descrição é exacta

Nesse caso, usaria a terminologia deles no site oficial. Se você quiser comparar a ferramenta com outros, Escolha sua própria descrição.
 31
Author: Bergi, 2017-05-14 21:37:39

Os Transpilers, ou Compiladores fonte-a-fonte, são ferramentas que lêem o código fonte escrito em uma linguagem de programação, e produzem o código equivalente em outra linguagem.

O Babel é tanto um transpilador como um compilador, uma vez que as palavras podem ser utilizadas indistintamente.

 1
Author: Dennis, 2017-05-14 21:37:21

Babel é um transpilador , que é um tipo especial de compilador , por isso ambos os termos são tecnicamente correctos. Você pode usar qualquer um à sua preferência.

É irrefutável que o Babel seja um compilador fonte-fonte (aka transpiler) Uma vez que as suas línguas de origem e de destino são ambos algum sabor de JavaScript:

Um compilador fonte-a-fonte, transcompilador ou transpiler é um tipo de compilador que toma o código fonte de um programa escrito em uma linguagem de programação como sua entrada e produz o código fonte equivalente em outra linguagem de programação.

No entanto, nem todos concordam que a distinção entre os Termos é útil, por isso algumas pessoas preferem simplesmente, "compilador".

Eu pessoalmente gosto da distinção porque, para mim, ela implica algo sobre a diferença no nível de abstração da máquina langauge entre as línguas fonte (entrada) e alvo (saída). Isto é, típico. "compilers" translate from higher-to-lower level languages," decompilers "translate from lower-to-higher level languages, and" transpilers " translate between languages at similar levels of abstraction.

 0
Author: maerics, 2018-01-17 05:06:18