• ベストアンサー

Perlソースコードをコンパイルすることはできないのでしょうか?

Perlはインタプリタ言語とされますが、実行の際には機械語に翻訳されているのでしょうから、機械語のコードをオブジェクトファイルとして保存して、そのまま使うことはできないのでしょうか? そうすれば実行するときに翻訳する必要がなく、実行速度が多少上がるのではないかな、と思いました。 直接関係のない関連事項でも、宜しくお教えください

  • Perl
  • 回答数5
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

http://aspn.activestate.com/ASPN/docs/ActivePerl/5.8/lib/Pod/perlrun.html Perl のコマンドラインオプション -u を指定するとスクリプトをコンパイル後コアダンプします。 undump コマンドを使ってcore ファイルから実行ファイルが作成できるというようなことが上記サイトの説明として載っています。 あと、ツールでPerl2exe というのもあるらしいです。

その他の回答 (4)

回答No.3

バイトコードを生成したい、ということでしょうか。 参考URL中の、「バイトコードとコンパイラー・バックエンドを使う」の辺りを参考にして下さい。 ただし、どんな場合でも有効に働くわけではありません。 アルゴリズムによる最適化を第一に考え、バイトコードの使用は「極限まで」速くしたい場合の最後の手、という気がしますけどね。

参考URL:
http://www-06.ibm.com/jp/developerworks/linux/041119/j_l-optperl.html
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

前提が間違っています。 内部表現に変換されてそれを解釈実行するルーチン群が動いているのであって、 JavaのVMのように機械語レベルのコードまで落ちることはありません。 実行速度を上げたいということなら、perlのFAQにありますので 探してみてください。

参考URL:
http://perldoc.jp/docs/perl/5.6.1/perlfaq3.pod
  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.1

PerlではなくてCなどをCGIとして使用すればよいのではないでしょうか?

naho1986
質問者

お礼

なるほど それならコンパイル済みですね 参考になりました

関連するQ&A

  • コンパイラ、インタプリタ、クロスコンパイラについて

    インタプリタについて質問があります。 色々と調べたところ、perl、php、rubyなど、ソースをインタプリタで実行する言語の利点は以下なのだと思います。 ソフトを作っている環境と実行環境の間でcpuやos等が異なる場合は、 ソースは互いに異なる機械語に翻訳されるので、翻訳は実行環境で行わなければならない。 その際、コンパイラの場合はわざわざ手動で翻訳を実行しなければならないが、 インタプリタの場合は勝手に実行時に翻訳してくれるので楽。 1.それで質問なのですが、 コンパイラは環境に対応した機械語を出すらしいですが、 何故そんな事ができるのでしょうか。 コンパイラが、自身が置かれた環境を分析して、それに対応した機械語を出すのでしょうか? それとも、そもそも環境毎に対応したコンパイラを使うという事でしょうか? 2.また、世の中にはクロスコンパイラというものがあると聞きました。 クロスコンパイラがあれば、ソフトを作っている環境でそのままコンパイルできるので、 インタプリタはいらないのではないでしょうか? クロスコンパイラの短所や長所などを教えてほしいです。 3.翻訳後の話として、機械語はcpuやosによって違うという話ですよね。 つまり、機械語にコンパイル済みのソフトを配布する際は環境毎に対応したソフトを それぞれ配布しなければならないのですよね。 しかし、ネット上でダウンロードできるフリーのソフトなんかは、 特定のOS向け、あるいはOS別に違うファイルを配布、というのはよく見かけますが、 cpuやその他の環境毎に配布物を分けているのは見たことがありません。 機械語は、本当にos以外にも依存するものなのでしょうか?

  • Perlの実行速度

    プログラミング初心者のちょっとした疑問です。 Perlの実行速度はなぜあんなに早いんですか? RubyやPythonも同じインタプリタ方式なのに、どうしてあんなに 差が出るんでしょうか?

  • rubyのインタプリタについて

    プログラムを作って実行しました。すると5秒ぐらい経過して出力が現れ終了しました。このプログラムをまた実行するとつぎは1秒ぐらいで終了しました。rubyはインタプリタ言語なので機械語に一旦翻訳して実行していると聞いたのですがそれではなぜ上記のように5秒かかっていたものが次の実行時には1秒ぐらいですんでしまったのでしょうか?

  • .NET frameworkについて

    .NET frameworkとはJVMとほとんど同じような気がするのですが、いろんな言語が使えること以外に何かメリットあるのでしょうか? それと、たとえば、VC.NETで作ったプログラムはコンパイラで中間コードになって、実行時に.NET frameworkでインタプリタみたいに機械語に直して実行しているのでしょうか?

  • コンパイラとインタプリタとアセンブラの違いって何?

    言語プロセッサの説明で「コンパイラ、インタプリタ、アセンブラ」などがあると書かれていたのですが、 コンパイラもインタプリタもアセンブラもどれも説明が「機械語に翻訳する」と書かれていました。 何が違うのでしょうか? 違いをわかりやすく教えてください。 いろいろなプログラミング言語があるというところまでは理解できましたが、プログラミングはわかりません。(涙) これから勉強します。

  • 翻訳アルゴリズムのソースコード

    大学4年で自然言語処理について研究しているものです。 現在、webサイトを対象とした翻訳の精度向上に関する研究をしています。そこで機械翻訳のプログラミングをしたいのですが一からプログラムするのは時間がかかってしまうのでインターネットで公開されている翻訳のソースコードをしようと考えています。 どなたかもしよろしければインターネットで翻訳アルゴリズムのソースコードを公開しているサイトを知っている方いらっしゃいましたら教えていただけないでしょうか?

  • アセンブリ言語は原始プログラムですか?

    質問(1) アセンブリ言語というのは、 add $S1, $S2 みたいなやつですよね? wikipediaで「ソースコード(ソースプログラム、原始プログラム)」の注釈1,2を読むと、 注1:【機械語の命令に記述するアセンブリ言語(アセンブラ)が存在するが、このアセンブラ用の文字列で記述されたプログラムはソースコードとは呼ばれないのが普通である。】 注2:【アセンブリ言語で書かれたプログラムはソースコードと呼ばれない】 と書かれてあります。 でも、 他の教材では アセンブリ言語で書かれたプログラム(原始プログラム) と書かれています。 どっちが正しいのでしょうか? 質問(2) 目的プログラム(オブジェクトプログラム)とは、 IT用語辞典によると 【オブジェクトプログラムとは、ソースプログラム(人間が認識できるプログラム言語で高水準言語など?)をコンパイラで機械語に翻訳したプログラムのことである】 とありますが、 ソースプログラムをコンパイラで翻訳するとアセンブリ言語になるんではないのですか? そのアセンブリ言語をアセンブラで翻訳して機械語になるのではないのでしょうか? どなたかご教授ください。 お願いします。

  • PHPの中間コード

    中間コードは、Java等だと配布先でもVMで実行可能になるようなメリットはあると思います。 ただ、PHPなどは中間コードの配布がまず無い言語だと思うのですが、なぜ生成するのでしょうか。 実行までのステップが無駄に増えるだけの気がしています。 単純に考えると、中間コード無しで実行可能な機械語を生成するのが効率的なように思えてしまいます。 きっと理由があると思うのですが・・。 わかる方がいらっしゃいましたら教えてください。

    • ベストアンサー
    • PHP
  • インタプリタはロードモジュールを作成する?

    情報システムを勉強し始めた初心者です。 私の持っているテキストには以下のように書いてあります。 ・「ソースプログラム」を「ロードモジュール」に変換するプログラムが「言語プロセッサ」。 ・「言語プロセッサ」には「コンパイラ」や「インタプリタ」が使われる。 つまり、コンパイラもインタプリタもロードモジュールを作成するものだと思っていました。 しかし、以下のような問題がありました。 問題: インタプリとは、高水準言語で書かれた原子プログラムを、機械語のプログラムに翻訳してロードモジュールを作成するプログラムである。 答え: 間違い。インタプリタではなく、コンパイラの説明になっている。 つまり、インタプリタはロードモジュールを作成しないということなのでしょうか? どなたかご教授お願いいたします。

  • ソラリス8のperl5.8が漢字を正しく表現しない

    Solaris8(SPARC)にperl5.80をインストールしました。 下記スクリプトを実行すると ------------------------------ #!/usr/local/bin/perl use encoding "sjis"; printf("噂のC言語\n"); ------------------------------ 出力される文字が 奄フC言語 となってしまいます。 漢字コードはシフトJIS(ja_JP.PCK)を設定しています。 上記スクリプトは、Windows-2000上のperl5.80では、 正しく「噂のC言語」と出力されます。 同一条件(soralis8(SPARC) perl5.80 (ja_JP.PCK))で 正しく日本語を表示出来た方は、おりますでしょうか。 また、この文字化けの改修方法をご存じの方、おりましたら教えてください。

専門家に質問してみよう