• ベストアンサー

コンパイル言語とインタープリター言語の違いについて

コンパイルするプログラミング言語とインタープリターする プログラミング言語の違いについて教えてください。 特に、開発上および運営上の利点・欠点についてお願いします。 また、CGIでは、PHPやPERLなどのインタープリター言語が 主流ですが、その理由とC言語などで組むのと比較して、 どのような利点があるのか教えてください。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4845/10256)
回答No.5

現在ではもはや古典的な「コンパイル言語」「インタープリタ言語」の区別は意味を持たないでしょう。 Cは確かにターゲットのCPU/OSの環境専用のマシン語にコンパイルされ、実行されますが、Javaや.NET用言語では、ソースプログラムをそれぞれの仮想マシンの仮想マシンコードにコンパイルしてオブジェクトファイルを作り、仮想マシンがそのコードをインタープリトします。 また、PerlやRuby等に置いてもソースを中間コードにコンパイルしてからその中間コードをインタープリトします。 従って、 ・純粋なコンパイル言語・・・CPU/OS等環境依存のマシン語ファイルをつくり実行する ・その他のいわゆるコンパイル言語・・・あらかじめ中間コードファイルにコンパイルしておき、その中間コードをインタープリトして実行する ・いわゆるインタープリター言語・・・実行の最初に中間コードにコンパイルしそれをインタープリトして実行する 運営上の問題 ・いわゆるコンパイル言語・・・ソースファイルとオブジェクトファイルの関連づけをきちんと管理する必要がある。管理しないとエラー発生時にどのソースファイルを調べればいいかわからない ・純粋なコンパイル言語・・・上記に加えて、異なる環境で動かすためには再コンパイルとテストが必要 ・いわゆるインタープリタ言語・・・何度も何度も実行される場合、コンパイルの時間が実行速度に影響する(ウェブアプリでの利用では一度できた中間コードをHTTPサーバープログラム中に保持することでコンパイルの繰り返しを防ぐ工夫がされることが多い) 特定のOS環境でのみ使える機能をつかったプログラムは、どの形式であろうが、その特定の環境でしか使えません。

その他の回答 (5)

回答No.6

No.5の方の回答と同様になりますが…… 現代の本格的な言語は速度を稼ぎやすいコンパイラ方式が多いですが、インタープリタ方式はその実装の開発に低レベル(コンピュータ寄り)の知識の必要性が小さい利点があると思います。コンパイル作業が不要で即座に実行を開始できるインタープリタ方式の利点は、コンピュータの処理能力の向上によってあまり目立たなくなってしまいました。注意しなければならないのは、インタプリタ方式ではソースコードを実行する環境へそのまま配置するので、第三者にソースコードの解析が間単に行われてしまうことでしょうか。ただしいったん中間コードにコンパイルする場合はこの限りではありません。 とはいえ、各言語での開発における利点を考えたとき、コンパイラ言語かインタプリタ言語かということそのものに起因する利点はそれほど多くなく、むしろ言語仕様やライブラリの豊富さ、普及率、動作する環境なんかの影響のほうがはるかに大きいと思います。PHPやPerlがCGI向けとして普及したのは、それらがインタープリタ方式だから、というわけではありません。 たしかに、なぜかインタプリタ言語の多くが環境依存が少なく開発できるように作られている傾向がありますが、それは別にインタプリタ方式にしたから環境依存が減ったわけではありません。どちらかの実装しか用意されていない言語が多いですが、そもそも本質的にどんなプログラミング言語の処理系もどちらの方式でも実装することが出来ます。コンパイラ言語の代表格であるC言語にすらインタプリタ実装は存在します。 まともなIDEがあればコンパイラ言語かインタプリタ言語かに関わらず自動で構文チェックしたりボタン一発で実行出来るのが普通ですし、簡単に配置も出来るでしょう。試験対策などでないのであれば、コンパイラ言語対インタプリタ言語という二元論的な捉えかたはオススメしません。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

すいません。わかりやすくするために言い過ぎました。 確かに環境に依存する書き方は、コンパイル言語およびインタプリタ言語のどの言語でも可能ですね。 こう言っておきましょう。 コンパイラ言語は、環境依存するプログラムを書く場合に使われることが多い。インタプリタ言語は、環境依存しないプログラムを書く場合に使われることが多い。 なぜなら、最近の多くのインタプリタ言語がせっかく環境依存性が低い(または低いことを目指している)のに環境依存性が高いプログラムを書いてしまったら存在意義が薄れてしまうから。 だからと言って環境依存で書いてはいけない訳ではなく、書けない訳でもないのですが。 覚えてる言語で楽に書けたら書いてしまうのが人というもので、ちょっとしたツールならperlで書くと楽だったりします。でも環境依存しまっくっているので、互換性はまったくないプログラムが出来てしまいます。 それでも言える事は、インタプリタの方が環境依存しないプログラムを書きやすいのは間違いないと思います。 >しかもBASICにいたっては方言が強すぎた。 BASICが環境依存がひどいのは時代の産物だと思います。 あのころのハードでは、コンパイラはメモリ規模や外部記憶装置(カセットテープ?)には荷が重すぎたからインタプリタしか選択肢がありませんでした。互換性を保つOSも入れる余地がなかったのでハードの差をまったく吸収できていませんでした。 それにメーカーごとに特色を出そうとして、オリジナルな文法を拡張しすぎたのがBASICだった訳ですから。 >コンパイルがらみのことを抜きにすれば言語によっては互換性は高い。 C言語の言語性は確かにそうですが、コンパイルが必要という点でだけは依存性が高いと言えます。オープンソースのコードは良いですが、ソースコード提供されていないプログラムは、やはり提供されている実行ファイルに環境依存してしまいます。それに、C言語で8ビットのマイコンから64ビットのCPUまで互換性があるプログラムを書こうと思ったら、かなり互換性に気をつけないとまず動きませんし。

  • maguro999
  • ベストアンサー率21% (59/273)
回答No.3

>[メリット]稼動するハードウェアやOSに依存しない(互換性が高い)。 依存がないと言い切るのはやめておいたほうがいいですよ。 実際にPHPではWindows側だとWin32APIを呼び出す機能とか印刷機能など OS依存の付け加えられていますし PerlだとWindows側だとファイルロック関数が使えませんし 環境依存があくまで小さいだけですね。 しかもBASICにいたっては方言が強すぎた。 >[デメリット]稼動するハードウェアやOSに依存する(互換性が低い)。 コンパイルがらみのことを抜きにすれば言語によっては互換性は高い。 C言語なんかはANSIの規格上の機能は互換は保たれている。 それ以上のことはってことになるとだめだけどそれは先のインタプリタ言語にもいえることになる。 後、Javaや.NET(名目上は/NET環境があればOSを選ばないという。実際に他のOSへの/NET環境の移植プロジェクトがある。)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

昔はコンパイラは時間がかかるので即時性がないとか言われましたが、最近のコンパイル時間は短いので、インタープリタに比べて即時性に大差はないと思います。 コンパイル言語 [メリット]実行速度が速い。 [デメリット]稼動するハードウェアやOSに依存する(互換性が低い)。 インタプリタ言語 [メリット]稼動するハードウェアやOSに依存しない(互換性が高い)。 [デメリット]実行速度が遅い。 >CGIでは、PHPやPERLなどのインタープリター言語が主流ですが、その理由とC言語などで組むのと比較して、どのような利点があるのか教えてください。 ハードとOSに依存しないのが最大のメリットだと思います。サーバがWindowsなのかLinuxなのか気にしなくて良いですし、CPUがx86系(インテル)なのかPowerPC系なのか、或いはSPARCなんてのもありますね。 コンパイル言語は、CPUとOSに依存した実行ファイルを作りますので、動くサーバに毎にコンパイルや移植(ソースコードの書き換え)が必要です。

  • maguro999
  • ベストアンサー率21% (59/273)
回答No.1

コンパイル言語 メリット ・ネイティブアプリかが作れるので速度的に有利 デメリット ・別のOSやアーキテクチャーが違うシステムで動かす場合 コンパイルのためにその環境を用意するかクロスコンパイラを用意する 必要がある インタプリタ言語 メリット ・各言語のインタプリタさえ入っていればどこでも動く デメリット ・翻訳しながら実行するのでコンパイラ言語で作ったプログラムに比べて速度面で不利 後コンパイラ言語では一応はあるけど Javaや.NET環境はネイティブコードをはくわけでない ということを >CGIでは、PHPやPERLなどのインタープリター言語が・・・・ ですが、いちいちサーバと同じOSのシステムをローカルに構築して そこでコンパイルしてサーバにアップなんてめんどくさい。 だったらサーバ上でコンパイルすればいいという人もいるけど 「本サーバでそんな無駄な負荷かけたりできるかよ。」って事です。 そういう意味ではJavaでJSPはかなり理想的かな。 後、CGIとPerlやPHPとの関係ですけど CGIモードで動かせばそれらの言語はCGIだけど Webサーバのモジュールとして動かせばCGIではない。 でPHPってCGIモードで動かすよりモジュールとして動かすことのほうが 多い気がする。

関連するQ&A

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

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

  • プログラミング言語の違いを教えてください!

    こんにちわ。 ただ今就職活動中の者です。 大学ではC++の基礎を勉強しましたが色々あるプログラミング言語の違いがよく理解できていません。 プログラミング言語はCOBOL、JAVA、C言語、visual basic、perlなど、本当に様々な言語がありますが、それらの言語について詳しく教えていただけませんでしょうか? (それぞれはどういった分野のシステムの開発に向いていて、どのような弱点があるなど)お手数ですが、よろしくお願いします!

  • プログラミング言語について。

     箇条書きにしますので、お願いします。    (1)「サーバーサイドスクリプト」と「クライアントサイドスクリプ   ト」の違いについて教えてください。     (2)インタプリタ型言語とコンパイル型言語の違いについてお願いし   ます。特にインタプリタ言語は、コンパイル型言語に比べて遅いと  いわれますが、具体的に何ゆえに遅いのでしょうか?又、何が遅い  のでしょうか?    (3)言語処理系という言葉がありますが、これはどういう意味でしょう  か?

  • C言語についてどうしてもわからない疑問

    プログラミング初心者です。 C言語を勉強中に疑問に思ったことが2つあります。 まず1つ目。 C言語以外のプログラミング言語、例えばjavaとかC#とかjsとかpythonとかrubyとかPHPとか、には開発者にとって便利なライブラリとかフレームワーク(僕にはこの2つの明確な違いがわかりません。が、どちらも「開発者が定義しなくてもよい関数やオブジェクトの集合」という認識があります)がありますよね。 そのおかげで色んな人達がプログラミングし易くなりました。 ネット(はてぶのホットエントリとか)でも「馬鹿な俺がプログラミングを勉強して〇〇を作った」といった記事をよく目にします。 でも「C言語を使って」というのは聞いたことがありません。 そもそも、C言語はそいういったライブラリやフレームワークが少ないように感じます。 検索してもrailsとかjqueryのようなフレームワーク(ライブラリ?)は見つかりません。 これが無かったらプログラムなんて作れないのでは? しかし、世間にはC言語で作られたプログラムが多いのもまた事実。 C言語ではいったいどのように開発が行われているのか教えてください。 2つ目 unixとかlinuxといったOSはC言語で書かれている聞いたことがあります。 しかし、プログラムの開発は「コードを書く→コンパイル(→デバッグ)→実行」という流れですよね。 ではOSを開発するときに、そのコードをどうやってコンパイルするのでしょうか? コンパイラはOSの上に立っているとするなら、OSがない状態でコンパイラはどこに立てばいいのか。 そこがわかりません。 誰かこの2つの疑問に答えてください。 お願いします。

  • コンピュータ言語とプログラミング言語の違い

    履歴書のようなものに自分のスキルを登録する際に、 「使用したことのあるプログラミング言語を記入してください」とあったので、 C、C++、アセンブラ、Perl、HTML、 としました。 その後、「使うことの出来るコンピュータ言語を記入してください」とありました。 この、「プログラミング言語」と「コンピュータ言語」という定義には何か違いがあるのでしょうか?また、C、C++、アセンブラは間違いないと思うのですが、残りの2つはプログラミング言語に含めてもいいのでしょうか? よろしくお願いいたします。

  • サブルーチン Perl みたいに C言語 で使うには 

    いままで数年HPを運営していたためにCGIを開発する手段として、Perl言語を使用してきました。その後、あるきっかけでC言語をするようになり、理屈上PerlとC言語が似ていました。 いままで、Perlでは開発・デバッグ等を効率よくするためサブルーチンを他のファイルにパッケージファイルとして開発していました。非常に便利でこれがC言語でも同じく使えたらいいなとつくづく思っています。 Perl言語の例 main.cgi(本体のファイル) package.pl(パッケージファイル) 本体ほファイルで実行させ、実行の途中必要なサブルーチンをパッケージファイルから呼び出します。 呼び出すには、 %渡す値=&パッケージ名::サブルーチン名; 同じようにC言語でやるときはどのようにすればいいのでしょうか?

  • CGIを作るプログラミング言語は?

    urlの最後の拡張子が cgiでできてるものを作るプログラミング言語は PerlとPHP意外にもありますか?

  • PHPやCGIやPerlやRubyやC言語・・

    はじめまして。 仕事上の関係でプログラミングを今から覚えようと思っています。 PHPやCGIやjavaやPerlやRubyやC言語などありますが、 どれをおぼえたらいいのかまったくわかりません。 ちなみに覚えてやろうと思ってることが、 ランキングサイトとサブアドを運営する為です。 この場合何を覚えたらいいのでしょうか? ちなみに初心者向けやオススメ参考書などあれば一緒に教えてください。

  • 言語?違いを教えてください。

    今webデザインを勉強しています。 HTMLの中級レベルですが、ここにきてプログラム言語で悩んでいます。 まず、 java,javaScript,php,perl,CGIの違いがわかりません。 それらを習得するにあたり、どの順番で勉強するのがいいのかもわかりません。 よければアドバイスお願いします。

    • ベストアンサー
    • PHP
  • サーバ側のプログラミング言語

    サーバ側のプログラミング言語としてどれが優勢なのでしょう。 CGI、Perl、PHP、JAVA、rubyが代表的なところのようです。 ざっくりと見た感じではPerlの方がCGIよりも良く、 更にPHPとPerlではPHPが優勢と読めました。   でも、WebでまだまだJAVAは耳にしますし、 rubyは国産で力を入れてるとか。 CGIは今後廃れていくのでしょうか。 JAVAはどうなるのでしょう。 何かご意見があればお願いします。

専門家に質問してみよう