O que é um compilador em lote?

28

Tenho a seguinte citação do curso do meu compilador (no contexto de coloração de gráficos):

Por ser lenta, a coloração do gráfico tende a ser usada nos compiladores em lote, enquanto a varredura linear tende a ser usada nos compiladores JIT.

Não consegui encontrar uma definição clara on-line. Então, o que faz um compilador ser um compilador em lote?

Rodrigo
fonte
Essa questão está fora de tópico aqui. softwareengineering.stackexchange.com é um lugar melhor para perguntar
Basile Starynkevitch

Respostas:

42

Um compilador JIT (Just-In-Time) compila código em tempo de execução, ou seja, enquanto o programa está sendo executado. Portanto, o custo da compilação faz parte do tempo de execução do programa e, portanto, deve ser minimizado.

O oposto disso é um compilador antecipado (AOT), que é basicamente sinônimo de "compilador de lote". Isso converte o código fonte em código de máquina e, em seguida, apenas o código de máquina é distribuído. Portanto, o compilador pode ser muito lento, pois não afeta o tempo de execução do programa resultante.

Atualmente, quando as pessoas dizem "compilador", normalmente significam um compilador AOT. De fato, o termo "compilador AOT" só começou a se popularizar recentemente, quando as pessoas começaram a criar compiladores AOT para linguagens compiladas JIT, principalmente JavaScript. Muitas dessas linguagens, por exemplo, C #, compilam em uma linguagem intermediária para uma VM que é então compilada pelo JIT no código da máquina em tempo de execução. O termo "compilador AOT" tem a conotação de que o código-fonte será compilado diretamente no código da máquina, portanto, nenhuma forma de compilação JIT é necessária em tempo de execução.

"Compilador de lotes" é um termo um pouco arcaico neste momento. O contraste real com um compilador em lote quando o termo era popular era um compilador incremental . A compilação incremental é frequentemente associada a linguagens como Lisp, nas quais você teve um REPL e pode solicitar interativamente a implementação da linguagem para compilar uma função específica. Se uma função fosse executada cuja compilação não havia sido solicitada anteriormente, ela normalmente seria interpretada. Um compilador de lote, por outro lado, compilou todas as funções de uma só vez, ou seja, em um lote.

Derek Elkins
fonte
11
E de volta nos velhos tempos compliers onde não funcionam de forma interativa em tudo o que tinha para enviar uma tarefa para uma fila de lote, a fim de compilar seu programa
Neuromancer
E algumas implementações de linguagem (awk, cpython e assim por diante) do GNU compilam toda a entrada para uma representação interna como a primeira etapa no tempo de execução, que combina algumas das propriedades descritas aqui.
dmckee
11
@dmckee maioria, se não todas as implementações de linguagem, na verdade
user253751
Outra ambigüidade: Ferramentas chamados compiladores lote existia para sistemas operacionais MS-DOS, esses arquivos em lote compilados em arquivos executáveis ....
rackandboneman
Claro que sempre há uma representação interna. Mas, às vezes, é um idioma por si só, como no Gcc, Llvm ou .Net. Isso ocorre devido à arquitetura front-end / meio / back-end, o front-end transformando a linguagem (C, C ++, Java, fortran ..) em uma linguagem comum de nível inferior e, em seguida, os algoritmos de otimização são executados e finalmente, esse código otimizado na linguagem comum é transformado pelo backend em bytecode ou assembler, executável, estático ou dinâmico.
reuniza
11

O significado está implícito na citação que você fornece! Ele decorre do processamento em lote do termo de computação usado quando a tarefa não é executada em tempo real, mas é agendado para execução posterior pelo sistema operacional quando a carga (geralmente para atividades em tempo real) é menor.

Um compilador em lote é aquele que faz a compilação quando um usuário não está aguardando o resultado da compilação. É o que diríamos, usando uma terminologia mais moderna, feita em segundo plano.

Este é o inverso de um JIT (Just-In-Time) que é feito "ao vivo" no momento exato em que é necessário, sem o luxo de gastar o tempo extra para fazer o processamento mais minuciosamente.

A velocidade mais lenta da compilação em lote pode ser ilustrada por:

insira a descrição da imagem aqui

Fonte: https://xkcd.com/303/

Ou até isso:

insira a descrição da imagem aqui

Fonte: http://dilbert.com/strip/2013-06-22

Brian Tompsett - 汤 莱恩
fonte