C++Now! 2012に参加してきました

毎年5月にアメリカのコロラド州アスペンで開催されているBoostConというBoost C++ Librariesのカンファレンスが今年からC++Now!という名前に変わり、今回それに近藤さん id:redboltz と一緒に参加してきました。


非技術的な内容は、後ほどBloggerの方に書こうと思います。
1週間の濃厚な日々の記録のため、けっこう長くなってしまうことをご容赦ください。

  • 0日目(日曜日) Registration

初日は16:00から参加登録 + 雑談を行うRegistrationがありました。会場に入った途端自己紹介もしてないのに「Are you cpp_akira?」と話しかけてきた外人さんがいて、「あ、これが噂の日本語を話せるRay Fixか!」とすぐに把握して近藤さんに紹介されつつ少し話してました。その後、今回Boost.Coroutineの発表を行ったNat Goodspeedさん、Odeint作者の一人であるKarsten Ahnertさんなど数人と少し話しました(英語ダメダメなのでほとんど近藤さんと話してるのを聞いてるだけ)。

  • 1日目(月曜日) 開幕

C++Now!が本格的に始まる月曜日は、Dave Abrahamsの挨拶から始まり、今回新規参加者が1/3くらいいることなどが伝えられました。


次にJeff Garlandがモデレータを務めるLibrary in a Week。
Library in a Weekは、今週一週間新たなライブラリ開発をみんなでやろう、というものです。今年のテーマは「C++11時代のアルゴリズム」です。Boost.Algorithmの拡張、Boost.Rangeの拡張、ASL (Adobe Source Library)の拡張などが有志によって提案されました。私は「これはおもしろい!ちょうどいくつかアイデアがあるんだよ!」と思っていてもたってもいられず、続くセッションを全く聞かずにひたすらLibrary in a Weekの資料作成を行っていました。


お昼にLibrary in a Weekの集まりがあると聞き、近藤さんと乗り込んでみました。Boost.Rangeの議論が進められており、黒板にいろいろアイデアを書いて話してたSean Parentに、スケッチブックを片手に拙い英語で話しかけ「このアイデアにはこういう問題点があり、こういう解決方法をとった方がいいと思う」というようなことを伝え、私の英語力の低さもあってその場で理解してもらうことが難しかったため「歩きながらでもいいか?」と言われ、一緒にご飯を食べに行くことに。歩きながらスケッチブックに議論のまとめをガガガッと書いていき、お店に着くまでになんとか書き終わり、近藤さんから「Could you introduction to description?」と切り出せばいいよとアドバイスをもらい、思い切って話してみました。スケッチブックをめくりながら拙い英語で説明し、今度はなんとか理解してもらい、黒板には書いてなかったけどこれはその問題も解決してる、というような結論になりました。
それと一緒にお昼を食べていたBoost.Algorithm作者であるMarshall Clowに、後日発表予定の私のLibrary in a Weekの資料を見てもらったりしてました。
夜にJeffとたまたま同じホテルだった近藤さんから、私が発表したがっているということをJeffに伝えてもらい、水曜日に発表する機会をもらうことができました。


全く話を聞いてなかったMore Useful Computations in the Same Durationのセッションの次は、KarstenさんとMarioさん作者2人によるOdeintのセッション。Odeintは、常微分方程式を解くためのC++ライブラリで、現在Boostにレビューリクエストが提出されています。この発表では、Odeintのユースケース、速度、設計などについて話されました。私はOdeintの解決しようとしているドメインには理解が浅いため、ついていけない部分は多々ありましたが、このライブラリがPolicy-based Designなどに基づく現代的な設計が行われていることはわかりました。


次はIBMのMichael WongによるOpenMPのセッション。これは英語が早口で聞き取れなかったのもそうですが、文字が小さすぎたのもあって全く理解できなかったので早々に退散。
Michael Caisseのラムダに関するセッションに途中から参加しました。この発表の内容はもともと私はほぼ知っていたこともあって新たに得るものはとくになかったのですが、「発表がすごくわかりやすいなー」と思いながら聞いてました。英語に抵抗の低い方でC++のラムダに興味のある方は、ビデオが公開されたら見てみるといいと思います。


その次はAlan WiegleyさんによるセッションUstring - A Modern Alternative to std::string。この発表は、現在構想中の新たな文字列クラスの設計をディスカッションしながら考えていこうというものでした。

ustring<ASCII> us;

のように、文字型ではなく文字コードをテンプレート引数で指定するのに好感を覚えました。
1ページめくるごとに会場中から突っ込みが飛んでくる活気あるディスカッションセッションでした。私も日本人としてUnicode周りの扱いについてできる限り意見を言っておきましたので、さらに洗練された設計に成長していくことが期待できると思います。セッションの最後で「このライブラリを今後どうするべきか」というアンケートが出されていたのを聞きとれていなくてあとでRay Fixにそういうのが聞かれていたことを教えてもらい、ちょうどばったり会ったAlanさんに「voteします!」という意思を伝えておきました。

  • 2日目(火曜日) Library in a Week本格始動

朝ホテルで朝食を食べていると「おはようございます」と日本語で挨拶されました。
「あれ、私と近藤さんのほかにも日本人がいたのかな?」と思っていると、彼は韓国人らしく日本語が少し話せるとのこと。アメリカのIntelで働いているらしく、ソフトウェア開発で毎日Boostを使っている、というようなことを聞きました。


毎朝08:00から、最初のセッションはLibrary in a Weekの進捗報告 + アイデアの発表。
Library in a Weekはセッション中に作業するのではなく、毎日の空き時間で作業を進めて朝に進捗報告をする、というなかなかハードなプロジェクトです。
その日はSebastian RedlからBoost.Rangeの拡張についての発表と、先日議論したSean ParentからASL (Adobe Source Library)の拡張についての発表がありました(Sean ParentはAdobeの人で、ASLの作者)。
私はSebastianの発表を聞いて、その問題点とさらによくする拡張をもっていたため、発表後近藤さんを引っ張っていってSebastianに突撃してみました。ひとつは、Boost.Rangeに対してzipを追加する案に対し、「これは2引数じゃなくvariadicにしたほうがいい」という提案を行い、もう一つは私が作ったタプルを展開しながらRangeを回すfused_for_eachの紹介と実装を見てもらいました。これはzipと組み合わせることで強力になるアルゴリズムのため、ついでに紹介しました。


Library in a Weekのあとは今回最初のKeynote、AppleのHoward HinnantによるMoving Forward with C++11でした。これは、C++11のムーブセマンティクスに関するセッションです。パフォーマンスの話が主でした。発表中にいろいろと質問が入り、タイムオーバーで途中までしか進みませんでした。途中、Daveが前の方にあるホワイトボードにxvalue等の左辺値/右辺値の新たな分類について記載したりしてました。
あとでRay Fixに「Keynote中にあんな突っ込みが入ったり、ホワイトボードに他の人が書き込んだりするなんてホントはありえない。こんなことができるのはアメリカじゃC++Now!が特別だね」と言ってました。他の参加者も、このようなオープンな議論ができるからこそC++Now!にだけは参加するようにしてる、という方もいるようです。


その次はAbel SinkovicsさんによるMetaparseのセッション。
Metaparseは、テンプレートメタプログラミングとconstexprを組み合わせたコンパイル時構文解析ライブラリで、Boostにもレビューリクエストが提出されています。私はそのレビューリクエストに対して「ボレロ村上さん id:boleros の作っているSproutというライブラリもあるんだよ」ということをメーリングリストに投げたりしていたこともあって、今回のC++Now!では、日本人プログラマの活動を伝える意味でも、Metaparseのセッション中のどこかでSproutのことを紹介しよう、ということを目標にしていました。しかし、Metapaesのセッションの始めにSproutの紹介がAbelさんから行われて私の使命は自分で果たす前に終わってしまったのでした。Dave Abrahamsから「Sproutってどんなライブラリなの?」という質問が挙がってAbelさんが答えていたりしたので、AbelさんもSproutを調べておいてくれたんだなーと思いました。
さて、肝心のMetaparseのセッションですが、基本的な用途はprintfのコンパイル時型チェックやSQLのコンパイル時インジェクションチェックなのですが、文字列リテラルHaskellの関数を書くことでそれをC++のメタ関数として扱う、とかいろいろ頭のおかしい(褒め言葉)ライブラリであることが紹介されていました。メタメタしい発表であることもあって、Boost関連のそっち方面の方々が集まっていて、Boost.MPLのDave Abrahams、Boost.ProtoのEric Niebler、Haskell大好きBartosz Milewskiさんが中心になっていろいろとディスカッションが行われていました。Bartoszさんが「I have a crazy idea!」と言いだしたときは吹きましたね。


後日休み時間にAbelさんに突撃してボレロさんのことを紹介してきました。
私「Sproutの作者は私の友人です。彼はホビープログラマで本業は陶芸家なんだよ。」
Abel「Really?」
近藤「メタプログラミングとアートはつながるんだよ!」
というような会話をしてました。
Abelさんに「連れてきなよ」って言われたので、来年一緒に行きましょう!


その次はC++Now!を取り仕切っているJon KalbによるException-Safe Coding in C++。Dave Abrahamsが考案した例外安全性に関する説明と、それをベースにしたコーディングなどの解説が行われました。私はこの発表についていろいろと思うところがあるのですが、それはまた別の機会に書くかもしれません。


この日の最後はJosef WeinbubによるUtilizing Modern Programming Techniques and the Boost Libraries for Scientific Software Development。これは科学計算と銘打っていますが、主にBoost.Graph(や、Boost.MPIと組み合わせたPBGL)の話でした。この発表中はRay Fixに突っ込まれてLibrary in a Weekの資料を手直ししていたのであまり聞いてませんでした。

  • 3日目(水曜日) 英語プレゼンの日

この日のLibrary in a Weekでは、私の発表がありました。
集合演算のSTLアルゴリズムがOutput Iteratorベースになっているので使いにくい。UnaryFunctionバージョンを作ろう、というものと、私が現在行っているP-Stade OvenライブラリのBoostへの移植プロジェクトについて話しました。


結果は上々で、発表後は最終日までたびたび「このあいだの発表はよかったよ。Ovenおもしろいね」というようなことを何人かに言われました。


発表の最初に「私は英語が少ししか話せないので、質問にはすぐに答えられません」というようなことを話したら発表後Sebastianに「英語話せなくても大丈夫だよ。ぼくらにはC++という共通言語があるじゃないか!」と言ってもらえました。いやー、来てよかった。


発表後だったため、続くDavid Vandevoorde (C++ Templates: The Complete Guideの著者)によるKeynote、Modules in C++はあまり頭に入ってきませんでした。でもだいたいわかった。
C++のモジュールシステムはすでにClangが開発を進めているらしいです。
その後の休み時間にDavidに突撃し、持参したC++ Templates(原書)にサインをもらいました!それと私の著書である『C++テンプレートテクニック』をDavidにプレゼントしてきました。


その次のセッションはBoost.Protoで作るEDSLのセッション。これは、やりたいことはだいたいわかりましたが、Boost.Protoがよくわかってないので技術的にはよくわかりませんでした。あとで資料を読み直します。


その次はMarshall ClowによるGeneric Programmingのセッション。このセッションでは、以前Boost MLで盛り上がっていた文字列へのhex()/unhex()関数の設計をどうしようか、という思考の過程的な話が行われました。発表中、会場からいろいろと意見が挙がっていたので、フィードバックされた設計になっていくと思います。ちなみにそのhex()/unhex()関数は、Boost 1.50.0でBoost.Algorithmに入る予定です。


その次はLarisse VoufoによるConceptClangのセッション。Clangでは現在、C++11に入る予定で入らなかったConceptの改良実装が行われています。このセッションでは、Conceptの解説、コンパイラの実装の話などが行われました。彼女も英語のネイティブスピーカーではなかったらしく質問に対して「I don't know English」と答えていたりしました。


その次はIntelGoogleの人によるBoost.Polygon.Voronoiのセッション。このセッションで話されるBoost.Polygon.Voronoiは、現在Boostにレビューリクエストされているボロノイ図に関するBoost.Polygonの拡張です。基本的な動機は、publicなボロノイの実装がない、というもののようです。技術的な話が専門的すぎてさっぱりわからなかったので途中で退散しました。

  • 4日目(木曜日)

この日おもしろかったのは、Nat GoodspeedさんによるUsing Boost.Coroutine to untangle a state machineです。
あまり状態マシンの話はなくて、コルーチンの基礎の話をしていたように思います。coroutine::futureというのがおもしろそうなのであとで触ってみようと思います。


そのあとはBeman DawesによるBoosting Libraries for TR2
TR2というよりは標準化の問題点について話されていたように思います。スライドの表紙が「Standard Committee want you!」と書いてあったのと参加人数が6人しかいなかったこともあって空気がけっこう重かったです。「こっちに振られたらどうしようかなぁ」と思いつつ話に参加できないまま聞いていました。
最近Boost MLでも標準化委員会へのお誘いメールが飛んでいたりと、標準化委員会は常にボランティアの人材を求めているようです。現在、標準化委員会のMLを誰でも読めるようにしよう、という議論が行われているようなので、もう少し開かれたものに今後変わっていくかもしれません。


ディナーブレイクのあとは来年のC++Now!に関するディスカッション。「来年もC++Now!という名前でいいのか」とか「開催地はアスペンでいいのか」といったことが議論されていました。他に、C++Now!のProgram Committee (発表の提案を見てaccept or rejectを判断する委員会)のメンバ募集も行われていました。手を挙げればそれで入ることが決まりです。私もRayから誘われましたが、ちょっと最近キャパシティオーバー気味なのでお断りしました。
来年のことで決まったのは、「C++Now!の規模が縮小するまではアスペンで行う」ということですね。

  • 5日目(金) 最終日

この日はC++Now!最終日です。
最初にLibrary in a Weekの最終報告が行われ、来年のLibrary in a Weekでは何をしたいかの提案と投票が行われました。今年のLibrary in a Weekの成果は今年中に形にしよう!とのことなので、がんばります。


最後のセッションはBoostのこれからに関するディスカッション。
現在開発中のBoostのモジュールシステム、それによってコントリビュートの敷居を下げることなどが主に話し合われていました。


最終日は午前中で終了しました。

  • まとめ

今回、英語の勉強不足を推してでもC++Now!に参加し、不安はありましたが、結果としてかなりの成果を上げられたように思います。近藤さんやRayが会話の手伝いをしてくれたり、それがなくても拙い英語でもみんな真剣に理解しようとしてくれていたので、なんとかなりました。
C++Now!の参加者はC++標準化委員会やBoostの開発者が多かったこともあって皆とてもモチベーションが高く、活発に議論が行われている空気がとてもよかったです。このコミュニティの中で活動することに誇りを持てる、そんなカンファレンスでした。
基調講演と聴衆という関係ではなく、飽くまでコミュニティイベントであり続けるために体制作りが行われていることがよく感じられました。
来年はもう何人か日本人C++erを連れていきたいですね。それと、日本のことも宣伝してきたので、そのうち本家の誰かをBoost.勉強会に招待できたらなーと考えていたりします。


充実した一週間でした。近藤さん、Ray Fix、それと運営に関わったメンバと参加者の方々、支えてくれた日本コミュニティの方々に感謝します。ありがとうございます!


このブログエントリでは、C++Now!の活動を通してのまとめを記載しましたが、Twitterの方でリアルタイムにいろいろと報告を行っていたので、zakさんがまとめてくれたtogetterも合わせてご覧ください。


C++Now! 2012 day1
C++Now! 2012 day2
C++Now! 2012 day3
C++Now! 2012 day4
C++Now! 2012 day5


C++Now! 2012の資料は、以下のGitHubページで順次公開されています。
https://github.com/boostcon/cppnow_presentations_2012


セッション概要の日本語訳はboostjpの以下ページを参照してください。
https://sites.google.com/site/boostjp/cppnow/2012