J'ai la citation suivante du cours de mon compilateur (dans le contexte de la coloration des graphiques):
Parce qu'il est lent, la coloration des graphiques a tendance à être utilisée dans les compilateurs par lots, tandis que le balayage linéaire a tendance à être utilisé dans les compilateurs JIT.
Je n'ai pas pu trouver de définition claire en ligne. Alors, qu'est-ce qui fait qu'un compilateur est un compilateur par lots?
Réponses:
Un compilateur JIT (Just-In-Time) compile le code au moment de l'exécution, c'est-à-dire pendant l'exécution du programme. Par conséquent, le coût de la compilation fait partie du temps d'exécution du programme et doit donc être minimisé.
Le contraire est un compilateur à l'avance (AOT) qui est essentiellement synonyme de "compilateur par lots". Cela convertit le code source en code machine, puis seul le code machine est distribué. Par conséquent, le compilateur peut être très lent car il n'a pas d'impact sur le temps d'exécution du programme résultant.
De nos jours, quand les gens disent «compilateur», ils désignent généralement un compilateur AOT. En effet, le terme "compilateur AOT" n'a vraiment commencé à devenir populaire que récemment lorsque les gens ont commencé à créer des compilateurs AOT pour les langages compilés JIT, en particulier JavaScript. Beaucoup de ces langages, par exemple C #, se compilent en un langage intermédiaire pour une VM qui est ensuite compilé JIT pour coder la machine au moment de l'exécution. Le terme "compilateur AOT" a la connotation que le code source sera compilé directement en code machine, donc aucune forme de compilation JIT n'est requise au moment de l'exécution.
"Compilateur par lots" est un peu un terme archaïque à ce stade. Le vrai contraste avec un compilateur par lots lorsque le terme était populaire était un compilateur incrémentiel . La compilation incrémentielle est souvent associée à des langages comme Lisp où vous disposiez d'un REPL et vous pouvez demander interactivement l'implémentation du langage pour compiler une fonction spécifique. Si une fonction était exécutée dont la compilation n'avait pas été demandée auparavant, elle serait généralement interprétée. Un compilateur par lots, en revanche, a compilé toutes les fonctions à la fois, c'est-à-dire dans un lot.
la source
Le sens est impliqué dans la citation que vous donnez! Il découle du terme informatique traitement par lots qui est utilisé lorsque la tâche n'est pas effectuée en temps réel, mais il est prévu pour une exécution ultérieure par le système d'exploitation lorsque la charge (souvent pour les activités en temps réel) est moindre.
Un compilateur par lots est celui qui effectue la compilation lorsqu'un utilisateur n'attend pas le résultat de la compilation. C'est celle que nous dirions, en utilisant une terminologie plus moderne, faite en arrière-plan.
C'est l'inverse d'un JIT (Just-In-Time) qui se fait "en direct" au moment exact où il est nécessaire sans avoir le luxe de passer le temps supplémentaire pour effectuer le traitement de manière plus approfondie.
La vitesse plus lente de la compilation par lots peut être illustrée par ceci:
Source: https://xkcd.com/303/
Ou même ceci:
Source: http://dilbert.com/strip/2013-06-22
la source