2011年8月23日火曜日

「動的言語で安全なソフトは作れないのか」

まあ、ぶっちゃけ、どの言語を使おうが、バグは出ますよね。

動的言語の代表と言えばPHPでしょう。残念ながらね。
しかしこれはバグの出やすい言語の代表格である。
暗黙のキャストが邪悪だったり、
であるにも関わらず0とFALSEを混同する組み込み関数が多数だったり。

一方、静的言語の代表格といえばJavaでしょう。これも残念ながら。
筆者の解釈では、「言語仕様側から、バグを減らす努力をした言語」。
public classを使うときは、ファイル1個に1クラスしか書けないとか、
機械的にチェックが可能な事柄で、ガチガチに締め上げた。
しかし、それこそがEclipseの様な優れたIDEを必須にしてしまった。
面倒臭すぎる。人力でリファクタリングとかあり得ません。

ただし、それでバグが減ってるかというと、それはやはり製作者依存なのです。
メソッドにHashMapを入れてたら、知らない間にパラメタを捻じ込まれてて、
忘れた頃に、別のメソッドでそのパラメタを使ってるとか。
乱暴な奴は、何の言語を使おうが、乱暴なことをやります。
#HashMapを使ったのが悪い。というツッコミは間に合ってます。
#静的言語で、動的考え方をしてるのが間違ってる。とも言える。かな。

一般論としてはどうなのだろうと検索してみたら、酷いスレ発見。

やっぱり動的言語では安全なソフトは作れない 3
http://logsoku.com/thread/hibari.2ch.net/tech/1308499587/

基本的には高尚な議論なんだけど、uy氏の逆ギレっぷりが見苦しい。
頭は良さそうなんだけど、自分より相手が下だと見るに一転挑発モード。
なんだろうなこういうの。

本題に対しての、筆者の個人的にな意見は、最初の1行目に尽きますが。

YESであり、NOである。とも言えるでしょう。

型チェックをやろうがやるまいが、それを通り抜けるバグは必ずあります。
テストが減る。というのには反論しませんが、要らなくなる訳じゃない。

そういう考え方でいえば、関数型の定義が究極なんだろうか。
あの界隈よく判りません。

ですので、「何を使っても、安全なプログラムはあり得ない」ということになる。
なにしろ、作ってるのが人間ですから。
コンピュータは人間が間違えた通りに間違えるだけ。
それがNO。

故に、「間違えない様に作ろう」=「安全に作ろう」というのは自然な流れでしょう。

努力次第でYESに近づけることは出来るでしょう。

本論は、基本的には、プログラム内部を通り抜けるデータの話に終始してますが、大規模プログラミングには、名前空間があればどうにでもなると思っています。具体的にはJavaにもC++にも有りますよね。静的言語の代表格です。#ようやくPHPにも入りましたが。バックスラッシュって何なのよ。