言語雑談会2009
あけましておめでとうございます!今年も言語雑談会に参加してきました。
id:kmizushimaさん、ありがとうございます。
備忘録はtwitterが用を為してしまってますので、ここにはid:shinichiro_hさんのスライドに対する「それAdaでできるよ」特集でいきたいと思います。
メンバ変数があったり無かったり
http://shinh.skr.jp/dat_dir/memori/005.html
type RenderStyle (hasRareData : Boolean) is record width, height : Integer; case hasRareData is when True => -- RareCSSDataの中身を展開 when False => null; end case; end record;
Pascalのバリアントレコードは構造体のサイズは最大caseになりますが、Adaのバリアントレコードは実際に必要なサイズが確保されます。その代わりhasRareDataは初期化以降変更不可です。Pascalは後から変更できました。
可変長構造体
http://shinh.skr.jp/dat_dir/memori/008.html
type TokenSym (len : Integer) is record tok : Integer; str : String (1 .. len); end record;
複数持てます。後続のメンバの位置はlenを使って実行時に計算されます。
ビット幅がバイト境界に収まらない整数
http://shinh.skr.jp/dat_dir/memori/010.html
type T is range 0 .. 127; type A is array (Positive range <>) of T; for A'Component_Size use 7;
Adaのメモリサイズの単位はビット。
できないこと
http://shinh.skr.jp/dat_dir/memori/007.html カスタムアトリビュート……ない。
http://shinh.skr.jp/dat_dir/memori/009.html サイズを後から変える……先のhasRareDataやlenは書き換え不可。
http://shinh.skr.jp/dat_dir/memori/011.html 他のメモリ空間…… pragma Shared_Passiveの裏にある実装を入れ替えたらいける?
goadaが欲しいのはまさにその通りだなあと思います。accessを^と書けるだけでもだいぶ違うはず……。
そのほか
D言語の新inoutは全言語が追従するべき。