いいんどうしでだいバトルだ!
Ada Issues(言語仕様の改定案)の議論は、それで興行できるのじゃないかしらん。
AI05-0011-1が空っぽになっているからどうしたのかと思えば、舞台を移しAI05-0074をふたつに割っての論争中です。もっとも、進行は遅々としてますが……なにしろAda2015がターゲットですし。
http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AI05s/AI05-0074-1.TXT
http://www.ada-auth.org/cgi-bin/cvsweb.cgi/AI05s/AI05-0074-2.TXT
何を論争しているのかといいますと、genericとpackageにまつわる幾つかの問題をまとめて解決する新機能案のうち、あれがいいこれがいいやってるわけです。Adaは改定の際は整合性を互換性よりも優先してよい、ターゲットを考えたら恐ろしくて仕方が無い決まりまでありますので、俄然熱が入ります。
てきとうに書くとこんな感じ。
- Adaはgenericが名前空間ですのでclass t{ vector
m; };が書けない。 - インスタンス化を子packageに追い出してlimited withすればいけるよ派。
- 元がgenericだった場合、外で定義した子packageもgenericになってしまうのでダメ。
- generic packageが非genericな子を持てるようにしよう派。
- コンパイラの実装どーすんだよ派。
- 使う側もwithめんどくさいよ派。
- GNATのText_IOの子パッケージは別ファイルなのに自動でwithされるぞ派。
- at end with ... 派。
- package ... end with ... 派。
- GNATのText_IOの子パッケージは別ファイルなのに自動でwithされるぞ派。
- generic packageが非genericな子を持てるようにしよう派。
- 子packageを中に置く場合、子packageのprivate部が親のprivate部を見えないため、インスタンス化ができない。
-
- privateの後も公開する定義を書ければいいんじゃね?派。
- not private派。
- end private派。
- generic packageに渡す引数を後から宣言できるようにしよう派。
- package ... is limited new ...派。
- package ... is new ... with private派。
- privateの後も公開する定義を書ければいいんじゃね?派。
-
- 元がgenericだった場合、外で定義した子packageもgenericになってしまうのでダメ。
- そもそもgrowableな配列があればいいんだよ派。
- インスタンス化を子packageに追い出してlimited withすればいけるよ派。
もっとあるかも。
優勢そうなのはlimited new派とend private派です。
ちなみに私はwith private派を(心の中だけですが)応援しています。この構文ですと、提案はされてませんが、generic以外の単なる子packageでも、privateを親のprivateに固められるようにできそうですので、一番外のprivateより上は全部見えてprivateより下は全部見えないようにできます。
現在
package p is package c is private -- ここが嫌な感じ end c; private end p;
妄想
package p is package c is end c with private; private package private c is -- ほっと一息 end c; end p;
折角privateより上だけ見ればいいことになっていますのに、not privateやend privateはセンス無いと思います。