愚痴っぽい話

Webアプリケーションセキュリティフォーラム - Journal InTime(2007-07-05)の資料をぼけーと眺めていて気づいたんだけど、Duck Typingの項の説明に「アドホックな多態」っていうのがあるんだけど、これってやばくないかなぁ。これを英語にすると「ad-hoc polymorphism」にでもなるんだと思うんだけど、普通「ad-hoc polymorphism」っていうとC++とかJavaとかのオーバーローディングみたいなことを指す。まあ、多態っていうと「sub-typing polymorphism」のことを指すというのが、この界隈のコンセンサスみたいなのであんまり気にしなくても良いのかもしれないけど、そのうちADTとかOOPLみたいな混乱を招きそうだなぁ、と思った。

あとRubyは型無し(Untyped)な言語で良いような気がする。専門家の間でも議論が発散しがちな話題ということなので関わらない方が良いとは思うんだけど、とりあえずRubyに関してだけ言えば、動的な型付けと言ってる人が意図してる概念は安全さ(safety)で十分じゃない?(説明:型推論と型検査、静的な型つけと動的な型つけ、強い型つけと弱い型つけ - sumiiの日記)えと、この図(Re: type safety)がわかりやすいと思う。

			SAFETY 
		   YES             NO 
	       *---------------------------------------------
        YES    |   ML (good)      C/C++ (insidious
	       |		  because it pretends 
	       |	          to help programmers 
    TYPED      |		  and doesn't)
	       |
	       |
	NO     |   Scheme (okay,	Assembly (necessary)
	       |   but needs a soft 
		   typer)

あ、ランタイムに型情報を参照できる、っていう機能を指している可能性もあるな、と気づいた。けど、それはリフレクションだと思う。

そうすると「動的な言語」というのはevalのある言語・クラスの定義が実行時に解釈される言語ということになるんだけど、これについては良いと思うし、そういう風に定義した方が良いと思う。「動的な言語」って言ったときに、型の話じゃなくて意味の話に統一してしまえれば楽だと思う。リフレクションもここに入れてしまって良いんじゃないかな。

まあ他にはDuck TypingっていうのはTypingってあるけど、typeの話じゃなくてsemanticsの話じゃないのかな、とか(Duck Typingは大規模プロジェクトでも大丈夫か? - rubyco(るびこ)の日記)。