- ベストアンサー
サーバサイドのプログラム
サーバサイドのプログラムには、よくスクリプト(PHP, Ruby, Perl)が 使われるようですが、理由はあるのでしょうか。 高級言語を使えば、レスポンスがよいと思うのですが。 教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
高級言語というと、具体的にどういうものを指しているのでしょうか。C/C++とか、そういったコンパイラ系のことでしょうか。 以前は、C/C++などで作成したプログラムをCGIとして実行するということはよくありましたよ(今でもけっこう使われていると思います)。が、サーバサードのプログラムというのは、クライアント(Webブラウザなど)からアクセスしたとき、サーバーからCGIとして起動する、というやり方で動かさなければいけません。そうなると、アクセスするたびに新しいタスクとして起動し実行するわけです。これにかかるコスト(CPUの使用量など)はバカにできません。 PHPなどはサーバー内の一つのスレッドとして実行されるため、プログラムを起動するコストもかかりません。それに最近はプログラムを内部的にコンパイルしキャッシュするなど高速化の技術も進んでいるので、コンパイラと比べてもそれほど遜色ない速度で実行されるようになってきています。 また、Web関係のプログラムというのは、非常に頻繁に修正更新されます。コンパイラ系の場合、そのたびにプログラムをビルドし、動作確認をし、そしてサーバーにアップロードし、といったことを繰り返すことになります。PHPなどのスクリプト系では、単にそのソースを修正するだけで即座に反映されます。開発効率という点では、圧倒的にこちらが上でしょう。 こうしたことを考えると、スクリプト言語を使ったほうが総合的に見てベターである、ということだろうと思います。
その他の回答 (2)
- sakusaker7
- ベストアンサー率62% (800/1280)
サーバーサイドのプログラムというのが、HTTPなどでデータをやり取りする プログラムということでいいのなら、 一つにはHTTPでのやりとりは基本的にはテキストデータのやり取りで、 クライアントにしてもサーバーにしてもプログラムそのものの処理において 文字列処理(検索とか解析とか置換とか)のウェイトは結構なものになります。 その場合、CなりC++で文字列処理を書くというのはバグの温床であることと、 どうしたってPerlを初めとしたスクリプティング言語の方がプログラムを 書くのが楽だということから広く使われたのでしょう。 ここで、必要とするパフォーマンスがでないのなら問題外ですが幸か不幸か 使い物になる性能がでることがほとんどなので主流になっていると。 サーバーサイドのJAVAはまた別の話になりますが、長くなるので割愛。 ところで#1の方の回答の >以前は、C/C++などで作成したプログラムをCGIとして実行するということはよくありましたよ(今でもけっこう使われていると思います)。 というのは初耳です。 どっかに参照できるデータはありますか? 「よくあった」というほどの数はなかったという印象なんですが。
お礼
ご回答ありがとうございます。 ・CなりC++で文字列処理を書くというのはバグの温床であること ・Perlを初めとしたスクリプティング言語の方がプログラムを 書くのが楽だということ このような点も考えられるのですね
- maguro999
- ベストアンサー率21% (59/273)
>高級言語を使えば、 PHP, Ruby, Perlは高級言語。 >>PHPなどはサーバー内の一つのスレッドとして実行されるため、 >これはスクリプト言語の特徴なのでしょうか PHPをCGIモードで動かせば >アクセスするたびに新しいタスクとして起動し実行するわけです。 この状況になります。 逆にPerlをCGIモードでなくてWebサーバのモジュールとして動作させれば >サーバー内の一つのスレッドとして実行されるため、 この状況になります。 >ソース修正をした後の動作確認はどうなるのでしょうか。 >とりあえず、アクセスを制限しておいて、テスト後開放となるのでしょうか。 普通、本サーバでこんな事しません。 開発用にテストサーバを用意してそっちで動作確認するのが常識。 元々サーバサイドのプログラムの場合、そのサーバのコンパイラまたは クロスコンパイラの環境がひつようでした。 サーバそのものにはセキュリティーの考えからコンパイラを入れておくのは あまり好ましくないので別途同じサーバマシンなどを用意する手間がありました。 JSPはその点一度実行されればコンパイルされ速度面に有利になり 開発はインタプリタと同様にやれ自分でコンパイル作業が不要で 人気があります。
お礼
ご回答ありがとうございます。 > >高級言語を使えば、 > PHP, Ruby, Perlは高級言語。 高級言語に入るんですね、コンパイラ言語=高級言語だと 思っていました。 より抽象的な表現ができる言語=高級言語ということになるのかな 実行の仕方により、一つのプロセスで実現、一つのスレッドで実現と 変えられるということですか。これは知りませんでした。 > >ソース修正をした後の動作確認はどうなるのでしょうか。 > >とりあえず、アクセスを制限しておいて、テスト後開放となるのでしょうか。 > 普通、本サーバでこんな事しません。 > 開発用にテストサーバを用意してそっちで動作確認するのが常識。 なるほどこういう形式をとるわけですね
お礼
ご回答ありがとうございます。 >高級言語というと、具体的にどういうものを指しているのでしょう >か。C/C++とか、そういったコンパイラ系のことでしょうか。 そうです。 ほぼ納得しましたがいくつか疑問があります。 >PHPなどはサーバー内の一つのスレッドとして実行されるため、 これはスクリプト言語の特徴なのでしょうか >PHPなどのスクリプト系では、単にそのソースを修正するだけで即座に反映されます ソース修正をした後の動作確認はどうなるのでしょうか。 とりあえず、アクセスを制限しておいて、テスト後開放となるのでしょうか。