Share to: share facebook share twitter share wa share telegram print page

Compilation à la volée

La compilation à la volée (aussi connue sous les noms de traduction dynamique, compilation juste-à-temps ou compilation JAT ; en anglais, just-in-time compilation ou JIT compilation), en programmation informatique, est une technique visant à améliorer la performance de systèmes bytecode-compilés par la traduction de bytecode en code machine natif au moment de l'exécution. La compilation à la volée se fonde sur deux anciennes idées : la compilation de bytecode et la compilation dynamique.

Description

Dans un système dit bytecode-compilé (anglicisme de bytecode-compiled), le code source est compilé à l'avance ou à la volée (lors de l'exécution) dans une représentation intermédiaire, le bytecode. C'est le cas par exemple des langages Limbo, Smalltalk, Perl, PHP, Python, Ruby, Lua, GNU Common Lisp ou encore Java, entre autres. Le bytecode n'est pas un code machine, c'est-à-dire que ce n'est pas un code optimisé pour un type d'architecture d'ordinateur en particulier. On dit du bytecode qu'il est portable entre différentes architectures. Ce bytecode est ensuite interprété ou bien exécuté par une machine virtuelle, pour dans tous les cas, exécuter le programme.

Dans un environnement de compilation à la volée, la compilation au sens classique du terme, qui produit le bytecode, n'est qu'une première étape d'un processus d'exécution plus complexe. Dans ce cas, le bytecode est déployé sur le système cible, et lorsque ce bytecode est exécuté, le compilateur du langage de programmation, à la volée, le traduit en code machine natif (ie. optimisé pour l'architecture de la machine exécutant le programme). Ceci peut être fait sur un fichier entier, ou spécifiquement sur une fonction du programme.

Le but de cette démarche est de combiner les avantages de la compilation native et du bytecode :

  • Normalement, la compilation est faite à l'avance (ahead-of-time), c'est-à-dire qu'elle est réalisée statiquement avant l'exécution du programme, ce qui a pour défaut de figer les capacités du logiciel livré. En particulier, l'analyse du code source original ou encore l'optimisation dirigée par les profils (profile-guided optimization ou PGO) sont accomplies statiquement à la compilation, en amont du déploiement et de l'exécution sur une machine spécifique, ce qui limite les possibilités d'optimisation.
  • La compilation à la volée s'adapte dynamiquement à la charge de travail courante du logiciel, en compilant le code « chaud », c'est-à-dire le code le plus utilisé à un moment donné (ce qui peut représenter tout le programme, mais souvent seules certaines parties du programme sont traitées par compilation à la volée). Obtenir du code machine optimisé se fait beaucoup plus rapidement depuis du bytecode que depuis du code source. Comme le bytecode déployé est portable, la compilation à la volée est envisageable pour tout type d'architecture, à la condition d'avoir un compilateur JIT pour cette architecture, ce qui est facilité par le fait que les compilateurs de bytecode en code machine sont plus faciles à écrire que les compilateurs code source - code natif.

Histoire

La compilation à la volée a été introduite dans le début des années 1980 par l'implémentation commerciale de Smalltalk : VisualWorks. Actuellement, elle est aussi utilisée dans LLVM, la machine virtuelle .NET de Microsoft ou la plupart des implémentations de la machine virtuelle Java.

Voir aussi

Articles connexes

Liens externes

  • GNU lightning — Une bibliothèque pour la génération dynamique de code.

Sources

Index: pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve 
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 
Kembali kehalaman sebelumnya