2009-11-23[月] ひさびさにD言語

ひさびさにD言語を触ってみました。
サイトぶらぶら見るだけならたまにしてましたが、 実際にコンパイラ更新したりIDE入れたりは数ヶ月ぶり、 サンプル数行とはいえコード弄るのは数年ぶりかも.

まあ、Goの影響です:-)
これからだろうGoに比べれば、 D2の文法やライブラリの整い具合は結構いい感じに思えてしまうのですよ。

ただ問題はデバッガ.
IDEもいいのあればそれに越したこと無いけど、 デバッガ無視で評できるものでもなく.
一応 dmd 専用の Ddbg がでてて、 大昔(5年前)にくらべりゃそこそこ改善されてる模様。
で、どの程度のものか、と.

とりあえず dmd2 2.036, dmd1 1.051 入れて、

  • Eclipce3.4+Descent
  • Code::Blocks ( nightybuild)
  • 楽したいのでやっぱりIDE入れて ちょろっと試そうとして...案の定シクハクする羽目に.

Ddbg

Ddbgは本家のダウンロードページにある v.0.11.3beta をダウンロード。
※ トップページにリンクされているv.0.11.3betaは 実はv.0.11.2betaという罠.

普段はIDEから使うだろうで、その場合は大丈夫でしょうが、 一応、dmdコンパイル・デバッグ時に pathの通ってるフォルダに インストールしておくのが無難な気はします. (というか以下、パス通した状態で設定してるので、下記ideの設定で パス抜けの可能性もなくはなく)

Eclipse+Descent

Eclipse+DescentでのD環境は、Descent本家とかこのへんとか見ながら設定.

試してみると、EclipseのC環境(cdt)とかに比べるといかにも無理やり間借してる感じで、ちょっとわかりにくいです。

IDE本来の設定項目名の場所でなく、 外部ツールとしてdmdリビルドツールを登録、という形になるので、 ソース依存関係や構成の管理はIDE側じゃなく、 登録するツール任せ。 なので、RebuildやBud等のD専用リビルドツール使うのがベターってことのよう (面倒でよければ自分でmakeなりバッチなり書くのでも).

デバッグ実行は、生成されたexeファイルの右クリックメニュー の'デバッグ'の中のAplication1とかを実行. (他のメニューのデバッグを押してはだまされたり:)

eclipse自体に慣れていないので、適切かどうかは別として なんとかデバッグ実行できるようにはなりました。

で、一応、

  • ソースレベルデバッグ(step in,out,over)
  • 変数表示、
  • コールスタック表示、
  • プログラムのブレークポイント機能

ができてそこそこな感じなんですが、 ウォッチ・ポイント(データのブレークポイント)が貼れない... Ddbgのコマンド一覧見ても(またソースでgdbのwatchコマンド探しても) 無かったので、Ddbg自体が未対応のようなんでしょうね。

他にも変数表示がおかしい場合があるとかバグもちょこちょこあるようで、 あともう少しなんとかなってほしい感じなんですが... Ddbgの開発一年以上とまってるぽいのがなんとも残念.

Code::blocks

Code::Blocksはdmd対応なんで、 最初からほとんどそろってますが、dmd実行パスとかデバッガ(ddbg)の 設定等、やり直してあげる必要が何箇所かあります。

(以下、dmd自体はデフォルトのc\dmdかc:\dmd2にインストールされているものとして)

  • setting→compiler & debugger... →select compiler
    で Digital Mars D Compiler を選び
  • Toolchain executables →program files で、
    • コンパイラのディレクトリを修正.
      dmd.exe等を含むbin\フォルダのあるフォルダなので、
      C:\dmd2\windows や C:\dmd\windows
      のようにwindows/フォルダ付に.
    • デバッガの設定を Ddbg_gdb.bat に変更する.
    • 他はたぶんそのままでok.
      (上からdmd.exe,dmd.exe,dmd.exe,lib.exe,ddbg_gdb.bat,rcc.exe,make.exe)
  • Additional Paths に、Ddbg.exe,ddbg_gdb.batのあるフォルダを追加.
    (既存のパスの通ったフォルダにいれてるなら、たぶん不要)
    • 同様に dmc環境 c:\dm\bin も追加しとく(ほうが何かとよいかも?)
  • Linker settings のライブラリディレクトリを修正.
    bin同様現状windows/が抜けているで、c:\dmd(2)\windows\lib のように.

  • また、使用したnightybuildの場合、D1,D2用2つのパス設定が かかれてましたが、 実際に登録したdmd.exeに対応する版のみにして使わないほうは削除.
  • , Search directories にあるimportディレクトリを確認修正.
    これも、nightybuildの場合、D1,D2用2つの設定が入っているかもだけど、
  • 実際に登録したdmd.exeに対応する版のみにして使わないほうは削除. (2つあると、import関係おかしくなることがあった)
  • Compiler and debugger settings をokで終了.
  • メニューのProject → Build Option → Linker settings → Other linker options
    -g を追記. これがないとDdbgでデバッグできない。
    (exeのリンクとしてdmd.exeを指定してあるが、あくまでリンカー扱いなので、
  • Compiler settings側のオプション指定は反映されない ...)

さすがに対応ソフトなので、素直に操作できます。
出来ることは、Descentと同様の一通り+α(現在行まで実行とか)て感じ。

最初、変数表示が watch(監視)ウィンドウで行えることに気づけずてっきりないのかと はやとちりしてましたが、あったので安心. (IDE ドッキングできていい感じ). (ただ watchpoint=データ・ブレークポイントは, ブレークポイント・ウィンドウで 設定できますが、Dではやっぱり機能していませんでした)

 

winでD2したかったので dmd + ddbg でしましたが、 D1でよければ gdc + gdb(gdc対応?版) という選択もあり... 面倒なんで手がまわりませんが。 ldc とか D.net とかもあって、どんな感じになってきてるのでしょうね. D.netは、以前試したときは、 D.netコンパイラ自身のコンパイルはすんなりすんだけど、 .netの事情わかってないので (単純すぐにvs環境で使えるわけじゃないようで) リッチなのかプアなのかよくわからず.