2010年8月6日金曜日

PHP

  • http://www.bitstorm.org/edwin/en/php/
  • 私はしばしばPHPを触る。他の言語と同じくらいにはということだけど。
  • PHPという言語は別にそんなに嫌いではない。お世辞にも愛好者とはいえない。
  • だが、組織や、個人単位でなんかやたらと声が大きい人間が多く説得しづらいのが嫌いだ。しばし彼らはPHPがJavaで書くより実行速度が速いといったレベルの妄言を口にする。
  • Javaの実行速度はメモリが十分ある実行環境で、かつメモリの確保開放が頻繁に行われる環境(ウェブアプリケーションのような状況)においては、高性能なGCを搭載している関係からC++に比肩する速度を出す。
  • (つまりメモリを馬鹿ほど確保してプロセスを肥大させしばらくしたら開放するという無理やりなやり方で効率化するわけなのであまりほめられたやり方ではなくそれだけやってせいぜいトントンの速度なんだろなあ)
  • つまり彼らのいうにはPHPはC++より速いのだ。ぜひPHPでPS3のゲームを作成してもらいたいものだ。PHPの開発者は数が多そうだからたくさんのゲームが生産されることだろう。
  • ではJavaではどうか。PS3のゲームはともかく、リアルタイムプログラムをアプレットで構築することは昔から行われている、Androidアプリケーションはjvm上で動作する。はっきりいって快適ではないが、実用的な速度はでている。OKゲームプログラムを書くには、やはりC++かアセンブリ、シェーダ言語を覚えたほうがいい。あとはPHPか。
  • 反論があれば彼らは、押し黙る。押し黙ったのちそれしか我々には開発できない、他のすべてのプログラムはPHPより高度で高コストであり人員が用意できないということを口にする。ほんとうだろうか?
  • PHPがウェブアプリの実行において速い云々の、実際は上の記事にあるようりmemcachedやAPCなどのキャッシュ機構が速いというだけのことだ。 そしてそれらはCのバイナリであり、キャッシュが呼び出されてる間は、寸毫もPHPは関与しない。そしてキャッシュでは一部の頻繁に更新される画面を構築 するニーズを満たすことはできないのだ。
  • memcachedをサーバで動作させるのには、memcached(デーモン)をインストールして、libmemcached(クライアントライブラリ)をアクセスする環境すべてにインストールして、PHPの場合はPECL:memcacheかPECL:memcachedをインストールしなくてはいけない。
  • そしてその楽しいゲームをプレイするのはたいていの場合声の大きなPHP開発者ではなく運用の人間だったりする。環境の構築にいくらかかる、何人かかるみたいなことを、曖昧にするPHP開発者は(身の回り)に多い。高額なサーバー費用をかけてほとんど破綻してるようなモノもある。
  • Javaではどうかって? 実はrpmからJavaをインストールして、サーブレットを使いたければJettyフォルダをコピーしてサーバにあげてApacheで標準に入っているajp13モジュールの設定をすればそれで済む。ライブラリはアプリケーションの中で追加できる。mavenでも用いれば一般のユーザー(ユーザーレベルの開発者や運用管理の人々)はライブラリの存在を意識する必要すらない。メモリキャッシュ、セッションプールといったものは簡単に用意できる。
  • 悪いて点を言えば、すべてのJavaで組まれたシステムがそんなに効率的に構築運用されてるかというとアホみたいに金ををとって知識不足でロクなものが作られなかったりで、別にそれはJavaだけの問題ではない。
  • まとめると慣れた環境がいいってことだ。
  • このあたりは、大量に環境を作るならイメージ化しておけば何の問題もないし、最近は仮想化も流行ってる。
  • まあ遅いものは遅いので工夫はいくらでもあるし、前向きにウェブアプリケーション開発を進展させてきたのは他ならぬPHPだ。使いどころ次第。PHPでつくられたサイトにはすばらしいサイトがあることも認める。Wikipediaのようにキャッシュがよくきくサイトではなんの問題もない。ではJavaでは?
  • おそらくWeb上で最大級に金を稼いでいるGoogleAdwardsはJavaで組まれてる。Oracleのインターフェースも当然Javaで組まれてる。両方とも良好なパフォーマンスが必要とされるプログラムであり、さて、他に何か例をあげる必要ばあるだろうか。
  • だから何の疑いもなくPHPしか使えないから使わないというのはやめていきたい、というだけの話で、何もPHPは悪だから排除しようなんてことはちっとも思わない。
  • どちらがいいかという比較はあまり意味がなく、どちらがよりトータルで見て成功できるかということが大切なのだろう
  • レンタルサーバーを借りれば、PHPやらPerlはインストールされているもので、それが日本での言語普及の大きな要因だろう。つまりPHPやらPerlはIT業界に多くの人々を送り込んだ、諸悪の…いや、すばらしい言語なのだ。
  • あまりにも言いっぱなしになるので、言語ベンチマークサイトへのリンク
  • http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=php&lang2=java
  • JavaはCの1/2~1/3程度の速度で動作する。コード量はCの1/3
  • PHPはJavaの1/30~1/100程度の速度で、Cに比較すると1/100~1/250程度の速度で動作する。