Est-il possible de transformer le bytecode LLVM en bytecode Java?

j'ai entendu dire que google app engine peut exécuter n'importe quel langage de programmation qui peut être transformé en Java bytecode via son JVM . Je me suis demandé s'il serait possible de convertir LLVM bytecode en Java bytecode car il serait intéressant d'exécuter des langues que LLVM supporte dans le moteur D'App de Google JVM .

33
demandé sur dreamcrash 2011-02-08 18:06:37

4 réponses

il semble maintenant possible de convertir LLVM IR bytecode en Java bytecode, en utilisant l'interpréteur LLJVM .

There is an interesting Disqus comment (21/03/11) from Grzegorz of kraytracing.com qui explique, avec le code, comment il a modifié la routine de sortie de classe Java de LLJVM pour émettre des classes Java non-monolithiques qui concordent en nombre avec les modules d'entrée C/C++. Il suggère que sa technique semble éviter les signatures d'arguments excessivement longues de la méthode Java "compound" généralement générées par LLJVM, et il fournit des liens vers ses modifications et exemples.

bien que LLJVM ne semble pas avoir été en développement actif depuis quelques années maintenant, il est toujours hébergé sur Github et une certaine documentation peut encore être trouvé à son ancien dépôt à GoogleCode:

LLJVM @ Github

LLJVM documentation @ GoogleCode

j'ai également rencontré le projet Proteuscc " qui utilise également LLVM pour produire du code octet Java (il suggère que c'est spécifiquement pour C/C++, bien que je suppose que le projet pourrait être modifié ou la représentation intermédiaire LLVM (IR)). De http://proteuscc.sourceforge.net :

le processus général de production d'un exécutable Java avec Proteus alors peuvent être résumés ci-dessous.

  1. Générer lisible par l'homme de la représentation de l'intermédiaire LLVM représentation (ll fichier)
  2. Passer ce ll fichier comme argument de la proteus système de compilation
  3. ce qui précède produira un fichier Java jar qui peut être exécutée ou utilisée comme bibliothèque

i've extended un script bash pour compiler les dernières versions de LLVM et Clang sur Ubuntu , il peut être trouvé comme un Github Gist,ici .

[ mise à jour 31/03/14 ] - LLJVM semble avoir été mort pendant un certain temps, mais Howard Chu ( https://github.com/hyc ) semble avoir fait LLJVM compatible avec la dernière version de LLVM (3.3). Voir Howard LLJVM-LLVM3.3 succursale à Github, ici

25
répondu Big Rich 2016-02-08 16:43:39

je doute que vous puissiez, du moins pas sans effort significatif et abstraction de temps de fonctionnement (par exemple la construction d'une demi-machine Von Neumann pour exécuter certains opcodes). ILVM bitcode permet la gamme complète de bas niveau dangereux "faire ce que vous voulez, mais nous ne nettoierons pas le gâchis" fonctionnalités, de l'attribution directe, brute, sans constructeur de la mémoire jusqu'à des casts complètement non contrôlés-casts réels, pas les conversions - vous pouvez prendre i32 et bitcast à un %stuff * si vous le souhaitez. En outre, les JVM sont fortement orienté vers les objets et les méthodes, tandis que les gars LLVM sont chanceux qu'ils ont des pointeurs de fonction et des structures.

d'autre part, il semble que C peut être compilé en Java bytecode et LLVM bitcode peut être compilé en Javascript (bien que de nombreuses fonctionnalités, par exemple chargement dynamique et les fonctions stdlib, font défaut), il devrait donc être possible, compte tenu de l'effort.

7
répondu Community 2017-05-23 10:31:02

Late to the discussion: Sulong execute LLVM IR on the JVM. Il crée des noeuds exécutables (qui sont des objets Java) à partir du RI LLVM au lieu de convertir le RI LLVM en bytecode Java. Ces noeuds exécutables forment un interpréteur AST. Vous pouvez consulter le projet à https://github.com/graalvm/sulong ou lisez un article à ce sujet à http://dl.acm.org/citation.cfm?id=2998416 . Avertissement: je travaille sur ce projet.

3
répondu box 2017-08-29 11:15:46

Lire: http://vmkit.llvm.org / . Je ne suis pas sûr que cela vous aidera, mais il semble être pertinente.

Note: ce projet n'est pas plus maintenu.

0
répondu AlexR 2016-09-05 15:00:27