Processeurs de langages – quelques liens pertinents
Ce qui suit est un survol informel. Pour aller plus loin, il se donne d'excellents cours et il existe d'excellents livres (dont certains en ligne, comme celui-ci et celui-ci).
La plupart des sections sont incomplètes pour des raisons de manque de temps...
Assembleurs
à venir...
Assembleur pour débutants : http://forum.dev-hq.net/showthread.php?318-ASM-From-Scratch!-%28An-ASM-tutorial-for-Beginners%29
En 2015, Wilson Minesco exprime l'opinion que
comprendre un langage d'assemblage sera toujours quelque chose de pertinent :
http://wilsonminesco.com/AssyDefense/
Exemples :
Assembleur pour programmeurs C, texte de
2009 : http://myw3b.net/blog/index.php/2009/10/assembly-for-c-programmers-1/
Livres de programmation en langage d'assemblage :
Il faut que la « guerre des langages » (des Instruction Sets) se termine : http://www.agner.org/optimize/blog/read.php?i=25
Ressource d'ordre général pour les langages d'assemblage : http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/index.html
Langage d'assemblage, famille PowerPC :
Langage d'assemblage, famille x86 :
- http://penberg.blogspot.com/2010/04/short-introduction-to-x86-instruction.html
-
http://www.cs.virginia.edu/~evans/cs216/guides/x86.html
- http://en.wikipedia.org/wiki/X86_instruction_listings
-
http://ref.x86asm.net/index.html
- Quelques étrangetés de ce modèle : http://code.google.com/p/corkami/wiki/x86oddities
- Sorte de « tableau périodique » de ces instructions :
http://net.cs.uni-bonn.de/fileadmin/user_upload/plohmann/x86_opcode_structure_and_instruction_overview.pdf
- http://lwn.net/SubscriberLink/456731/4707de0d96d955a9/
- Introduction à l'assembleur x86 pour
processeurs 64 bits, par Ian Seyler en
2012 : http://ianseyler.github.com/easy_x86-64/
- Livre décrivant l'assembleur x86, par Paul A.
Carter en 2006 :
http://vidcat.org/papers/x86-pc-assembly-programming-book-for-beginner.html
- Écrire un peu de code x86 et
x64, par Nick Desaulniers en 2014 :
http://nickdesaulniers.github.io/blog/2014/04/18/lets-write-some-x86-64/
- Comprendre la taille des instructions sur cette plateforme, un texte de
William Swanson en 2003 :
http://www.swansontec.com/sintel.html
- En 2015, Robert Graham se dit d'avis que
x86 est, au fond, un langage de haut niveau :
http://blog.erratasec.com/2015/03/x86-is-high-level-language.html#.VRaxmeFmfnN
- Désassemblage de x86 à
C :
http://en.wikibooks.org/wiki/X86_Disassembly
- Pourquoi certaines fonctions bouclent-elles sur une étiquette nommée
lop: plutôt que loop:?
Raymond Chen donne une explication dans ce texte de
2015 :
http://blogs.msdn.com/b/oldnewthing/archive/2015/04/16/10607806.aspx
- Comprendre le code d'assemblage x86-x64, par
Eli Bendersky en 2011 :
http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64/
- Référence de ce langage d'assemblage :
http://pdos.csail.mit.edu/6.828/2005/readings/i386/toc.htm
- Truc absolument pervers : il est possible d'écrire des programmes
x86 sans utiliser d'autres instructions que celles destinées à la
gestion des erreurs :
- Analyse de la sécurité du microcode de l'assembleur
x86, par Daming D. Chen et Gail-Joon Ahn en 2014 :
https://www.dcddcc.com/pubs/paper_microcode.pdf
- Le préfixe REP, pour répéter une instruction
autant de fois que la valeur contenue dans ECX, un
texte exploratoire de 2016 :
http://xlogicx.net/?p=493
- Introduction qui semble bien faite aux fondements de la programmation en
assembleur x86, par Nayuki en
2016 :
https://www.nayuki.io/page/a-fundamental-introduction-to-x86-assembly-programming
Langage d'assemblage, famille ARM :
Optimisation pour le Pentium 4 : http://software.intel.com/en-us/articles/intel-pentiumr-4-processor-optimization-reference-manual/
Un langage d'assemblage avec collecte automatique d'ordures : ftp://ftp.research.microsoft.com/pub/tr/TR-2006-169.pdf
De l'assembleur en ligne avec gcc :
Comment le code C est traduit en langage d'assemblage :
http://www.avabodh.com/cin/introduction.html
De l'assemblage intégré (Inline Assembly) pour le langage
D, un texte de Walter
Bright : http://drdobbs.com/blogs/tools/231002363
Guide pas à pas pour de l'assembleur sous Linux :
http://www.cin.ufpe.br/~if817/arquivos/asmtut/index.html#intro
L'évolution d'un langage d'assemblage, à travers les années
et les processeurs : http://blog.julien-oster.de/2011/10/assembly-evolution-part-1-accessing.html
Langage d'assemblage pour ceux qui écrivent des compilateurs :
http://www.cse.nd.edu/~dthain/courses/cse40243/fall2008/ia32-intro.html
Exemple concret de fusion de deux vecteurs, par Anita Cosmin en
2012 : http://en.nerdaholyc.com/memory-snipping-a-simple-example-in-assembly-codemerging-two-vectors/
Les instructions « machines »
de certains langages intermédiaires :
Déposer 0 dans un registre de manière efficace,
texte de Bruce Dawson en 2012 :
http://randomascii.wordpress.com/2012/12/29/the-surprising-subtleties-of-zeroing-a-register/
Langage d'assemblage et cas d'utilisation sous
Linux, texte de
2013 :
https://wiki.linaro.org/LEG/Engineering/OPTIM/Assembly
La prochaine génération d'instructions pour puces Intel, le
AVX-512, selon Agner Fog en 2013 :
http://agner.org/optimize/blog/read.php?i=288
Simulateur en-ligne d'assembleur 8 bits :
http://schweigi.github.io/assembler-simulator/
Programmer avec des 1 et des
0, ou comment faire le lien entre un langage d'assemblage et du code
machine, texte de 2015 :
http://www.hanshq.net/ones-and-zeros.html
Assembleur 64 bits :
Quelques assembleurs connus
Le Netwide Assembler, ou NASM : http://www.nasm.us/
JWASM, un dérivé du Watcom Assembler, ou WASM :
Introduction à l'assembleur MIPS, par Bradley Kjell en
2007 :
http://chortle.ccsu.edu/AssemblyTutorial/index.html
Désassembleurs
Texte à venir...
Un wiki sur le sujet :
http://en.wikipedia.org/wiki/Disassembler
Compilateurs
Un compilateur est en quelque sorte un traducteur, qui :
- Consomme des données d'un flux (typiquement du texte)
- Analyse ces données sur le plan lexical (par analogie : vérifie l'orthographe), syntaxique (par analogie : la grammaire) et sémantique (par analogie : le sens des énoncés), puis
- génère des erreurs ou des avertissements si le programme est incorrect ou semble suspect; et
- génère des données dans un autre format sur un autre flux. Typiquement, la sortie de la compilation sera compréhensible par un ordinateur (du code machine), alors que l'entrée de la compilation sera compréhensible par un humain (des instructions rédigées dans un langage de programmation donné – il y en a quelques exemples ci-dessus).
En prenant l'exemple d'un programme simple, dans le cycle de développement associé aux langages compilés, lorsqu'une programmeuse ou un programmeur rédigera un programme, elle ou il :
- Traduira sa pensée en un texte dans un langage de programmation qu'il ou elle aura choisi;
- Compilera ce programme;
- Corrigera les erreurs ou les avertissements que la compilation aura relevées, s'il y en a;
- Exécutera le programme résultant pour le tester; et
- S'il y a lieu (ce qui sera souvent le cas) retournera au texte du programme pour l'adapter en fonction des résultats des tests, et poursuivra dans le cycle jusqu'à satisfaction.
Le fruit de la compilation n'est pas nécessairement un programme. Il peut s'agir d'une bibliothèque, qui sera intégrée ultérieurement (de manière statique, dès l'édition des liens, ou de manière dynamique, lors de l'exécution du programme) aux programmes qui en auront besoin.
Quelques liens pertinents :
- Comment fonctionnent les compilateurs et les processeurs de langages, selon
Stephen Ferg en 2011 : http://www.ferg.org/parsing/index.html
- Comparatif des processus de compilation de C++,
Java et des
langages
.NET, par Kosta Hristov en 2013 :
http://www.developingthefuture.net/compilation-process-and-jit-compiler/
- Des compilateurs gratuits pour APL : http://www.thefreecountry.com/compilers/apl.shtml
- Des compilateurs et des interpréteurs
gratuits pour C et C++ :
http://www.thefreecountry.com/compilers/cpp.shtml
- Des compilateurs d'IBM pour C et C++ :
http://www-01.ibm.com/software/awdtools/xlcpp/
- Des compilateurs C++ de Comeau Computing :
http://www.comeaucomputing.com/
- Un outil pour analyser les options de compilation à partir de la
sélection naturelle : http://www.coyotegulch.com/products/acovea/index.html
- Le Tiny C Compiler, TCC : http://bellard.org/tcc/
- Quelques implémentations de compilateurs Haskell :
http://haskell.org/haskellwiki/Implementations
- À propos du GNU
Compiler Collection, gcc :
- À propos de Clang, ensemble de compilateurs pour
LLVM :
- À propos du Glasgow
Haskell Compiler, ou GHC :
- Vérification formelle d'un Front-End de compilateur C :
http://pauillac.inria.fr/~xleroy/publi/cfront.pdf
- Intel est les compilateurs pour les ordinateurs multi-coeurs : http://arstechnica.com/hardware/news/2007/06/intel-updates-compilers-for-multicore-era.ars
- Une implémentation complète d'un compilateur Pascal :
http://homepages.cwi.nl/~steven/pascal/
- Un compilateur C++ multiplateforme et juste
à temps : https://developer.mozilla.org/En/Nanojit
- Écrire votre propre compilateur avec Flex,
Bison et LLVM :
http://gnuu.org/2009/09/18/writing-your-own-toy-compiler/all/1/
- Écrire un compilateur, par Jack Crenshaw :
http://compilers.iecc.com/crenshaw/
- Truc un peu fou : un compilateur Brainfuck
écrit en Brainfuck :
- Écrire un compilateur en Ruby, étape
par étape : http://www.hokstad.com/compiler
- Les pêchés mortels des rédacteurs de compilateurs :
http://gcc.gnu.org/wiki/DeadlySins
- Structurer un compilateur en plusieurs petites étapes disjointes :
http://www.cs.indiana.edu/~dyb/pubs/nano-jfp.pdf
- Approche incrémentale à la construction d'un compilateur :
http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf
- Quelques bases de construction de compilateurs : http://www.cs.man.ac.uk/~pjj/farrell/compmain.html
- Le texte Compiler Construction de Niklaus
Wirth, dans une version de 2005 : http://www-old.oberon.ethz.ch/WirthPubl/CBEAll.pdf
- Le texte Project Oberon : The Design
of an Operating System and Compiler, de Niklaus
Wirth : http://www-old.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf
- Le texte Implementing functional languages: a tutorial de Simon
Peyton Jones et David Lester : http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/
- Construisons un compilateur : http://compilers.iecc.com/crenshaw/
(ou, en PDF, http://www.stack.nl/~marcov/compiler.pdf)
- Ce que produisent divers compilateurs face à une variable non-initialisée :
http://jakegoulding.posterous.com/uninitialized-variable-warnings-and-compiler-0
- Comment le code C est traduit en
langage d'assemblage :
http://www.avabodh.com/cin/introduction.html
- En 2012, Carl Friedrich Bolz décrit l'évaluation
partielle et le traçage : http://morepypy.blogspot.com/2012/01/comparing-partial-evaluation-and.html
- Réflexion de James Hague, en 2012, à
l'effet que les optimisations que réalise un compilateur devraient
être appliquées sur le compilateur lui-même, ce qui nous
ferait peut-être pencher un peu plus souvent pour la simplicité
et la rapidité de compilation : http://prog21.dadgum.com/136.html
- Atteindre cet objectif si lointain qu'est celui d'avoir un compilateur tel
que le code sera à la fois petit (à l'écriture) et rapide,
une réflexion de Jim Rankin en 2012 :
http://jimbokun.github.com/programming%20languages/2012/09/23/small-and-fast/index.html
- Que fait un compilateur, et comment peut-on travailler avec le code qu'il
aura généré? Un texte de Kosta Hristov en 2013 :
http://www.developingthefuture.net/disassembling-decompiling-and-modifying-executables/
- Écrire un compilateur en
Go :
- Écrire un compilateur JavaScript générant du code efficace, une série
d'articles par John Dalziel en 2013 :
- Écrire un compilateur pour un langage « jouet » en
Lua, par Ross Andrews en
2015 :
- En 2013,
Walter Bright explique comment il est
parvenu à accélérer les temps de compilation de son
compilateur D :
http://www.drdobbs.com/cpp/increasing-compiler-speed-by-over-75/240158941
- Série d'articles par Jack Crenshaw sur l'écriture de compilateurs :
http://compilers.iecc.com/crenshaw/
- Écrire un compilateur? Joignez-vous au club! Texte de Tristan McNab en
2013 :
http://tech.pro/blog/1733/join-the-compiler-creation-club
- À propos des opérations intrinsèques :
- Écrire un compilateur à l'aide du langage qu'il compilera, est-ce sage?
Une opinion de Laurence Tratt en 2012 :
http://tratt.net/laurie/blog/entries/the_bootstrapped_compiler_and_the_damage_done
- Écrire son propre compilateur, une série d'articles par
Kenny Kerr en
2014 :
- Texte de 2014 qui nous rappelle que le
compilateur a (pratiquement) toujours raison :
https://blog.mozilla.org/nfroyd/2014/05/09/the-compiler-is-always-right/
- Plusieurs compilateurs
C pour
Windows :
http://www.comp-psyche.com/2014/03/best-c-compiler-for-windows.html
- TurboFan, compilateur optimisant pour JavaScript :
http://ariya.ofilabs.com/2014/08/javascript-and-v8-turbofan.html
- « Compiler comme en 1992 », un texte
expliquant comment il est possible de compiler les sources de programmes de
cette époque, par Fabien Sanglard en 2014 :
http://fabiensanglard.net/Compile_Like_Its_1992/
- Écrire un petit compilateur
C, par Wilfre
Hughes en 2014 :
http://www.wilfred.me.uk/blog/2014/08/27/baby-steps-to-a-c-compiler/
- Le projet CompCert est un compilateur
C optimisant,
formellement vérifié :
http://www.absint.com/compcert/
- La gestion des types par un compilateur, selon Edaqa Mortoray en
2014 :
- Ensemble de ressources pour qui souhaite écrire un compilateur à titre
d'amateur : http://c9x.me/compile/bib/
Métacompilateurs :
Compilateurs vers une machine
virtuelle :
Comparatifs :
Pour ce qui est des étapes d'analyse lexicale et d'analyse sémantique, plus particulièrement :
Compilateurs et parallélisme :
Compilateurs juste à temps (JIT)
à venir...
Une discussion : les compilateurs juste à temps capables de traçage
ont-ils gagné? http://lambda-the-ultimate.org/node/3851#comment
Le compilateur juste à temps HotpathVM, visant la compilation de code
Java pour plateformes à faibles ressources, par Andreas Gal, Christian
W. Probst et Michael Franz en 2006 : http://static.usenix.org/events/vee06/full_papers/p144-gal.pdf
Les compilateurs juste à temps peuvent-ils mener à du code qui
serait à la hauteur des compilateurs Ahead of Time?
Texte de Kannan Vijayan en 2012 sur la
difficulté de réaliser certaines optimisations sur la base d'a priori dans un
compilateur juste à temps destiné au code
JavaScript :
https://blog.mozilla.org/javascript/2012/10/15/the-ins-and-outs-of-invalidation/
À propos du Baseline Compiler de Mozilla pour
JavaScript, texte de Kannan Vijayan en
2013 :
https://blog.mozilla.org/javascript/2013/04/05/the-baseline-compiler-has-landed/
Introduction à la rédaction de compilateurs JIT :
Un petit compilateur JIT, et pourquoi il est
sage de garder ces programmes « petits », par Josh Haberman en
2012 :
http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits.html
Optimiser le code pour profiter au
maximum d'un compilateur JIT pour
JavaScript, le point de vue d'Alon Zakai en
2013 :
http://mozakai.blogspot.ca/2013/08/outlining-workaround-for-jits-and-big.html
Écrire un compilateur JIT :
En 2014, Nelson Elhage relate ce qu'il a appris
en écrivant un JIT à l'aide de
Go :
http://nelhagedebugsshit.tumblr.com/post/84342207533/things-i-learned-writing-a-jit-in-go
Comment les
compilateurs JIT influencent nos pratiques de
débogage, réflexion de Shu-yu Guo en
2014 :
http://rfrn.org/~shu/2014/05/14/debugging-in-the-time-of-jits.html
Le projet Roslyn, un compilateur
C# juste à temps
qui se présente comme un service :
En 2012, Josh Haberman parle des joies des
compilateurs JIT simples, avec exemples qui
fonctionnent :
http://blog.reverberate.org/2012/12/hello-jit-world-joy-of-simple-jits.html
FTL, un compilateur JIT
pour WebKit,
basé sur LLVM :
http://blog.llvm.org/2014/07/ftl-webkits-llvm-based-jit.html
Utiliser g++ comme
compilateur
JIT, texte de 2015 :
http://developerblog.redhat.com/2015/04/07/jit-compilation-using-gcc-5-2/
LLVM
Le projet LLVM est un ensemble d'outils à
code ouvert permettant de générer des compilateurs de qualité.
Très contemporain, gagnant de plusieurs prix, ce projet dont l'architecte
principal est Chris
Lattner est entre autres soutenu par Google et Apple. Sa partie la plus
visible est Clang, un compilateur C++ ayant
la réputation de produire d'excellents diagnostics.
Quelques liens :
- Site officiel : http://www.llvm.org/
- Blogue officiel : http://blog.llvm.org/
- Un Wiki sur le sujet : http://en.wikipedia.org/wiki/LLVM
- Guide destiné aux programmeuses et aux programmeurs :
http://llvm.org/docs/ProgrammersManual.html
- Ce qu'est LLVM, texte de Serdar Yegulalp en 2018 :
https://www.infoworld.com/article/3247799/development-tools/what-is-llvm-the-power-behind-swift-rust-clang-and-more.html
- Le projet a gagné, en 2010, un prix des
plus appréciables : http://www.acm.org/press-room/news-releases/2010/sigplan-software-award/
- Texte de Mike Ash en 2009 sur les bases de la
génération de code avec LLVM :
http://www.mikeash.com/pyblog/friday-qa-2009-04-17-code-generation-with-llvm-part-1-basics.html
- Utiliser LLVM comme un compilateur
juste à temps :
- Compiler Haskell à travers
LLVM, texte de Don Stewart en 2010 :
http://donsbot.wordpress.com/2010/03/01/evolving-faster-haskell-programs-now-with-llvm/
- Compiler Scala à travers
LLVM, par Geoffrey Reedy en 2011 :
https://days2011.scala-lang.org/sites/days2011/files/ws3-2-scalallvm.pdf
- Depuis 2010, Clang++ est capable de compiler
Boost, rien de moins : http://blog.llvm.org/2010/05/clang-builds-boost.html
- Depuis 2012, LLVM est
en mesure de compiler du code pour les GPU :
http://www.hpcwire.com/hpcwire/2012-05-09/open_source_compiler_adds_support_for_nvidia_gpus.html
- Compilateur
brainfuck pour LLVM, par Jeremy Roman en
2012 :
http://www.jeremyroman.com/2012/12/11/building-a-brainfuck-compiler-with-llvm
- Intégrer Webkit et LLVM pour ajouter des strates d'optimisation à un
fureteur, par Filip Plizo en
2014 :
https://www.webkit.org/blog/3362/introducing-the-webkit-ftl-jit/
- Comment Swift
utilise LLVM pour générer du code machine de
qualité, par John Siracusa en 2014 :
http://arstechnica.com/apple/2014/10/os-x-10-10/22/
- Compiler C#
avec LLVM, par Mukul Sabharwal en
2015 : http://www.llvmsharp.org/
L'architecture de LLVM :
La plateforme LLVM a eu des répercussions
dans plusieurs domaines d'applications :
Comparatifs :
DSL (Domain Specific Language)
Langages conçus pour mieux régler une catégorie particulière
de problème, plutôt que pour faciliter la programmation de manière
générale. Quand le langage est intégré à un autre langage, comme un peut le
faire parfois avec un métalangage riche comme celui des
templates avec
C++, on
parlera d'un EDSL, le « E »
signifiant Embedded.
Idées et opinions :
Quelques exemples :
- Un langage axé vers le traitement de fichiers binaires : http://cprg-research.blogspot.com/2010/02/domain_specific_language-for-binary.html
- Résoudre un problème en définissant un DSL interne à C++ : http://cpp-next.com/archive/2010/09/expressive-c-playing-with-syntax/
- Des DSL dans divers langages, en particulier
CoffeeScript : http://amix.dk/blog/post/19614
- Développer un DSL...
- En 2012, Jeffrey Kegler propose une façon
de simplifier la production de DSL : http://jeffreykegler.github.com/Ocean-of-Awareness-blog/individual/2012/dsl.html
- Le langage Joy, pour décrire des automates, selon Daniel Beskin en
2014 :
http://ncreep.github.io/language_perils/blog/2014-03-20-domain-specific-joy.html
- En 2014,
Gilad
Bracha parle des avantages à avoir un DSL dans
un langage de programmation plus généraliste :
http://gbracha.blogspot.ca/2014/11/a-dsl-with-view.html
- Le langage AVISynth, pour programmer des effets de post-production vidéo
(merci à Nicolas Grazidei pour le lien!) :
http://avisynth.nl/index.php/Main_Page
- Les Quoted DSL, une approche proposée
par Shayan Najd, Sam Lindley, Josef Svenningsson et Philip Walder en
2015 :
http://www.cse.chalmers.se/~josefs/publications/oldnew.pdf
- Un DSL nommé Rant, pour faciliter la
génération procédurale de texte :
http://berkin.me/rant/
Critiques :
Éditeur de liens (Linker)
../Sujets/Developpement/Programmation-Systeme--Mecanique-Compilation.html
à venir...
Un guide sur les éditeurs de liens, destiné aux débutants
(avec connaissances en C ou en C++),
par David Drysdale : http://www.lurklurk.org/linkers/linkers.html
Comprendre le fonctionnement de l'éditeur de liens de gcc
sous
Linux, texte d'Eli Bendersky en
2013 :
http://eli.thegreenplace.net/2013/07/09/library-order-in-static-linking/
Livre en ligne, par John Levine en 2001 :
http://www.iecc.com/linker/
Douze faits sur les éditeurs de liens, relatés par Julia Evans en
2013 :
http://jvns.ca/blog/2013/12/10/day-40-12-things-i-learned-today-about-linkers/
Le Link-Time Optimization avec gcc, expliqué par
Jan Hubička en 2014 :
Le Link-Time Code Generation, ou Whole Program Optimization,
relaté par
Raymond Chen en 2014 :
http://blogs.msdn.com/b/oldnewthing/archive/2014/06/06/10531604.aspx
Pourquoi le système d'exploitation
Plan 9 privilégie l'édition des
liens statique à sa contrepartie dynamique, un texte de
2004 par Ron Minnich :
http://www.plan9.bell-labs.com/wiki/plan9/why_static/
Introduction détaillée à l'édition des liens, par Ian Lance Taylor en
2007 :
Livre en ligne sur les Linkers et les Loaders, en version
« brute » (avant l'action de l'éditeur), par John Levine en
2014 : http://iecc.com/linker/
Comme le rappelle
Raymond
Chen en 2015, on ne peut pas impunément
entremêler diverses technologies de Runtime
C, même si elles
proviennent d'un même fournisseur :
http://blogs.msdn.com/b/oldnewthing/archive/2015/09/11/10640979.aspx
En 2016, Nick Desaulniers propose une série
d'articles sur l'édition des liens :
Générateurs de processeurs
Quelques outils assistant les concepteurs de langages et de compilateurs dans
leurs tâches.
Interpréteurs
à venir...
Langages intermédiaires
Plusieurs générateurs de code produisent des instruction non
pas dans un langage machine pour une machine physique mais bien dans un intermédiaire.
Il existe plusieurs langages intermédiaires, destinés à
des interpréteurs, des compilateurs
ou des machines virtuelles. Sans surprises,
chacun a ses qualités, défauts et caractéristiques propres.
Il existe un Wiki sur le bytecode, mais il s'agit en fait d'un article
général sur les langages intermédiaires. Puisque le langage
destiné à la JVM utilise
le même nom pour se décrire, ce nom entraîne un peu de confusion.
Tout de même, l'article existe : http://en.wikipedia.org/wiki/Bytecode
Textes généraux :
Quelques-uns des langages intermédiaires les plus connus suivent :
- Le Common Intermediate Language, CIL,
destiné au CLR de la
plateforme .NET :
- Le bytecode, destiné à la JVM :
- Le terme bytecode est un terme général, qui s'applique à d'autres
modèles que celui de la JVM. À cet effet :
- En 2012, David J. Pierce décrit ses réflexions
quant à un format intermédiaire spécifique au langage
Whiley, le WYIL :
http://whiley.org/2012/08/06/reflecting-on-the-jvm-class-file-format/
- L'Intermediate Representation, ou IR,
langage intermédiaire de la plateforme
LLVM :
- Le SIL, Swift Intermediate Language,
langage intermédiaire de
Swift :
- En 2014, Chris Wellons explique en détail les
Byte-Codes de la machine
virtuelle
d'Emacs :
http://nullprogram.com/blog/2014/01/04/
- Le DXIL, langage intermédiaire de DirectX destiné à la programmation de
Shaders :
https://github.com/Microsoft/DirectXShaderCompiler/blob/master/docs/DXIL.rst