A3サイズの升目帖(旧)

ゲーム制作やプログラミングに関する雑記

【D言語】rdmdって便利

D言語のロゴマーク

D言語ってコンパイル言語なんでしょ?って思ってたんだが、スクリプト言語的な 使い方もできるらしい。

D言語をインストールすると付いてくる rdmd というものを使う。


rdmd

D言語コンパイル言語なので、通常は

  1. ソースコード書く
  2. dmdコンパイルする
  3. リンクする
  4. 実行する

という流れを踏まないといけないのだが、rdmd ならば(乱暴に言えば)「2.」やら「3.」やらの手順をすっ飛ばすことができる。

ソース書く → 実行する。

まさにスクリプト的。


例としてひとつ

環境を Windows と想定する。

以下のような構成をどこかお好きなフォルダ内に作り…

app.d
launch.bat

それぞれのファイルの内容をこうするじゃろ?

// app.d
import std.stdio;

void main(string[] args)
{
    writeln("Hello ", args[1], " World!");
}
// launch.bat
@echo off

cd /d %~dp0

rdmd -O -release app.d "D Language"

pause

はい、おわり。あとは launch.bat を叩くだけ。

// 出力はこのとおり。
> Hello D Language World!

コンパイルもリンクもまったく意識する必要ありません。


あらすごい

このように、rdmd を使うと、D言語をまるでスクリプト言語のように書いて実行することができる。

まあ、正確には裏でコンパイルやリンクは走っているので、初回の実行はちょっと時間はかかる。

しかし、ソースコードを変更しない限り、生成した exe はキャッシュされているので、2回目以降の実行は速い。


-O-release など、コンパイラオプションは通常の dmd と同じである。

例で示したように、main を含むソースコードさえ指定してやれば、依存関係は勝手に解決してくれる というのもグッド。複数ファイル import していても、それらをだらだら指定する必要はない。

アプリケーションへの引数は main を含むソースコードの後に指定してやればいいらしい。(例では app.d のうしろ)


使いどころとしては、筆者は個人的に「exe としてわざわざコンパイルするほどでもないけど、D言語の機能は欲しいなあ」くらいの複雑さのタスクをこなすツールの実装に使用している。

D言語の標準ライブラリ Phobos の機能を一通り使えるので、バッチファイルだけで頑張るよりはるかに強い。

D言語インストールしてたら一度試してみてはいかが?


余談1

rdmd の生成した exe は以下のフォルダに出力されているっぽい。

どこにキャッシュされているか気になる人は見てみよう。

C:\Users\(ユーザ名)\AppData\Local\Temp\.rdmd\


余談2

shebang を使えば起動用スクリプトファイルすら不要らしいですわよ…! たまげたなあ。

詳しくは公式サイトをご覧いただきたい。

dlang.org