W.I.S. Laboratory
menu-bar

Crystal


Crystalでダックタイピングしてみる

Crystalは静的型付け言語だが、構文が動的型付け言語のRubyそっくりなことで有名だ。
ダックタイピングという手法は、実行時に型を決めていく動的型付け言語に得意な分野で、コンパイル時に型が決まる静的型付け言語には苦手な分野だ。
「どんな型でも引数として受け入れるよ!」という関数は、普通に考えてコンパイル型言語では作れそうにない。
今のC++だと関数テンプレートを使えば実現できるのだが、テンプレートが無かった時代はマクロでやりくりして実現していた。

Crystalは静的型付け言語なので当然コンパイル時に型が決まるのだが、「Rubyライクに記述できる静的型付け言語」をとことん目指した言語だ。
試しにRubyコードを書いてコンパイルしてみたら、あっさり動いた。(Crystal 1.5.0上)
これは単にマクロ的に展開しているのか、それとも内部でそれぞれの型に対応した関数を型の数だけ生成しているのか・・いったいどんな魔法を使っているんだと言いたくなるようなスマートさだ。
ほかのコンパイル型言語で、こんなに簡単にダックタイピングが書けるのは、オブジェクトシステム部が動的型付けライクに振る舞ってくれるObjective-Cくらいしか思いつかない。
まさかRubyコードのままで本当に動くとは・・。


[ 戻る ]
saluteweb