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?
Respostas:
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.
fonte
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:
Fonte: https://xkcd.com/303/
Ou até isso:
Fonte: http://dilbert.com/strip/2013-06-22
fonte