Ruby, PHP, Perl veya Python gibi kodu için derlenmiş dosya oluşturabilir miyim?

11 Cevap php

Program yeniden yorumlanabilir olmadan çalıştırabilirsiniz böylece Python için, bir ön-derlenmiş sürümü file.pyc oluşturabilirsiniz. Ruby, PHP, Perl ve komut satırında aynı yapabilirim?

11 Cevap

İşte Ruby için hiçbir taşınabilir baytkodu şartname ve önceden derlenmiş bayt kodu arşivleri yüklemek böylece standart bir yol. Ancak, hemen hemen tüm Ruby uygulamaları bayt veya intcode biçimi çeşit kullanmak ve onları birkaç bytekod arşivleri dökümü ve yeniden yükleyebilirsiniz.

YARV her zaman, ancak genellikle yalnızca bellekte yapılır, kodu çalıştırmadan önce baytkoduna derler. Diske bytecode dışarı dökümü için yolu vardır. At the moment, there is no way to read it back in , however. This will change in the future: work is underway on a bytecode verifier for YARV, and once that is done, bytecode can safely be loaded into the VM, without fear of corruption. Also, the JRuby developers have indicated that they are willing to implement a YARV VM emulator inside JRuby, sen JRuby içine YARV bayt kodu yüklemek böylece YARV bytekod biçim ve doğrulayıcı, stabilize kez. (obsolete bu sürümü olduğunu unutmayın.)

Rubinius da her zaman baytkoduna derler, ve bir format for compiled files (JVM .class dosya benzer .rbc dosyaları) vardır ve tartışma var yaklaşık bir bytekod arşiv biçimi (JVM .jar dosya benzer .rba dosyaları). YARV bayt gibi uygulamaları dağıtma hiç popüler hale Rubinius, bir YARV emülatör uygulayabilir bir şans var. Ayrıca, JRuby geliştiriciler Rubinius baytkodu Ruby uygulamaları dağıtma popüler bir şekilde olursa, bir Rubinius bytecode emulator inside JRuby uygulamak için istekli olduklarını belirttiler. (obsolete bu sürümü olduğunu unutmayın.)

XRuby saf bir derleyici, düz JVM bayt (.class dosyaları) Ruby sourcecode derler. Sadece başka bir Java uygulaması gibi bu .class dosyalarını dağıtabilirsiniz.

JRuby tercüman olarak başladı, ancak bir JIT derleyicisi ve JVM bayt için AOT compiler (jrubyc) derlemek Ruby sourcecode ({[(hem de 3)]} dosyaları). Ayrıca, iş aslında bir Java sınıf gibi görünüyor ve engelleri olmadan Java kodu kullanılabilir JVM bayt (tip-açıklamalı) Ruby kod derleme bir new derleyici oluşturmak için devam etmektedir.

Ruby.NET CIL bayt (PE .dll veya .exe dosyaları) Ruby sourcecode derler saf bir derleyici. Sadece başka bir CLI uygulama gibi dağıtabilirsiniz.

IronRuby de CIL bayt kodu derler ama genellikle bellek yapar. Ancak, commandline switches to it geçebilir, bu nedenle .dll döker ve .exe diske dosyaları. Bu olduğunda, normalde dağıtılabilir.

BlueRuby otomatik BRIL temelde bir tefrika parsetree olduğu (BlueRuby Intermediate Language), Ruby sourcecode önceden ayrıştırır. (Ayrıntılar için Blue Ruby - A Ruby VM in SAP ABAP (PDF) bakın.)

I think Cardinal Parrot baytkodu arşivleri dökümü almak için bir yol olduğunu (ama kesinlikle emin değilim). (Aslında, Cardinal yalnızca geçmişten derler, ve sonra Parrot devraldı, bu nedenle dökümü ve bayt kodu arşivleri yüklemek için papağanı'nın iş olacaktır.)

Perl 5 diske baytkodlarına dökümü olabilir, ama adamcağız ve pis. Perl 6 Parrot çalıştırabilirsiniz bytekod çalıştırılabilir oluşturmanın çok temiz bir yöntemi vardır.

Perl just-in-time compilation bu çoğu durumda farketmez yeterince hızlı. Bunun önemi yok tek yer mod_perl için ne bir CGI ortamdadır.

Histerik kuru üzüm, Perl 5 modül ararken .pmc Devam .pm dosya dosyaları arar. Perl (Python aksine), varsayılan olarak bayt kodu yazmak değil ama bu dosyalar, bayt kodunu içerebilir.

Module::Compile (or: what's this PMC thingy?) bu karanlık özellik hakkında biraz daha derinlemesine gider. Onlar sık ​​kullanılan değiliz, ama ...

Module::Compile Perl kodu içine önceden derlemek için, bu yararlanmak yazdı akıllı millet ... iyi, hala Perl, ama önişlemdedir oluyor.

Diğer yararları arasında, bu yükleme süresini hızlandırır ve (Perl kod yorumlayıcısı tarafından yüklenen önce Perl kaynak kodunu değiştirerek) kaynak filtreleri kullanırken daha kolay hata ayıklama yapar.

Çoğu PHP kurulumları dahil olmasına rağmen PHP için, bir komut çalıştırır dahaki sefere o kadar Bytecode Cache derlenmiş bayt kodu önbelleğe alacak şekilde, derlenmiş sürümü çalıştırmak değil. Bu ölçüde yürütme hızlandırır.

Aslında komut satırı aracılığıyla bayt almak için farkında olduğum bir yolu yok.

Perl için, B::Bytecode ve perlcc kullanarak deneyebilirsiniz. Ancak, bu iki derece deneysel. Ve Perl 6 (teorik olarak) yakında geliyor ve Parrot olacak ve farklı bir bayt kodu kullanır ve böylece tüm bu o biraz tartışmalı olacaktır.

Burada komut satırı için bazı örnek sihirli kelimeler

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

Programming Perl üçüncü baskısına göre, bazı deneysel yollarla bu yaklaşmak mümkündür.

Eğer PHP üzerinde Zend Guard kullanırsanız, aslında Zend Optimizer eklentisi yüklü ise o zaman PHP motoru tarafından çalıştırılabilir byte-kod, komut precompiles.

Yani, evet, Zend Guard / Optimizer kullanılmak üzere derlenmiş PHP komut verir.

PHP için, Phalanger Project. Net meclisleri aşağı derler. Ben olsa aradığını thats ne emin değilim.

Herkes yerine henüz başka-özel-baytkod, LLVM en bytecode kullanarak kabul etti mi?

Ruby 1.8 aslında tüm (hatta dahili) de bayt kodunu kullanmak değildir, dolayısıyla ön-derleme adım vardır.