静的 vs 動的

面白いページを見つけた。


RubyについてJavaプログラマが知るべき10の事柄
http://d.hatena.ne.jp/brazil/20050816/1124136877


その中で、次のような記述がある。

長い間私は、頑固な静的な型付け支持者でした。Cを使っていた頃に、身をもって教訓を得ていきました。たくさんのシステムが、ばかげた型エラーのせいで本稼動中にクラッシュしました。 […]

4年前に、XP(Extreme Programming)に関わりました。[…]今では、開発をバックアップする包括的な単体テスト一式がないプロジェクトは想像できません。

[…]

2年程前に、私はあることに気が付きました。それは、私がどんどん安全のために存在する型付けの機構を当てにしなくなっていたことです。単体テストが型エラーの発生を防いでいてくれていたためです。[…]

そしてPythonでアプリケーションをいくつか書き、続いてRubyでも書いてみました。型に関する問題が全く発生しないことがわかったときも、全然驚きませんでしたよ。

静的な言語のメリットとしては、パフォーマンスと型の安全性の2つが大きいと思うのだが、パフォーマンスは良いとして、安全性に関しては、色々考える価値がある。


型がおかしくて落ちるというのは、全てのパス(処理)を一度スルーさせれば保障される可能性はあるが、オブジェクトの状態が違った場合、別の型のオブジェクトやNullなオブジェクトが来るという場合も考えられるので、単体テストで全てOKかと言うと、疑問の余地が残る。しかし、私の知識不足もあるので、単体テストで問題なくなるのかもしれないが、正直良く分からない。


あと、例えば、Pythonでは、暗黙の型変換は、数値型のみにしか起こらないという記述を読んだ記憶があるので、そこさえ気をつけておけば、あとは処理に応じて明示的な型を想定しておけば良いと思うのだが、どういうときに型に関する問題が起きるのかのパターンがいまいち把握しきれていないので、今後の研究課題である。


しかし、私は最近、動的言語大好き人間なので、静的言語のメリットが分からない。と言うより、恐らく、動的言語のデメリットを考えた方が良いと思うのだが、それはPythonを仕事で使うにつれて見えていくであろうと思われる。