構造体の実装の移行が完了しました。
ブロックベースの実装のため、メンバ変数の初期化を普通の変数宣言と同じ書式で行えます。初期値代入やコンストラクタとの兼ね合いで、仕様を変更しています。
コンストラクタ・デストラクタの名前
以前はD言語の仕様を取り入れてthis(), ~this()としていましたが、thisポインタと名前が被ってしまうため、それぞれctor(), dtor()と変更しました。名前の重複はthisポインタを特別扱いすることで回避できますが、マングリングは避ける方針のため、特別扱いは取り下げました。
初期化順序
メンバ変数の初期化は以下の順序で行われます。
- 変数宣言(struct-declare)での初期値代入
- 構造体のメンバ変数定義(var-declare)での初期値代入
- コンストラクタでの代入
メンバ変数の初期値(2)が指定されている場合、変数宣言での代入(1)は上書きされます。2はコンストラクタから呼び出されるため、コンストラクタが定義されていない場合は初期化されません。従って変数宣言で代入することを前提とした構造体には、初期値を持たせることはできません。この仕様はコンストラクタがないC言語の構造体を想定しています。