D言語でCGI / gdcバグ情報


ここでは、freebsdクロスコンパイラのバグとその対策方法を紹介します。

RegExp?のグループではない文字列をグループとして扱おうとするとエラーが発生する。

  • [\s]と書くとエラーになります。\sと書いてください。
  • [^\s]と書くとエラーになります。[^ \t\r\n]*1と書いてください。

メソッドに関数の戻り値を渡すと死ぬときがある。

  • オブジェクトのメソッドに関数の返り値を直接渡すと死ぬときがあります。
死んだ例)
HTMLTemplate tmpl = new HTMLTemplate(TEMPLATE_FILE);
tmpl.addVar("MessageBody", GetMessage());   // GetMessage() から返ってくると、その先で死亡
修正例)
HTMLTemplate tmpl = new HTMLTemplate(TEMPLATE_FILE);
char[] mes = GetMessage();
tmpl.addVar("MessageBody", mes);

dmd -Ihoge ,,, とか、

  • -I 指定でやってると、Windowsだと平気だけど、gdc だとオブジェクトファイルのリンクで失敗しやすい。

data ~= data2

オブジェクトの配列に配列を追加する場合に、~=演算子を使うと死ぬ。

data = data ~ data2;

コメント


*MenuBar

人気の10件

  • counter: 2236
  • today: 2
  • yesterday: 0
  • online: 1


*1 もしくはstd.string.whitespace