Question

Pour Python, il peut créer une version pré-compilée file.pyc afin que le programme puisse être exécuté sans interprété à nouveau. Peut-Ruby, PHP, Perl et faire la même chose sur la ligne de commande?

Était-ce utile?

La solution

Il n'y a pas de spécification bytecode portable pour Ruby, et donc aucun moyen standard pour charger les archives précompilés bytecode. Cependant, presque toutes les implémentations Ruby utilisent une sorte de bytecode ou format intCode, et plusieurs d'entre eux peuvent et recharger les archives vider bytecode.

YARV toujours bytecode compile avant d'exécuter le code, mais qui est généralement fait en mémoire. Il existe des moyens pour vider le bytecode sur le disque. À l'heure actuelle, il n'y a aucun moyen de le relire en , cependant. Cela va changer à l'avenir: le travail est en cours sur un vérificateur de bytecode pour YARV, et une fois cela fait, bytecode peut être chargé en toute sécurité dans la machine virtuelle, sans crainte de la corruption. En outre, les développeurs JRuby ont indiqué qu'ils sont prêts à mettre en œuvre un YARV émulateur VM à l'intérieur JRuby, une fois le format YARV bytecode et vérificateur sont stabilisées, de sorte que vous pouvez charger YARV bytecode dans JRuby. (Notez que cette version est obsolète .)

Rubinius aussi toujours bytecode compile, et il a une format des fichiers compilés de (fichiers de .rbc, analogue aux fichiers .class JVM) et on parle d'un format d'archive bytecode (fichiers .rba, fichiers .jar analogues à JVM). Il y a une chance que Rubinius pourrait mettre en œuvre un émulateur YARV, si le déploiement des applications comme YARV bytecode devient très populaire. En outre, les développeurs JRuby ont indiqué qu'ils sont prêts à mettre en œuvre un Rubinius émulateur bytecode intérieur JRuby, si Rubinius bytecode devient un moyen populaire de déployer des applications Ruby. (Notez que cette version est obsolète .)

XRuby est un compilateur pur, il compile Ruby sourcecode directement à bytecode JVM (fichiers .class). Vous pouvez déployer ces fichiers .class comme toute autre application Java.

JRuby a commencé comme un interprète, mais il a à la fois un compilateur JIT et un compilateur AOT (jrubyc) qui peut compiler Ruby sourcecode à bytecode JVM (fichiers .class) . En outre, le travail est en cours pour créer un nouveau compilateur qui peut compiler (type annoté) Code Ruby à bytecode JVM qui ressemble en fait comme une classe Java et peut être utilisé à partir du code Java sans barrières.

Ruby.NET est un compilateur qui compile pur Ruby code source à CIL bytecode (PE .dll ou fichiers .exe) . Vous pouvez déployer ces comme toute autre application CLI.

IronRuby compile également CIL bytecode, mais fait généralement cela en mémoire. Cependant, vous pouvez passer BlueRuby automatiquement prétraite Ruby sourcecode dans Bril (BlueRuby Intermediate Language), qui est essentiellement un arbre syntaxique sérialisé. (Voir < em> Blue Ruby -. A Ruby VM dans SAP ABAP (PDF) pour plus de détails)

pense (mais je suis certainement pas sûr) qu'il ya un moyen d'obtenir Cardinal pour vider Parrot archives bytecode. (En fait, le cardinal ne compile que du passé, puis Parrot prend le relais, il serait le travail de Parrot pour vider et les archives bytecode de charge.)

Autres conseils

Perl 5 peut vider le bytecode sur le disque, mais il est buggy et méchant. Perl 6 a une méthode très propre de créer des exécutables de bytecode que Parrot peut fonctionner.

Perl compilation juste à temps est assez rapide que cela n'a pas d'importance dans la plupart des cas. Un endroit où il fait la matière est dans un environnement de CGI qui est ce que mod_perl est pour.

Pour les raisins hystériques, Perl 5 recherche les fichiers .pmc avant fichiers .pm lors de la recherche du module. Ces fichiers peuvent contenir bytecode, bien que Perl ne pas écrire bytecode par défaut (contrairement à Python).

Module :: Compile (ou: qu'est-ce PMC thingy) va dans un peu plus de profondeur sur cette fonctionnalité obscure. Ils ne sont pas souvent utilisés, mais ...

Les gens intelligents qui ont écrit Module :: Compile tirer profit de cela, pour pré-compiler le code Perl dans ... eh bien, il est toujours Perl, mais il est prétraité.

Entre autres avantages, ce qui accélère le temps de chargement et rend le débogage lors de l'utilisation des filtres de source (code Perl modifier le code source Perl avant d'être chargé par l'interprète).

Pas pour PHP, bien que la plupart des configurations PHP intègrent un bytecode Cache qui va mettre en cache la compilation bytecode de telle sorte que la prochaine fois que le script est exécuté, la version compilée est exécutée. Cela accélère considérablement l'exécution.

Il n'y a aucun moyen que je suis au courant pour obtenir effectivement au bytecode par la ligne de commande.

Pour Perl, vous pouvez essayer d'utiliser B :: bytecode et perlcc . Cependant, les deux sont très expérimental. Et Perl 6 arrive bientôt (théoriquement) et sera sur Parrot et utilisera un autre bytecode et si tout cela sera un peu discutable alors.

Voici quelques exemples des mots magiques pour la ligne de commande

perl -MO=Bytecode,-H,-o"Module.pm"c "Module.pm"

Selon la troisième édition de Programmation Perl , il est possible de rapprocher ce d'une certaine façon expérimentale.

Si vous utilisez Zend Guard sur vos scripts PHP, il precompiles essentiellement scripts de byte-code, qui peut ensuite être géré par le moteur PHP si l'extension Zend Optimizer est chargé.

Alors, oui, Zend Guard / Optimizer permet des scripts PHP pré-compilés à utiliser.

Pour PHP, Phalanger projet compile jusqu'à assemblages .Net. Je ne sais pas si c'est ce que vous recherchez bien.

Quelqu'un at-il envisagé d'utiliser le bytecode de LLVM, au lieu d'une autre encore-mesure-bytecode?

Ruby 1.8 n'utilise pas vraiment bytecode du tout (même interne), donc il n'y a pas d'étape de pré-compilation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top