- ベストアンサー
プログラミング言語について。
箇条書きにしますので、お願いします。 (1)「サーバーサイドスクリプト」と「クライアントサイドスクリプ ト」の違いについて教えてください。 (2)インタプリタ型言語とコンパイル型言語の違いについてお願いし ます。特にインタプリタ言語は、コンパイル型言語に比べて遅いと いわれますが、具体的に何ゆえに遅いのでしょうか?又、何が遅い のでしょうか? (3)言語処理系という言葉がありますが、これはどういう意味でしょう か?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>(1)「サーバーサイドスクリプト」と「クライアントサイドスクリプト」の違いについて教えてください。 元々「スクリプト」は、OSの端末上で実行される「複数の命令を順次実行させる為、OSのコマンドを単に羅列しただけのファイル」の事を指します。ファイルを端末に読み込ませると、そこに書かれた命令が逐次実行されるワケです。一種のショートカットですね。 「サーバーサイド」かどうか、と言うのは今、サーバーOSに使われているUNIX系のOSの概念には元々無くって(と言うのも、インターネットに限らずネットワークを介した操作環境自体が元々UNIXの使い方だったから)、Windowsの隆盛とインターネットの一般化に伴って「サーバーサイド」「クライアントサイド」と言う言い方が始まったんだと思います。そこから転じて、ANo.1さんが仰っているような意味になってきたんでしょうね。 >(2)インタプリタ型言語とコンパイル型言語の違いについてお願いします。特にインタプリタ言語は、コンパイル型言語に比べて遅いといわれますが、具体的に何ゆえに遅いのでしょうか?又、何が遅いのでしょうか? これは他のお方が仰ってる通りです。 ただし、最近では「インタプリタとして使えるけどコードをコンパイルする気になればコンパイル出来る」と言う言語がポピュラーになってきています。これはANo.2さんが仰ってる「バイトコードにコンパイルする」か「ネイティブコードにコンパイルする」か、に関わらず、です。もっと言っちゃえばLispと言う言語はずーっとその形式でした。インタプリタとしても使えるし、コンパイルも可能、と。 こう言う形式の言語が増えてきてはいるんです。 従って、昔のプログラミング入門書では口を酸っぱくして「インタプリタとコンパイラの違い」を強調してましたが、今後はこう言う「区分け」はあまり意味が無いモノになっていくでしょう。ある意味「インタプリタ型言語」「コンパイル型言語」なんて言い方はそのうち死語になるやもしれません(そしてなりかかってます)。 >(3)言語処理系という言葉がありますが、これはどういう意味でしょか? 慣用的には次の意味です。 例えばC++言語のように「公式規格」があったとして(有名なのがアメリカ規格協会=ANSI、日本で言うJISみたいなもの)、この言語自体はMicrosoftが策定したモノではありませんので、当然、MicrosoftはC++言語を作れますが、同業他社もC言語を製造/販売出来るワケです。 有名どころでは、例えば Microsoft Visual C++ Borland C++ GNU C++ Intel C++ なんかがあって、基本的にこれら全てのC++言語は「ANSI準拠」であって、Visual C++上で書いたソースコードをBorland C++上でコンパイルする事が出来て、問題なく動かないといけません(と言うか、その為にANSIと言う「標準規格」があるワケです)。 ただし、「コンパイルされるソースコードレベルで互換性がある」だけで、各々のコンパイラが内部でどう動いてるのか?と言うのは原則提供元によって違うワケで、「コンパイルされたコードがどのくらいの速さで実行されるのか?」と言うのも違い、また、「どうやって速い実行コードを作るコンパイラにするのか?」と言うのは各提供元の企業秘密だったりします(GNUは違いますが)。 同様に、「規格書に従うように作ってる」筈なんですけれども、たまに「同じようにコンパイルされない」事もあったりします(大体バグでしょうけど)。 いずれにせよ、この上に挙げた4つの「ANSI規格に従ってる(筈の)それぞれ互換性のあるC++コンパイラ」をそれぞれ「処理系」と呼んだりします。例えばMicrosoftの処理系、とかBorlandの処理系、とかですね。 また、Microsoftの処理系で上手く動いたのに、Borlandの処理系で動かない場合、(××と言う機能は△△の)「処理系依存」とか言う言い回しもしますね。 なお、「処理系」の同義語に「実装」と言う言い方もあります。
その他の回答 (2)
>インタプリタ型言語とコンパイル型言語だけ。 インタプリタは、その場で一行ずつ読んで、マシン語に変換して、実行します。 コンパイルは、一度コンパイラーで、マシン語にしたソフトを、実行するので、コンパイルの分、速いんですよ。 アメリカ人に説明する際、一行一行訳すのが、インタプリタ。 すでに訳した物を渡すのが、コンパイル。 スピードに違いがあって、当たり前。 その中間で、JAVAとか.NET(?)とかは、その中間コードを作って、実行環境で、実行するので、純粋なコンパイル型よりは、遅いけど、インタプリタよりは、速い。 なに人に渡すかは分からないけど、専門の翻訳家がすでにいて、その専門家に分かりやすい言語で渡す。 そこから、どのOSにも対応できるように、訳して渡す。 実行環境さえあれば、どのOS上でも動くのがうりですねー。
- shred
- ベストアンサー率35% (25/70)
(1) 前者 サーバ上で実行される PHPなど 後者 クライアント上で実行される javascriptなど (2) 前者 通訳する 後者 翻訳する 外人の通訳を想像すればすぐわかるが必ずタイムラグが生じる (3) その言語を実行するに至るまでに関与するものすべて コンパイラ、OS、CPUもろもろ