Frage

Für Python, kann es eine vorkompilierte Version file.pyc erstellen, so dass das Programm wieder ohne interpretiert ausgeführt werden. Können Rubin, PHP und Perl auf der Kommandozeile das gleiche tun?

War es hilfreich?

Lösung

Es gibt keine tragbare Bytecode-Spezifikation für Ruby und damit auch keine Standardmethode vorkompilierte Bytecode-Archive zu laden. Allerdings verwenden fast alle Ruby-Implementierungen eine Art Bytecode oder intcode Format, und einige von ihnen können Dump und Bytecode-Archive neu zu laden.

YARV immer kompiliert Bytecode vor der Ausführung des Codes jedoch, dass in der Regel im Speicher nur getan ist. Es gibt Möglichkeiten, den Bytecode auf der Festplatte auskippen. Im Moment gibt es keine Möglichkeit, es zu lesen zurück in jedoch. Dies wird sich in Zukunft ändern: Arbeit ist auf einem Bytecode Verifier für YARV im Gange, und sobald dies geschehen ist, Bytecode kann sicher in die VM geladen werden, ohne Angst vor Korruption. Außerdem hat der JRuby-Entwickler an, dass sie bereit sind, ein YARV VM-Emulator innerhalb JRuby , sobald die YARV Bytecode-Format und Verifizierer stabilisiert werden, so dass Sie YARV Bytecode in JRuby laden konnte. (Beachten Sie, dass diese Version veraltet ist.)

Rubinius auch immer kompiliert Bytecode, und es hat eine Format für kompilierte Dateien (.rbc Dateien, analog zu JVM .class Dateien), und es ist die Rede von einem Bytecode-Archivformat (.rba Dateien, analog zu JVM .jar Dateien). Es gibt eine Chance, dass Rubinius einen YARV Emulator implementieren könnte, wenn Anwendungen den Einsatz als YARV Bytecode immer beliebter wird. Außerdem hat der JRuby-Entwickler an, dass sie bereit sind, ein Rubinius Bytecode-Emulator innerhalb JRuby , wenn Rubinius Bytecode wird ein beliebter Weg, Ruby-Anwendungen der Bereitstellung. (Beachten Sie, dass diese Version veraltet ist.)

XRuby ist ein reiner Compiler kompiliert Ruby-Quellcode direkt auf JVM-Bytecode (.class-Dateien). Sie können diese .class Dateien wie jede andere Java-Anwendung bereitstellen.

JRuby als Dolmetscherin begann, aber es hat sowohl einen JIT-Compiler und eine AOT-Compiler (jrubyc), die Ruby Sourcecode zu JVM-Bytecode (.class-Dateien) kompilieren . Auch Arbeit ist im Gange, ein neue Compiler zu erstellen das kann kompilieren (Typen-kommentierten) Ruby-Code zu JVM-Bytecode dass tatsächlich aussieht wie eine Java-Klasse und kann von Java-Code ohne Barrieren verwendet werden.

Ruby.NET ist ein reiner Compiler, die Ruby Quelltext zu CIL-Bytecode (PE .dll oder .exe Dateien) kompiliert . Sie können diese wie jede andere CLI Anwendung bereitstellen.

IronRuby kompiliert auch CIL-Bytecode, aber in der Regel tut dies im Speicher. Sie können jedoch BlueRuby automatisch vorge parst Ruby-Quelltext in BRIL (BlueRuby Intermediate Language), die im Grunde ein serialisierte Syntaxbaum ist. (Siehe < em> Blue Rubin -. Ein Ruby VM in SAP ABAP (PDF) für weitere Details)

I denkt (aber ich bin definitiv nicht sicher), dass es eine Art und Weise zu bekommen Cardinal Parrot Bytecode-Archiven. (Eigentlich Kardinal kompiliert nur Vergangenheit, und dann Parrot übernimmt, so wäre es Parrot Job-Dump und Last-Bytecode-Archive.)

Andere Tipps

Perl 5 kann die Bytecode auf der Festplatte Dump, aber es ist fehlerhaft und böse. Perl 6 hat eine sehr saubere Methode Bytecode ausführbare Dateien zu erstellen, die a href = "http <: //www.parrot .org /“rel = "noreferrer"> Parrot laufen kann.

Perl ist Just-in-Time-Kompilierung schnell genug ist, dass dies nicht in den meisten Fällen keine Rolle. Ein Ort, an dem es nicht egal ist in einer CGI-Umgebung das ist, was Mod_perl ist.

Für hysterische Rosinen, sieht Perl 5 für .pmc Dateien vor .pm Dateien, wenn für das Modul zu suchen. Diese Dateien Bytecode enthalten könnten, obwohl Perl nicht Bytecode standardmäßig schreiben (im Gegensatz zu Python).

Module :: Compile (oder: was ist das PMC thingy) geht in etwas mehr Tiefe über diese obskure Funktion. Sie sind nicht häufig verwendet, aber ...

Die clever Leute, die schrieben Module :: Kompilieren dies nutzen, um Pre-kompilieren Perl-Code in ... na ja, es ist immer noch Perl, aber es vorverarbeitet.

Neben anderen Vorteilen, das beschleunigt die Ladezeit und erleichtert das Debuggen, wenn die Quellfilter verwendet (Perl-Code zu modifizieren Code Perl Quelle, bevor sie durch den Interpreter geladen werden).

Nicht für PHP, obwohl die meisten PHP-Setups einer Bytecode Cache das wird cachen die kompilierte Bytecode, so dass beim nächsten Mal das Skript ausgeführt wird, wird die kompilierte Version laufen. Dies beschleunigt die Ausführung erheblich.

Es gibt keinen Weg, mir bewusst bin, um tatsächlich an der Bytecode über die Befehlszeile zu erhalten.

Für Perl können Sie versuchen, mit B :: Bytecode und perlcc . Allerdings sind diese beiden sehr experimentell. Und Perl 6 kommt bald heraus (theoretisch) und wird auf Parrot sein und wird eine andere Bytecode verwenden und so all dies wird etwas strittig dann.

Hier sind einige Beispiele Zauberworte für die Befehlszeile

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

Nach der dritten Ausgabe von Programmierung Perl , es ist möglich, dies in einigen experimentellen Möglichkeiten zu nähern.

Wenn Sie Zend Guard auf Ihrem PHP-Skripte, es im Wesentlichen Vorkompilierung des Skripte zu Byte-Code, die Erweiterung geladen wird, wenn die Zend Optimizer kann dann durch den PHP-Engine ausgeführt werden.

Also, ja, Zend Guard / Optimizer ermöglicht vorkompilierte PHP-Skripte verwendet werden.

Für PHP, das Phalanger Projekt kompiliert bis zu .NET-Assemblies. Ich bin mir nicht sicher, ob das ist, was Sie für obwohl suchen.

Hat jemand betrachtet LLVM Bytecode, daß anstelle eines noch-ein anderes-custom-Bytecode?

Ruby 1.8 eigentlich nicht Bytecode überhaupt verwenden (auch intern), so gibt es keine Vorkompilierung Schritt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top