新しい言語を勉強してます。
といってもRuby*1とD*2なんですけどね。
Rubyは流行り物だからー、と思ってやってみた。スクリプト言語は配列周りの面倒な処理を考えなくて良いのがステキですね。あと、スクリプト言語なのにコードが綺麗に書ける点もよし。
Dはかなり好みかも。RubyとJavaとCとC++のいいとこどりみたいなことはよく言われていますが、加えてGC周りをある程度制御できるのが嬉しい。本業でJavaを使っていて悩まされるのがフルGC対策なので*3。
Dはまださわりはじめたばかりですが、autoとかtypedefの挙動が気に入ってます。
autoは
if (foo) { auto File config = new File("..."); while (config.eof()) { //設定読み込み } }
とやるとifから抜けたときにはFile configが開放されるそうです。小刻みにメモリ開放ができるのでフルGCの頻度を下げれそう。
typedefは
typedef int HEIGHT typedef int WIDTH void main() { int height = 100; int width = 200; setSize(height, width); //これはエラー setSize(cast(HEIGHT)height, cast(WIDTH)width); //これはOK } void setSize(HEIGHT h, WIDTH w) { ... }
って感じで、幅と高さどっちが先だっけ?みたいなことを回避できてステキかも。書き方が冗長になるのでもう一工夫が必要ですが。
あとは契約プログラミングにも言語レベルで対応しているのでメソッド呼び出し時に事前条件、事後条件を設定できたり、単体テストも言語レベルで対応していたりと、シンプル言語+巨大なライブラリ、という最近のパターンではなく、パワフルな言語仕様になっています。
とりあえずもう少し触ってみます(実はCommon Lispも少しいじってみたい今日この頃)。
*1:http://www.ruby-lang.org/ja/
*2:http://www.kmonos.net/alang/d/index.html
*3:リアルタイムシステムではGCを制御する方法が無いのは致命的な欠点だと思うのですが何でJavaが流行ったんだろう。学習曲線的な有利さだけか?