読者です 読者をやめる 読者になる 読者になる

AS2

http://d.hatena.ne.jp/Nabetani/20050810#p2

var b:Number=true;

なんて間違いを犯す人間が本当にいるのかどうか、大変気になった。AS2の設計者は、どういう意図だったんだろう。関数の引数にも型指定を付けられれば、annotationとしての意味はあるだろうけど、それも(MTASCでは)無理だったし…
スクリプト言語と型の話で必ず出てくるのが「型指定できるオプションが欲しい」という意見です。昔から、「型検査を実装する手間を考えると、良い取引ではない」とは思っていましたが、言語の意味を変えずに型指定をできるようにしても、直感的でない動作をするようになってしまうだけなんだなーと感じました。

RubyやActionScript2などの言語は「メソッドがあれば、メソッド呼び出しできる(1)」という意味を持っていますが、C++Javaなどの言語では「あるクラスを継承していれば、そのクラスとして扱うことができ、そのクラスのメソッドを呼び出すことができる(2)」という意味を持っています*1。オプショナルな型検査を入れるとすると、実装の手間から(2)の意味でのプログラムの検査を行うことになるのがほとんどだと思いますが、ランタイムには(1)の意味で実行されることになり、直感的でない動作をしてしまう。その齟齬を嫌って、ランタイムでも(2)の型検査を行うようにすれば、「あんなに便利だったRuby(AS2)が使えない言語になってしまった」と言われてしまう。あるいは、苦労して実装した型検査オプションはまったく使われなくなる。

簡単にはいかないものです。

*1:正確でない書き方だと思いますが、うまい表現がみつからない