いやまぁバトルでもなんでもないのですが。
とりあえず、波の後ろのほうに乗っかりつつ個人的見解とか愚痴とか B-P
発端は、今ホットな
http://www.rubyist.net/~matz/20080126.html#p04
から。
- いろんなものがfalseだったりするせいで、新たな比較演算子「===」が必要
個人的にはそも「型のあいまいな言語」きらいだしなぁ…
- hashやlistがobjectが区別できない
えと…「いいもんがなきゃ作る」w
- オブジェクト指向機能が壊れている
これは…どうなんだろう?
万全とは到底言いがたいけど、PHP5ならある程度…だとは思うです。
- lambda(無名関数)がない。create_functionはlambdaじゃない
ラムダは自分が嫌いだからなぁ…
- short_open_tagsやらsafe_modeやらregister_globalsがonになってるかもしれない
論外。そもンなoptionがある時点で。
- 一貫性のない名前(str_replace,strlen,parse_strとか)
えと…うんわかるけど、これは自分も間違えそうだから微妙だなぁ(苦笑
- 引数の順番がわかりにくい(in_arrayとかstrposとか)
引数はひとつ。っつかいまどきはクラスでしょ?
- strpos('abcd','a')は0を返すが、0は偽である
だから型が曖昧なのが以下略。
- PHPで書かれたたくさんのアプリがあるがどれもHTMLとロジックが分離されてない(本当?)
え〜〜〜〜…多分事実 orz
Smartyとかみんな騒ぐけど、あれって中で「GET&POSTパラメタ取得して関数切って処理」できるよ?
- 「PHPは初心者に学びやすい」と言われる。確かにそうかもしれないが、 おかげでどれだけのSQLインジェクションやらXSS脆弱性やら、 ひどいコードが放置されていることか
言語が悪いわけじゃないにしても………ねぇ orz
- グローバル。使うんじゃないってば。
同じことをいって、某SNSで馬鹿扱いされたなぁ…(遠い目
大体「言語レベルで普通にGLOBALな変数が定義されまくってる」時点で以下略。
ま。コード内にglobalとか書いてあった時点でとりあえずそのコードの信用は数ランク下がりますな。
え? いいえぇそんなぁZendFrameworkにglobalが60数個も書いてあるだなんてげふんごふんがふん。
んと。
「初心者向け」とかいう単語基本的に嫌いで、無駄に敷居下げるから、多分えらいこっちゃなソースが増えるんだと思う。
そういう意味だと、RoRも「10分で作れるとかどうよ」とか思うですが(まつもとさん、心痛めてないかしらん?)
っちゅわけで。
でも、「初心者に簡単」を一般公開されるWebアプリケーションを開発するための言語としての利点にするのはもうやめようよ。
ど真ん中ストレートに同意。
「どの言語で書いてもおかしなコードを書く奴は書く」という指摘もあった。それは言うまでもない事実ではある。そこには反論しない。
が、本当に問題なのは、世の中には「おかしなコードを書くことを助長する言語」もあるという点だ。で、そういう言語にはおおむね「初心者にやさしい」というラベルがついている。どういうわけだか。
コレは多分「訓練されていない初心者が書くから結果的におかしなコードになるんじゃなかろうか」と推測。
別例でVBとか B-P
もうちょい細かく書くと。
本来「ある程度訓練が必要である程度の高さの敷居がある」はずのところに「初心者でも行けまっせで敷居下げた言語」が出現。
初心者が「なんとなく組めたっぽい状態にできる」程度には簡単なので普及 & 組めたっぽいからそれ以上訓練をしない。
訓練しない結果として「奇天烈なコード」とか「がら空きのセキュリティ」とかが頻出。
って流れになると思うです。
つまり「宣伝の仕方とか」? より問題なのは。
ちなみにこの点において。上述にも書いたとおり、Ruby on Railsがまったく同じ道を歩みかねないんじゃないかと思ってるです。
で、上述URIに書かれているコメントから…とりあえず角度鋭くなりそうな突っ込み。
しかし、脆弱性があるWEBアプリケーションを放置したとしても、実際にクラックされることは本当にまれだと思うんですよ。大きなサイトは別ですが。それよりもプログラミングに親しみやすいほうが教育効果も高いのではないかと思います。習うより慣れろですね。
ンなもんは個人サイトでlocalなclose環境でやってくれ。業務でやるんぢゃない。
>strpos('abcd','a')は0を返すが、0は偽である
Rubyの宣伝ですか?
んと。せめて「戻り値は原則===でチェックすべし」ときちんと叫んでないPHPサイドにも山盛りの非があるんじゃなかろうかと愚考。
そもそもプログラミング初学者に
「ライトウェイト言語は簡単だから、これでWEBアプリを作ってみましょう」という形で
学習を勧めるのは、どの言語でも同じ風潮なわけで、
PHPの宣伝文句を批判するよりもそういう風潮そのものを批判されるべきなのでは?
んと…これは基本賛成。実際に「よりまずい」のは風潮そのもの。
ただ「たまさか、それが今一番顕著なのが」PHPなんじゃなかろうかと愚考。
御大に直突っ込み。
すくなくともRubyは「初心者に優しい」と宣伝してません。
うん「まつもとさんは」してない。
でも、特にRoRにおいて、ハイエナ予備軍が「簡単で短時間に作成できる」ことを宣伝しているのもまた事実です。
…もっとも。それを、作成者本人に「非がある」というのはあんまりにもご無体だとは思うですが。
# 後述で本人も「そのような宣伝文句は害悪だと思います」ってはっきり言ってるしなぁ…さぞや今の方向は「不本意」なんだろうと思います。合掌。
ところで。
http://www.rubyist.net/~matz/20050804.html#p05
PHPは言語じゃない。バッチ的にも使えるようになったけど、使うべきというわけじゃない。 私は(他のツールについて改めて学ぶのが面倒なので)PHPをバッチに使うこともあるけど。(Rasmus)
…マヂっすか?(いやまぁ嘘ついてるとは思ってませんが)。
血ぃ吐けそうな内容ですな orz
# まぁ所詮「ぱぁそなるほぉむぺぇぢつぅるづ」だしねぇ B-P
突っ込みに戻って。
言語は正直何だっていい。
クライアントからすれば動くものを作ってくれれば言語なんて2の次すぎる…。
本当に「動くものを作ってくれればいい」“だけ”なら、多分ここまで問題は出ないと思うですがね。
PHPってmagic_quotes_gpcがデフォルトでOnだったりするんで、Offとしない限りSQLインジェクションが起こることはまず無いです。
「クロスサイトスクリプティングは不完全」と言う人もいますし、そこら辺の真偽は不明ですが^^;
勘弁してくれ orz
ちゅぎ。
http://www.rubyist.net/~matz/20080129.html#p02
「安全なWebアプリのために言語ができること」
への突っ込み。
- 安全なメモリ管理
うんまぁ昨今の「高級言語」なら重要かと。
- パラメタ処理などの抽象化
これは…言語ぢゃなくて「ライブラリ」でやって欲しいなぁとか思う。
- テンプレートシステムによる出力
これもライブラリ。
- ORマッパーによるデータベースアクセス
んと…理念はわかるですが、ORマッピングには賛否両論あったような。
なので「別途代替手段でも可」だとは思うです。
- データフロー追跡
微妙「便利すぎて以下略」な気がしないでもないのですが、安全性という意味ではよいのではないかと。
- 落とし穴の多寡
この辺はユーザ同士の情報交換も大切かなぁと。
で、コメント突っ込み。
まずは、まつもとさんが言い訳にする「自分はただの一開発者」という認識を改めてください。
あなたは世界中の開発者が使用している「言語」の設計者です。
ましてや滅多にない日本発のものともなれば、あなたはもう開発界の神様仏様なワケです。
そんな人がPHPの欠点を書けば、影響はとてつもなく大きいのです。
言いたいことは凄くわかるし否定もできないんだけど…きっとまつもとさん的には山盛りで不本意だろうなぁと。
一人の人間を「神様扱いして持ち上げたら」、多分その人がかわいそうだとおいらは思う。
で、ちょいと横道。
http://blog.livedoor.jp/dankogai/archives/50993137.html
それは、PHPユーザーは他の言語から学んでいるのか、という点。
PHPユーザーが他の言語ユーザーよりも弱いのは、そこなのではないか。
んと…あえてちょっとだけ反論(反論か?)
「PHPユーザが」ではなくて「初心者向け言語と宣伝されている言語を使ってるユーザが」に置換したい。
多分今後も使えるフレーズだから B-p
結論として。
なんかこないだも書いたような気がするけど。基本的には初心者向けの名の下に「"愚かで穴だらけのコードを" "業務で公開した上に" "学ぼうともしない"」のが駄目なのではないかなぁと。ちなみに当然ながらand条件。たった一つfalseになれば全体がfalseになるざんす。
まぁ。お勉強って大切だよねぇって〆で。
追記。
せめて「真っ当な」PHP初心者本だれか書かないかなぁ?
正直、いま書店にある本、多分全部駄目出しになっちゃってるし orz