Chocolate Coding

移行予定地

名前空間に何があったのか

この記事は、C++ Advent Claneder2014の14日の参加記事です。

良い機会なのでmarkdown形式で書けるはてなブログに移行テストです。

C++名前空間は使い辛い

去年ぐらいから定期的に「C++名前空間が使い辛いので、

namespace Hoge::Fuga { ... }

のように書けるようにならないんですかねー」と、ほっとさん(@hotwatermorning)に 言っていて、その度に「それ微妙じゃないですか」と軽くあしらわれていたんですが、 Nested Namespace DefinitionとしてついにC++17に入ることになったようです。
やったー!

Nested Namespace Definition

後述する最新のN4230から抜粋すると、以下のような単純な機能になります。

namespace A::B::C {
    //…
}

上記のコードは次のものと同等になる

namespace A {
    namespace B {
        namespace C {
            //…
        }
    }
}

この機能については江添さんのレビューにもちらっと載っています

本の虫: 2014-10-pre-Urbanaのレビュー: N4230-N4239

採択されるまでの長い経緯

実はこのNested Namespace Definitionさん、 大昔に1度提案されていたものの忘れ去られていた機能なのです。

2003/09/19 n1524:Nested Namespace Definition Proposal - Open Standards http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1524.htm

11年も前ですね。それが去年、10年ぶりに掘り起こされています。 順調にいけばTR1辺りで入ってたんじゃないかなーって思ってます。

2013/09/10 What ever happened to N1524(nested namespace qualifiers)? https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/AfRGjcaSoXs

本当に何が起こったのでしょうね。 そして、今年の3月になって再びRobert Kawulak氏によって提案される事となります。

2014/03/30 Recall: Nested namespace definition proposal ( ISO C++ Standard - Future Proposals )
https://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/BIL8OQyfEk0

この再提出された提案によるとN1524は、N2869 State of C++ Evolutionの "EWGで議論されてたけどさまざまな理由でC++11からは外しちゃったよリスト" に含まれてしまったため、C++0x(現在のC++11)の標準機能としては見送られてしまった事が分かります。 2003年に提出されてから担当者の多忙などの理由により放置されちゃったんでしょう。 各方面からの要望も最近多くなってきたので、それがこの提案提出の動機となったようです (あとはC#のような言語で実装されていたり、Lazy C++というツールで既に実装事例があったから…と書いていますが)

2014/05/23 n4026:Nested namespace definition - Open Standards http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4026.html

そしてついに今年5月、初期案がOpen Standardsに登録されました。

2014/07/03 n4116:Nested Namespace Definition(rev1) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4116.pdf

7月にスイスのRapperswilにて行われた標準C++委員会のミーティングが行われた後、N4116が登録されています。

2014/10/10 n4230:Nested namespace definition (revision 2) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4230.html

10月にrev2となっており、これが2014-12-14時点での最新の提案となります。 Pre-Urvanaに分類されているので、11月に行われたイリノイ州Urvanaでのミーティング用みたいですね。

このような感じで、実際に採択されるまでに10年以上の年月がかかっているわけですが、 Future ProposalsのMLを見ていると、途中で議論が途切れて放置されていたりするものも結構ありますし、 比較的緩いのかなーと感じておりました。 実際の話し合いは定期的に開催されるC++標準委員会のミーティングで行われると思うのですが、 こちらからは動向が分からないのでもどかしいところでもあります。

それでは、お次のAdvent Calenderはbjam大好きFlast_ROさんです。