インストール
色々と方法はあるのですが、試した結果zipを展開して、適当なディレクトリに突っ込むことにしました。
% mkdir /opt/d && chown ymotongpoo /opt/d % unzip dmd.2.058.zip % mv dmd2/osx dmd2/src /opt/d
整理するとこういう状態になった。
% tree -L 1 /opt/d /opt/d ├── osx └── src
d-modeの設定
とりあえず最初はSyntax Highlightとauto-indentさえしっかりしててくれたらいいので、下記の設定。スタイルガイドを参考にして4タブ設定。
(autoload 'd-mode "d-mode" "Major mode for editing D code." t) (setq auto-mode-alist (cons '( "\\.d[i]?\\'" . d-mode ) auto-mode-alist)) (add-hook 'd-mode-hook '(lambda() (c-set-style "python") (setq c-basic-offset 4) (setq indent-tabs-mode nil)))
コードを書く
FizzBuzzはとりあえず書いたので、何かAPIを叩いてデータを取ってくるコードを書きました。今回は最新のpublicなGistを引っ張ってくるだけの簡単なお仕事。
- test.d
import std.stdio : writef; import std.net.curl : get; import std.json : parseJSON; void curlTest() { auto content = get("https://api.github.com/gists/public"); auto result = parseJSON(content); foreach (ref entry; result.array) { string user = entry.object["user"].object["login"].str; string url = entry.object["git_pull_url"].str; string date = entry.object["created_at"].str; writef("%s (by %s at %s) \n", url, user, date); } } void main() { curlTest(); }
これをコンパイル。微妙にコンパイラオプションで、リンカオプションの渡し方を勘違いしてたのでハマった。-Lはライブラリの探索ディレクトリの追加じゃなくて、リンカオプションの追加だったんですね。
% dmd test -I/opt/d/src/druntime/import -I/opt/d/src/phobos -L-L/opt/d/osx/lib -L-lcurl
これでtestを実行する。
% ./test git://gist.github.com/2403342.git (by 8ig8 at 2012-04-17T03:50:42Z) git://gist.github.com/2403340.git (by Aliced3645 at 2012-04-17T03:49:46Z) ...
とりあえず動きました。これでbuchoライブラリをD言語で実装できますね。
おまけ
ソースからビルドしようとしたらこけちゃいました。たとえばdmdのビルドの場合こんな感じ。実行したマシンはOS X 10.6.8なんですが、なぜかMacOSX10.5.sdkを見に行ってるし。
% make -f posix.mak dmd MACOSX_DEPLOYMENT_TARGET=10.3 g++ -m32 -isysroot /Developer/SDKs/MacOSX10.5.sdk idgen.c -o idgen ld: library not found for -lcrt1.o collect2: ld returned 1 exit status make: *** [idgen] Error 1
で、とりあえずposix.makでMacOSX10.6.sdkを見に行くように変更したらビルド出来たんで、バージョン判定のところがおかしいんでしょうね。もうちょっと試して直ったら本家に送ろう。