21

Python の場合、コンパイル済みバージョンの file.pyc を作成できるため、再度解釈することなくプログラムを実行できます。Ruby、PHP、および Perl はコマンドラインで同じことを行うことができますか?

4

11 に答える 11

13

Perl 5 はバイトコードをディスクにダンプできますが、バグが多く厄介です。 Perl 6には、 Parrotが実行できるバイトコード実行可能ファイルを作成する非常にクリーンな方法があります。

Perl のジャストインタイム コンパイルは十分に高速であるため、ほとんどの状況では問題になりません。それが重要な場所の 1 つは、mod_perlの目的である CGI 環境です。

于 2009-05-19T18:03:28.117 に答える
11

ヒステリックレーズンの場合、Perl 5はモジュールを検索するときに、.pmcファイルよりも先に.pmファイルを検索します。これらのファイルにはバイトコードが含まれている可能性がありますが、Perlはデフォルトではバイトコードを書きません(Pythonとは異なります)。

Module :: Compile(または:このPMCは何ですか?)は、このあいまいな機能についてさらに深く掘り下げます。あまり使われていませんが...

Module :: Computeを書いた賢い人々は、これを利用して、Perlコードをプリコンパイルします...まあ、それはまだPerlですが、前処理されています。

他の利点の中でも、これによりロード時間が短縮され、ソースフィルター(インタープリターによってロードされる前にPerlソースコードを変更するPerlコード)を使用する際のデバッグが容易になります。

于 2009-05-19T19:01:31.453 に答える
6

PHP 用ではありませんが、ほとんどの PHP セットアップには、コンパイルされたバイトコードをキャッシュするバイトコード キャッシュが組み込まれているため、次にスクリプトを実行するときにコンパイルされたバージョンが実行されます。これにより、実行が大幅に高速化されます。

コマンドラインから実際にバイトコードを取得する方法はありません。

于 2009-05-19T18:00:43.893 に答える
5

Perl の場合、B::Bytecodeperlccを試してみてください。ただし、これらはどちらも非常に実験的なものです。Perl 6 は間もなく (理論的には) 登場し、Parrot に搭載され、別のバイトコードを使用する予定です。

于 2009-05-19T18:03:40.223 に答える
3

コマンドラインのマジック ワードの例を次に示します。

perl -MO=Bytecode,-H,-o"Module.pm"c "Module.pm"
于 2009-05-20T08:17:04.603 に答える
2

Programming Perlの第 3 版によると、いくつかの実験的な方法でこれを近似することが可能です。

于 2009-05-19T18:04:58.473 に答える
1

PHP の場合、Phalanger Projectは .Net アセンブリにコンパイルされます。それがあなたが探していたものかどうかはわかりません。

于 2009-05-19T18:42:44.293 に答える
1

PHP スクリプトでZend Guardを使用すると、基本的にスクリプトがバイトコードにプリコンパイルされ、Zend Optimizer 拡張機能が読み込まれている場合に PHP エンジンで実行できるようになります。

そうです、Zend Guard/Optimizer では、コンパイル済みの PHP スクリプトを使用できます。

于 2009-05-19T18:27:13.977 に答える
1

さらに別のカスタムバイトコードの代わりに、LLVM のバイトコードを使用することを検討した人はいますか?

于 2009-06-04T08:02:15.023 に答える
0

Ruby 1.8 は実際には (内部的にも) バイトコードをまったく使用しないため、コンパイル前のステップはありません。

于 2009-05-19T18:05:21.500 に答える