Cμ における ns-ET 記法を考案

描主宇田川浩行K#F85E
上描き希哲7年(2013年)
11月22日 22:59
下描き希哲7年(2013年)
11月22日 22:39
利承
ライセンス
希哲館普通利承(KULクール

における ns-ET 記法を考案した。

これは入れ子になった名前空間の表記法であり,ns_ 鍵語ET 幕語XN 幕語を組み合わせる。例えば名前空間 a::b::c のブロックを以下のように記述できる。


ns_ a ET b ET c 
    // ...
X3

これは,以下の C++ コードと同義である。


namespace a  namespace b { namespace c {
    // ...
}}

ET は「エト」と読み,ラテン語で「AND」(&)に相当する。「エトセトラ」(et cetera,etc,&c.)の「エト」(et)である。この場合,「名前空間 a と b と c」のように自然な読み下しが出来る。

X3 幕語は XN 幕語の一種で,ブロックの終了記号を3つ重ねることを意味する。見ての通り,乗算記号(×)を模している。この場合,名前空間が3個であるため対応させて X3 を使う。

ちなみに,「ns-ET」は入れ子を意味する「nest」(ネスト,nEsT)アナグラムになっている。

動機

C++ における悩ましい問題の一つとして,名前空間に関する表記が冗長になりすぎるというものがあった(例:C++ 名前空間と前方宣言。これは,後発の言語でも名前空間の仕様に関して迷走していることが多い中で,機能的には十分熟れているにも関わらず C++ の名前空間があまり活用されない理由でもあったように思う。

特に,入れ子になった名前空間を単純に記述できないことはよく分からない仕様で,過去に以下のような提案もあったが C++11 にも採用されていない。恐らく,スコープ解決演算子による記法の整合性が懸念されたことや,さほど強い要望がなかったことによるのだろう。

www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1524.htm

私がこの問題を強く意識しているのは,Cμ が「ミュージアム」を謳うほど広大な応用範囲を想定しており,名前空間の活用が重要になるからである。

いずれにせよ苦し紛れの手段としては,ns-ET 記法が限界だろう。例えば,上記の URI で提案されている以下のように理想的な記法が C++ 標準で可能になったとしても,簡潔性にさほど大きな差はない。


namespace a::b::c 
    // ...

出力論組プログラム虎哲*イチ 1.01
制作・運営:希哲社
© K1-13 (2007-2019) KiTetuSha