// * D

#contents

* auto 

- 変数宣言で使うとスコープアウトでデストラクタが呼ばれる
- クラス宣言で使うとautoでしか宣言できなくできる

* Cと文字列

 import std.string;
 
 char[] s;
 toStringz(s);

\0で終わる char *を返す。~
旧 toCharz。

* 配列

** .sizeと.length

- .length 配列の長さ
- .size 使用バイト数(よく見たら非推奨だった)~
.sizeof~
動的配列だと .sizeof は参照なので固定の値

ハマった・・・

** 初期化子

staticな変数でないと使えない

** スライス

中の値は元の配列の参照。

* 正規表現

** マッチした位置の取得

	RegExp re = new RegExp(`[0-9]+`,null);
	char src[] = "2005/04/23";
	
	for (bit isFirst=true; ; isFirst=false) {
		int result = isFirst ? re.test(src) : re.test();
		if (!result) break;
	
		int start = re.pmatch[0].rm_so;
		int end = re.pmatch[0].rm_eo;
	
		printf("%s: %d - %d\n", toStringz(src[start..end]), start, end);
	}

publicではないpmatchを使う違法くさいコード。

* 整数除算

負の数を正の数で割ると怪しい。(v0.121)

* 静的メソッドとファイル名

v0.122

 // Foo.d
 class Foo
 {
   static void method() {};
 }

 // bar.d
 class Bar
 {
   static void method() {};
 }

 import Foo;
 import bar;
 // エラー
 // Fooをクラス名としてみてない
 Foo.method();
 // 成功
 Bar.method();

ファイル名とクラス名は一致させるなってことですか?

* import

 // A.d
 private import C;

 // B.d
 public import C;

- AをインポートしてもCは使えない
- BをインポートするとCも使える
-- デフォルトはこっち

* stdin と readLine と ReadException

v0.122

	while (!stdin.eof()) {
		char c;
		stdin.read(c);
		text ~= c;
	}

上のようなコードで標準入力からchar[]に読み込もうとすると ReadException が投げられる。~
eof()が機能していない。~
.seekable が false だと eof()が機能しないため。~
stdin のところが Fileのインスタンスだったりすると .seekable が true なのですんなり動く。~
readLine()がstdinでも普通に動くのは、このメソッドの中は ReadException を catchするようになっているから。~

結論、stdin と Streamは同じようには扱えない。

	try {
		while (!stdin.eof()) {
			char c;
			stdin.read(c);
			text ~= c;
		}
	} catch (ReadException e) {
		if (!stdin.eof()) throw e;
	}

readLine() 式の解決法。~
例外が飛ぶ頃には EOF に達したというフラグが立っている。~
Streamもこれで扱えるので一応同じ扱いはできますが・・・なんかねぇ。~

* Linuxでdmd

 unzip dmd.zip dmc.zip
 sudo mv dmd dm /usr/local/
 cd /usr/local/dmd/bin/
 chmod +x dmd dumpobj obj2asm
 sudo mv dmd dumpobj obj2asm /usr/local/bin/
 sudo mv ../lib/libphobos.a /usr/lib/
 # dmd.conf 編集
 sudo mv dmd.conf /etc/

dmd.conf

 [Environment]
 
 DFLAGS=-I/usr/local/dmd/src/phobos


* yaneSDK4D

- -dをつけないとキャストで怒られる
- floatをintに変換できないといって怒られる
-- y4d_draw/drawcontext.d
-- y4d_draw/fontrepository.d
-- y4d_draw/scenariodraw.d
-- など
- key in aaray を bitに変換できなくなったらしい
-- (key in aaray) != null で
- uintで-1はキャストしないと怒られる
- makefileよりMakefile.yaneSDK4D.linux
-- dmdのところを書き換え
-- lib〜.a を .libに
-- .o は .objに
-- debugをreleaseに
- .size は .sizeofに

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS