kahoの日記: D言語 on Tiger
以前から存在は知っていたがこのストーリーで再び興味を持ったDについて調べてみた.
私が初めて知ったときにはWindowsとLinuxの処理系しかなく,Linuxへのインストールも面倒で,gccの動作がおかしくなると通常の仕事もままならなくなるので避けていた.しかし今でははるかに気楽に導入できるようになっていたので試してみることにした.
GCの導入とコンパイル速度がC++より速いことが大変魅力的だったからだ.
Macへのインストールはgdcmacからダウンロードしたパッケージを使用した.
当初MacBookでは動いたもののPMG5では動かなかったのでアーキテクチャの問題かと思ったのだが,XCodeのバージョンを最新のものに変更したところどちらでも動作した.
私の作業では,大きなファイルから数十から数百の文字列のうちの一つを共有する数万のインスタンスを扱うということがあるのだが,C++だとconst char*で持つと元の辞書の管理が面倒だったりstringだとメモリを食いすぎたり動作が遅くなったりするのが嫌だった.char*型をキーにするmapやsetはいちいち自分で定義しないといけないし,正規表現も標準ライブラリに含まれていないしで,本当は使いたくない場面も多かった.
まだ理解は進んでいないが,std.fileにreadlineがあったらいいのに(Javaのようにstd.streamの呼び出しが必要)とかstd.randomがシングルスレッド専用なのは残念とか思わないではないなど,ライブラリの充実度という点ではかゆいところに手が届いていないが,Qt風のsignal/slotが導入されていたりして,ひょっとしたらこれまでC++でやっていた作業を移行できるかもしれない.
----簡単に使ってみた後の追記
Fedoraにもインストールしたりしていろいろいじってみている最中。
gdcmacでotool -Lで表示させるとlibSystemをリンクしていたが、D用のライブラリは表示されなかった。
これはスタティックにlibgphobosとlibgcc_ehをリンクするため。ファイルサイズが大きくなりがちだが200KBくらい今どき言ってもしかたがない。
Linuxの方はGCのためもあってPthreadをリンクしていたりするのだが、Tiger上でのGCはそれほど効率が良くないかもしれない。ちゃんと世代別GCになっているか確認してみよう。
今の所なんとかしたいと思う部分は配列のソートがプロパティになっているためいろいろな条件のソートをしたい場合の比較方法の変更が分からないのと、フォーマットした文字列の作成方法(snprintfに相当)だ。きっとあるはずだと思うのだが。
またstd.regexpをインポートしていると文字列に対するメソッドの多くが曖昧だとエラーになるのは閉口する。これはインスタンスに対するメソッドは第一引数にとることと同じ(インスタンスメソッドはシンタックスシュガーに過ぎない)という仕様による。
ここまでの感想としては結構気に入ってきたのでもっと使ってみようかというところ。ただrandomやRegExpクラスなどにも見られる並列処理に対する配慮のなさは後々問題になりそうだ。
---更に追記
・フォーマットか文字列はstd.formatterを使うようだがNSStringに比べて面倒にも思う.
・std.string.soudtexなどを標準ライブラリに入れるのなど,日本人には思いつかないなあと思わせる点もちらほら.
・std.gc.disable/enableはGCの思想から外れる気もするが面白い.
・std.intrinsicは最適化されたら配列解析にとても強力.
・次のバージョンではリフレクションを入れて欲しい.現状でどこまでできるか調べたいところ.
などなど,だんだん好きになってきている(笑)
D言語 on Tiger More ログイン