constexpr本を執筆することにした
中3女子です。
constexpr本を執筆しようと思い立った。
constexpr について、言語機能、用途、歴史的経緯、そして実装技術の観点から詳細に解説した本である。
動機
C++本のうち、例えば template や template ライブラリについて解説した本は探せばいくらでもある。
「Moderrn C++ Design」のような古典的名著から、「C++テンプレートテクニック」のような日本人の著作まで、バイブルと呼ぶべき本が多く存在する。
偉大なプログラマ達が《発見》し発展させたテンプレートメタプログラミングといった技法を、現代のわれわれは当たり前のように学ぶことができる。
解説サイトも沢山ある。ネット上には一線級の C++ プログラマの書いた技術情報とコードが溢れている。
たとえ英語が全く使えない者でも、ネット環境と最低限の検索能力さえあれば、template に関する日本語資料に困ることはない。
では、constexpr についてはどうだろうか?
以前、自分は constexpr を使うべき5の理由 - まとめ&リンク集 - ボレロ村上 - ENiyGmaA Code というエントリを書いた。
constexpr に関する纏まった日本語情報は多くない。
検索すれば、constexpr による Zero-initialization の議論など、興味深いいくつかの情報を見つけることができるが、断片的だ。
日本語圏以外であたればここに載っている以外の様々なアイディアや知見を見つけることができるだろうが、やはり総合的なものは聞かない。
書籍では、江添氏が「プログラミングの魔導書 Vol.2」で書いた 10 ページほどの constexpr 入門がある。
最近書かれた C++ 本には、もしかすると constexpr について言及された節もあるかもしれないが、確認していない。
ともかく、constexpr に関して、総合的かつ専門的に詳細にわたって解説された書籍またはサイトというものは、未だ見聞きしたことはない。
(もしあるならば、ぜひ知らせて戴きたい)
無いのであれば、誰かが書くしかない。
しかるに、constexpr という言語機能は奥の深いものではあるが、ビジネスプログラマが取り上げるには実務的でないし、言語研究者が取り上げるには実際的すぎる。
ゆえに、自分が書くしかないと思い至った次第である。
幸いにして自分は、constexpr に関する実装経験については、少なくとも日本において一線級にあると自負している。
筆無精ゆえ満足な数ではないが、いままでブログエントリや勉強会の発表に際して、いくつかの constexpr に関する技術情報を書いてきた。
そして Sprout ライブラリの実装にあたって、これまで文章にしてきたことより遙かに多くの知見を得ている。
それらを纏めて詳細な解説として本にしようと考えている。
すべての C++ プログラマに資するものにはならなくとも、少なくとも世界に一冊はそのような本が必要なはずである。
内容
さて、内容的にはおおまかに以下のように考えている。
構成としては、かの Modern C++ Design を参考にしようと思う。
というのも、MC++D は Loki というライブラリをモチーフとして、template ライブラリのデザイン論を展開する構成である。
本書では Sprout ライブラリをモチーフとして構成すると考えれば、大いに真似しやすいと思われるからである。
執筆期間については、これから内容を詰める課程で決めていこうと考えている。
まずはおおよその分量(ページ数)の目安を決めなければならない。
例えば「プログラミングの魔導書」は A4 弱のサイズで 200 ページ程で一つの記事は 10〜30 ページ、「C++テンプレートテクニック」はおよそ A5 サイズで 300 と数十ページ程である。
自分としては、とりあえず今年中には公開までいきたいと思っている。
公開の形態は、Amazon の Kindleストアで電子書籍を個人で販売できるので、それを利用しようかと思っている。
個人的にデッドメディアである紙の本にも執着があるので、同じく Amazon のプリントオンデマンド(POD)も考えに入れている。
商業的な需要は見込めないので(それにまだ何も出来ていないわけだから)出版社への売り込みなどはまったく考えていないが、それはそれ。
査読のお願い
さて、執筆にあたってはいくつか関門がある。
先に述べたように、自分は constexpr に関する実装経験については自負するものがある。
しかしながら、自分にはプログラマの業務経験はない。
情報科学の専門教育を受けたことも無ければ、学術論文等の執筆経験もない。
C++ の言語規格には多少心得があるが、自分の知る C++標準化委員らのそれに及ぶほど厳密性のある知識ではない。
ゆえに、言語規格の深い部分と、学術的に厳密な部分(例えば計算量のオーダー等)に関して、しかるべき人に査読やアドバイスを請わなければならない。
そのため、C++ に一家言を持つと自負する方で、constexpr本の執筆を応援して戴ける方の有志に、査読をこの場でお願いしたいと思う。
連絡は Twitter @bolero_MURAKAMI またはメール contact-lib@boleros.x0.com まで。
質問等は上記連絡先やコメント欄などどこでも受け付けます。
よろしくお願いいたします。