Python の場合、コンパイル済みバージョンの file.pyc を作成できるため、再度解釈することなくプログラムを実行できます。Ruby、PHP、および Perl はコマンドラインで同じことを行うことができますか?
11 に答える
ヒステリックレーズンの場合、Perl 5はモジュールを検索するときに、.pmc
ファイルよりも先に.pm
ファイルを検索します。これらのファイルにはバイトコードが含まれている可能性がありますが、Perlはデフォルトではバイトコードを書きません(Pythonとは異なります)。
Module :: Compile(または:このPMCは何ですか?)は、このあいまいな機能についてさらに深く掘り下げます。あまり使われていませんが...
Module :: Computeを書いた賢い人々は、これを利用して、Perlコードをプリコンパイルします...まあ、それはまだPerlですが、前処理されています。
他の利点の中でも、これによりロード時間が短縮され、ソースフィルター(インタープリターによってロードされる前にPerlソースコードを変更するPerlコード)を使用する際のデバッグが容易になります。
PHP 用ではありませんが、ほとんどの PHP セットアップには、コンパイルされたバイトコードをキャッシュするバイトコード キャッシュが組み込まれているため、次にスクリプトを実行するときにコンパイルされたバージョンが実行されます。これにより、実行が大幅に高速化されます。
コマンドラインから実際にバイトコードを取得する方法はありません。
Perl の場合、B::Bytecodeとperlccを試してみてください。ただし、これらはどちらも非常に実験的なものです。Perl 6 は間もなく (理論的には) 登場し、Parrot に搭載され、別のバイトコードを使用する予定です。
コマンドラインのマジック ワードの例を次に示します。
perl -MO=Bytecode,-H,-o"Module.pm"c "Module.pm"
Programming Perlの第 3 版によると、いくつかの実験的な方法でこれを近似することが可能です。
PHP の場合、Phalanger Projectは .Net アセンブリにコンパイルされます。それがあなたが探していたものかどうかはわかりません。
PHP スクリプトでZend Guardを使用すると、基本的にスクリプトがバイトコードにプリコンパイルされ、Zend Optimizer 拡張機能が読み込まれている場合に PHP エンジンで実行できるようになります。
そうです、Zend Guard/Optimizer では、コンパイル済みの PHP スクリプトを使用できます。
さらに別のカスタムバイトコードの代わりに、LLVM のバイトコードを使用することを検討した人はいますか?
Ruby 1.8 は実際には (内部的にも) バイトコードをまったく使用しないため、コンパイル前のステップはありません。