Javaは潜在的に問題をはらんでいる?
特に言うべきことでもないのですが、気になったのでちょっとだけ。揚げ足取りだと思う人がいたら指摘をお願いします。
Rubyを仕事に使うべし! Part1 なぜ仕事で使うとうれしいのか
JavaにおいてもRubyにおいても,ファイナライザは強力な道具であり使うべきときに使えばプログラムを堅牢にします。しかし,たいていは使うべきでなく,特に初心者は使うべきではありません。にもかかわらず,簡単にファイナライザを定義できるJavaの仕組みは潜在的に問題をはらんでいます。
というのを見て思ったこと。
Javaでは単にObjectクラスのfinalizeメソッドをオーバーライドすればファイナライザを定義できてしまいます。
とすれば、equalsやhashCodeだって「簡単にequalsやhashCodeを定義できる」という意味で問題を孕んでいるし、
Pythonなんかは__add__などで演算子を簡単に上書きしてしまえるので潜在的に問題を孕んでいるし、
もっと言えばC/C++なんかは「ポインタをつかって簡単に好きなアドレスのメモリを書き換えてしまえる」という意味で潜在的に問題を孕んでいるし、
簡単に初心者がメソッドを上書きできるRubyだって潜在的に問題を孕んでいる、ましてや仕様を勘違いして書くことができるメタプログラミングの仕組みは潜在的に問題を孕んでいる。
なんてことにはならないのかなぁ。
Javaのファイナライザはその特性を勘違いして使うと危険なものです
って、勘違いすればどの言語だって一緒のことではないかな。
ファイナライザが動かないことがありえる、ということを知らないでプログラミングするのと、equalsが書き換えることができて、それが他の箇所にも影響を与える、ということを知らないでプログラミングするのはそんなに変わらない気がするので。
「言語の仕組みが潜在的に問題をはらんでいる」なんて言葉はちょっと悲しくなる言葉です。
あー、違うなぁ。
自分がこう思ったのはこの記事が典型的な「Javaだと〜だけどRubyなら〜」という記事だからかな。
Rubyを使うとこんなに嬉しいよ、Javaだと嬉しくないでしょ、って比較だからか。
はっ、もしかしてRubyってどんなに勘違いして使っても安全な言語なの!?
……違うよね?
恥ずかしながら適切と思われるところにとばしてみました。
あ、とんでなさそう。まぁ、いいか。
http://idm.s9.xrea.com/ratio/2006/10/Monthly.html#entry000524
参考のこと。