Domanda

Per Python, può creare una versione precompilata file.pyc in modo che il programma possa essere eseguito senza essere interpretato nuovamente.Ruby, PHP e Perl possono fare lo stesso sulla riga di comando?

È stato utile?

Soluzione

Non v'è alcuna specifica bytecode portatile per Ruby, e quindi anche un modo standard per caricare gli archivi bytecode precompilati. Tuttavia, quasi tutte le implementazioni di Ruby utilizzano una sorta di bytecode o in formato intcode, e molti di loro possono scaricare e ricaricare gli archivi bytecode.

YARV compila sempre in bytecode prima di eseguire il codice, tuttavia, che di solito è fatto solo nella memoria. Ci sono modi per eseguire il dump il bytecode disco. Al momento, non c'è modo di leggerlo di nuovo in , però. Questo cambierà in futuro: il lavoro è in corso su una verificatore bytecode per YARV, e una volta fatto ciò, bytecode può tranquillamente essere caricato nella macchina virtuale, senza timore di corruzione. Inoltre, gli sviluppatori JRuby hanno indicato che essi sono disposti ad attuare un YARV VM emulatore all'interno JRuby , una volta che il formato bytecode YARV e verificatore si siano stabilizzati, in modo da poter caricare YARV bytecode in JRuby. (Si noti che questa versione è obsoleto .)

Rubinius anche compila sempre in bytecode, e ha un formato per i file compilati (file .rbc, analoga ai file .class JVM) e si parla di un formato archivio bytecode (file .rba, analoghe a JVM .jar file). C'è una possibilità che Rubinius potrebbe implementare un emulatore YARV, se la distribuzione di applicazioni come YARV bytecode diventa sempre più popolare. Inoltre, gli sviluppatori JRuby hanno indicato che essi sono disposti ad attuare un Rubinius bytecode emulatore all'interno JRuby , se Rubinius bytecode diventa un modo popolare di distribuzione di applicazioni Ruby. (Si noti che questa versione è obsoleto .)

XRuby è un compilatore puro, compila Rubino codice sorgente direttamente alla JVM bytecode (file .class). È possibile distribuire questi file .class come qualsiasi altra applicazione Java.

JRuby iniziato come un interprete, ma ha sia un compilatore JIT e di un AOT compilatore (jrubyc), che può compilare codice sorgente di Ruby alla JVM bytecode (file .class) . Inoltre, si sta lavorando per creare un nuovo compilatore che può compilare (tipo-annotato) codice Ruby per JVM bytecode che oggi si presenta come una classe Java e può essere utilizzato da codice Java senza barriere.

Ruby.NET è un compilatore che compila puro Rubino codice sorgente a CIL bytecode (.dll PE o file .exe) . È possibile distribuire questi come qualsiasi altra applicazione CLI.

IronRuby compila anche a CIL bytecode, ma in genere fa questo in memoria. Tuttavia, è possibile passare Swit a riga di comandoches ad esso , quindi scarica i file .dll e .exe su disco. Una volta che avete quelli, possono essere distribuiti normalmente.

BlueRuby automaticamente pre-analizza Rubino codice sorgente in BRIL (BlueRuby Intermediate Language), che è fondamentalmente un ParseTree serializzato. (Vedere < em> Blu rubino -. Un rubino VM in SAP ABAP (PDF) per i dettagli)

I pensare (ma non sono assolutamente sicuro) che ci sia un modo per ottenere il cardinale per dump Parrot archivi bytecode. (In realtà, il cardinale compila solo per PASSATO, e poi Parrot prende il sopravvento, quindi sarebbe il lavoro di Parrot per fare uscire e gli archivi di carico bytecode.)

Altri suggerimenti

Perl 5 può eseguire il dump dei bytecode su disco, ma è bacato e brutto. Perl 6 ha un metodo molto pulito di creare eseguibili bytecode che Parrot può essere eseguito.

Perl è compilatore just-in-time è abbastanza veloce che questo non importa in più circostanze. Un luogo in cui si fa la materia è in un ambiente CGI, che è ciò che mod_perl è per.

Per l'uvetta isterica, Perl 5 cerca .pmc file in anticipo .pm file durante la ricerca del modulo.Questi file potrebbero contenere bytecode, sebbene Perl non scriva bytecode per impostazione predefinita (a differenza di Python).

Modulo::Compila (o:cos'è questa cosa del PMC?) approfondisce questa caratteristica oscura.Non sono usati frequentemente, ma...

Le persone intelligenti che hanno scritto Modulo::Compila approfittane per precompilare il codice Perl in...beh, è ​​ancora Perl, ma è preelaborato.

Tra gli altri vantaggi, questo accelera il tempo di caricamento e rende più semplice il debug quando si utilizzano i filtri sorgente (codice Perl che modifica il codice sorgente Perl prima di essere caricato dall'interprete).

Non per PHP, anche se la maggior parte delle configurazioni PHP incorporano un Bytecode cache che memorizza nella cache l'compilato bytecode in modo che la prossima volta lo script viene eseguito, la versione compilata viene eseguito. Questo accelera l'esecuzione in modo considerevole.

Non c'è modo io sappia effettivamente arrivare alla bytecode tramite la riga di comando.

Per Perl si può provare a utilizzare B :: Bytecode e perlcc . Tuttavia, entrambi questi sono altamente sperimentale. E Perl 6 è venuta fuori presto (teoricamente) e sarà in Parrot e userà un bytecode diverso e così tutto questo sarà un po 'discutibile poi.

Ecco alcuni esempi di parole magiche per la riga di comando

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

Secondo la terza edizione del programmazione Perl , è possibile approssimare questo in qualche modo sperimentale.

Se si utilizza Zend Guard sui vostri script PHP, è essenzialmente la precompiles script per byte-code, che può poi essere eseguito dal motore PHP se l'estensione Zend Optimizer è caricato.

Quindi, sì, Zend Guard / Optimizer permette script PHP precompilati da utilizzare.

Per PHP, il Phalanger Progetto compila giù NET. Non sono sicuro se questo è quello che stavi cercando però.

Qualcuno ha pensato di utilizzare bytecode di LLVM, al posto di un ancora-un altro-custom-bytecode?

Ruby 1.8 in realtà non utilizza bytecode a tutti (anche internamente), quindi non c'è fase di pre-compilazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top