April 17, 2012
NASA shows off new algae farming technique for making biofuel

April 16, 2012
New 3D printing process could lead to DIY drugstores

March 23, 2012
標準のむかう道: The C++ Standard Library著者Nicolai Josuttisへのインタヴュー

source: http://www.informit.com/articles/printerfriendly.aspx?p=1846582


Danny Kalevが“The C++ Standard Library: A Tutorial and Reference, 2nd edition”の著者であるNicolai Josuttis氏に、氏の新著について、またC++11の好ましい点、好ましくない点について、そしてなぜC++が氏の最良の言語でないのかについてインタビューを行った。


Danny Kalev: The C++ Standard Library: A Tutorial and Reference の第一版は1999年、C++98として知られるC++の最初の標準規格が承認された次の年に出版されました。この第一版と、もうすぐ出版される第二版の主な違いについて教えてください。

Nicolai Josuttis: えっと、僕はC++11の標準化プロセスを追いかけていなかったんだ。2008年末、vectorやpairのようなクラスがC++98/03とどう変わったのか調べるべく僕は初めて新しい標準を見た。とても衝撃を受けたね。”いったいぜんたい、このクラス宣言にある && はどういう意味なんだ?” …理解するまでとても戸惑ったのを覚えているよ。さて、C++98との違いについて聞くなら、僕はまるっきり違うと答えるね。単純なプログラムの書きかたも、複雑なクラス定義も劇的に変わっている。例えば、C++11のpair<>は行数にして倍ほど増えている。

でも、変化の方向は正しいと思う。C++11はC++の力-パフォーマンス-に重点を置いている。だが、これはプログラマがよいクラスを設計する難易度が上がるという障害を伴う。…ふむ、そう困難でもなくなるかもしれない。プログラマが知るべきことをきちんと知っていれば。…だが、今や知るべきことをきちんと知るのは非常に難しい。ある意味で、C++11はまったく新しい言語で、僕の本は新しいC++プログラミングスタイルと新しいクラスを含めて、この変化を単に反映したものだと言えるかもしれない。

Danny: どうして第二版を書こうと思ったのですか?読者の要求があったからですか?それともC++11標準が出たからですか?

Nicolai: どっちもだよ。C++11をカヴァーするよう更新してほしい、というリクエストは常だ。

Danny: C++を主に使っていて、C++11の変化についていきたいと考えているプログラマにとって、C++11標準ライブラリをマスターする最良の方法はなんでしょうか?一般的なC++erにとって重要なC++標準ライブラリの特徴とはなんでしょうか?

Nicolai: 僕の本を買ってください;-) どの特徴が重要になるかは、プログラマと問題領域に依るね。もちろん、concurrencyやmultithreadingサポートという点にそそられるプログラマはきっと多いだろう。だけど他のプログラマは乱数生成(これはC++11標準の26.5節に記述されている)に興味があるかもしれない。一般的なプログラマにとって、最も重要な変更は多分言語コアにあるはずだ - 標準ライブラリの使い方を劇的に変えるようなものもあるからね。

Danny: templateは標準ライブラリの根幹です。containerやalgorithm、iteratorはtemplateの上に組み上げられてますし。では、多態や仮想関数、継承といった古典的なOOPの原理は、今日的C++ではもはや過去のものなのでしょうか?

Nicolai: ふむ、いくつか回答を思いついたよ。まずは、templateは(実行時ではなくコンパイル時の)多態に使えるよ、ということ。次に、C++は純粋オブジェクト指向言語でもなければ、純粋ジェネリック言語でもない、ということ。C++の真価はこの二つを組み合わせたときにこそ発揮されるのだ。…最後に、端的な回答を。”はい。そのとおり”。

Danny: では、C++の言語コアについてお話を聞かせてください。lambda expression の利点は、もしあるなら、いったい何でしょうか。この機能が一般的なプログラマのコードで広く使われるようになると思いますか?それとも主にC++ライブラリの中で使われるに止まると思いますか?lambda expressionが潜在的に持っている短所はありますか?

Nicolai: 僕がC++でプログラムを書くとき、もう二度とalgorithmと関数オブジェクトを組みあわせて使わないことを宣言するよ。でも公平を期していうなら、最近あんまりプログラミングしてないんだけど。それでもまぁ、僕はそんなに特殊な部類には入らないと思う。僕の意見では、lambdaが導入されてようやく、algorithmを使ったコードを高速かつ読みやすく書けるようになったと思う。これはすばらしいことだ。まぁ、lambdaには問題もあるね。(関数オブジェクトのように)lambdaは局所的な振舞いを規定するけれど、複数の呼び出しの間で状態を保持しない。この点では、関数オブジェクトの出番はまだあると言えるだろう。

Danny: rvalue referenceはC++11言語コアで一番大きな変更だと思います(この機能の詳細についてはこちらを参照のこと)。実際のアプリケーションでこの機能を使う機会はありましたか?使える機能だと思いましたか?この機能の利点はなんでしょう?

Nicolai: 申しわけない。このところ僕のプロジェクトではC++をあまり使っていないんだ。繰りかえしになるけど、僕のC++11の知識は第二版を書く中で身につけたものなんだ。でも、実際に試行して、機能についてはコミュニティのエキスパート達と議論を重ねてきた。だから、この本は初心者が書いたものじゃない。言わば、”熟練した初心者”が書いたものなんだ ;-)

さて、そういう訳で、新機能のなかでrvalue referenceが一番重要な変更かどうかは分からないよ。まぁC++の利点 - 例えばパフォーマンス -をさらに強化する鍵であるとは思う。しかしながら、この本のなかで、ムーヴセマンティクスとrvalue referenceが導入された動機と、機能の説明をするのがどれほど大変なことか分かっている。僕にとっての、C++の一番目を惹く変化は auto、range-based for、initializer listかな。これら三つの機能のおかげで、もうこの機能なしではやっていけないくらいに、小さな例示コードをとても明快に書けるようになった。

Danny: よくC++11は妥協の産物だと言われます。特定の機能(例えば、自動ガーベッジコレクタ、スレッドプール、ソケットライブラリ)は標準に載りませんでした - 標準策定期間が伸びてしまうので。あなたはこのC++11標準はよくできていると思いますか?2003年の時点で持っていた期待に沿うものですか?

Nicolai: この本を書き終えて、僕はC++11の大ファンだと胸をはって言えるよ。あわせて、これらの小さな単純化と改良は相当なものだとも。でもまた、C++を構成する機能とコンポーネントを使い熟すのは時として困難だ。そして、templateのインスタンシエーションにまつわるエラーメッセージはいまだに大問題だ。(Danny註:templateまわりのエラーメッセージは解読するのが骨である) 思うに、標準委員会は単純化にそれほど気を払っていないようだ。ええと、これは標準化作業に関わっている人への苦情ではないよ。彼らは信じられないほど大変な仕事を、よくやってのけていると思う。C++では、メンテナンス中のすべてのソフトウェアで彼らの成果を感じることができるはずだ。多くの問題は、後方互換性を維持することに由来する不均質性に起因しているからね。

Danny: C++11にはなにが欠けていると思いますか? どんな機能やライブラリが次のC++標準で取り入れられて欲しいですか

Nicolai: ファイルシステムがないのは痛いね。あとUTF8やUTF16、Unicodeのようなキャラクタセットのサポートもまだまだかな(本のなかで、UTF8からUTF16に変換する例があるけれど、この手のものがほとんどない)。コンセプトがないのはべつに問題ないね。実際、コンセプトがC++11規格から外れる前から、第二版ではコンセプトを出さないようにしようと思っていたし。(註:コンセプトについて、議論の流れや標準から外すに至った経緯についてより詳細を知りたければこちらをご覧ください)

Danny: ではあなた自身についてもうすこしお話しください。あなたは長年C++標準委員会のメンバーを務めていらっしゃいます。C++11の標準化に際して、どの方面で主に活動されましたか?一緒に設計したライブラリはありますか?

Nicolai: 僕は一流のエキスパートじゃないんだ。多分、委員会のほとんどのメンバーのほうが僕よりC++に詳しいんじゃないかな。僕は主により適切なものになるように質問したり対処したりだよ。C++98のときも、C++11のときも、後半になって飛び込んで、それから、重点的に、矛盾点がないかないかどうか見たり、欠陥を修正したり、動作を明確にしたりしていたね。僕が出した唯一のものはarray<> クラステンプレートの初期実装かな。でもあれもBjarne Stroustrup氏の”The C++ Programming Language“にあるc_arrayクラスの翻案だけどね。

Danny: 近年、C++に対する関心がまた高まってきているように思います(“C++ルネッサンス”とか言われている)。これは、プログラミング界がC++以外の言語の見果てぬ夢から醒めたのでしょうか。それとも単にC++自体が良くなったのでしょうか? あと、これは少し個人的なことになりますけれど、好きな言語はありますか? 最近どんなプロジェクトに関与しましたか?

Nicolai: プログラミングは僕の今の仕事にはあまり重要ではない。SOA(Service Oriented Architecture)とシステムインテグレーションのエキスパートとして、ここのところ僕の主な関心事は、多数の企業間、および、多数のシステム内で分散した動作(“ビジネスプロセス”)を実現する技術や方法を確立することでプロジェクトや企業をサポートすることだ(註:SOAについてのより詳細はこちら)。ゆえに、僕のトピックはシステム開発というよりシステムランドスケープのメンテナンスだね。

C++は実は僕の好きな言語ではない。まぁ実際のところ、好きな言語なんてないんだけど。僕とプログラミング言語の最後の格闘は15年前になるね。さて、質問はどの問題をどんなコンテキストで解決しているのか?ということでいいのかな。コンテキストに応じて、主にawkとsedがあるUnix shell script、Java、C++、Excelなんかで動作を”プログラミング”しているね(註:Excelはプログラミング言語ではないと思われるかもしれないが、僕の考えでは、特定の問題については、プログラミング言語としての力量を備えていると思う)。

もしパフォーマンスが本質的な問題なら、C++以外の手はないと思うね。でも、この言語をつかうためには、高いコストを払う必要がある。C++が複雑であるがゆえに、他の言語に比べて普通のプログラマに対するサポートが信じられないほど悪い。これこそがC++の欠点だ。僕の本が売れるのはこれのお陰と言ってもいいんだけど。C++は仕事を生むと言える。これは今のご時勢ありがたいことだね。

March 21, 2012
出張報告書:2012/2 C++ Standard Meeting

source: http://herbsutter.com/2012/03/08/trip-report-february-2012-c-standards-meeting/

2012年春のISO/IEC JTC1/SC22/WG21 (C++)会議が、アメリカ合衆国ハワイ州コナにて2/6-10の日程で開催された。

主要な成果としては、業会からのC++への注目がより増してきているので、今年はたいへんな年になるだろう、ということだ。これはC++にとっていいニュースだけど。

それでは、会議のハイライトを紹介していこう。

参加者

これはC++11標準が完成して二度目の会合になる。C++98を完成させた後のように、業界の動向を注視すべくしばらく”静かに”しているなら尚更のことだが、標準が発布されてからしばらくは参加者が少くなるのが常である。

だが、以下をご覧になれば分かるとおもうが、標準を発布してから、C++標準委員会は減速するどころか加速したのは明らかだ。これは特筆すべき参加人数に顕著にあらわれている。なんと73人ものエキスパートがこの会合に参加したのである。その中にはGoogleやIntel、Microsoft、NVidiaといった企業からの参加者も多数含まれる。これは、次期標準の策定計画や、それに先駆けて提出された論文に対する関心の高さのあらわれであろう。

全速前進! part 1: C++1y

最も大きな議題は、C++11の”次を何にする”か決めることだった。 月曜の朝っぱらから、WG21はすぐにISO C++ Standardの新しい版 -これには言語とlibraryの拡張が含まれる- に向けて作業を開始し、この新しい”C++1y”標準の完成をおおよそ5年後と見積ることで一致した。よって、yは7になる見込みだが、これは現時点では大まかな見積りに過ぎない。

できるだけyを7にするには、C++1yでは、提案されている数だけでももうキャパオーバーしている、メジャーな言語機能の追加を最大一件に絞ることだ。 evolution working group (EWG)の議長はいつもどおりBjarne Stroustrupが務めたが、このため今回取りあげる主要な提案の概観を調査するのに何週間もかかってしまい、その結果、今回はconcurrencyとparalleismからmoduleとstatic ifまでのプレゼンテーションが行われた。

今回の会合ではyes/no二択での採択は取らないようにし、ほとんどの提案については次の10月に行なわれる総会で、より洗練した提案を再度取りあげることにした。よって、次の会合から、C++1yに許された時間のなかで検討すべき提案について、採択するかしないかを検討することになるだろう。 次のWG21総会までに、提案のいくつか(特にconcurrency/parallelismアプローチとmoduleシステムの提案)について、この議題をより深めるために、小規模の会合を追加で夏に開催することが決まった。詳細は以下に述べる。

全速前進! part 2: ライブラリの数々

先のレポートで述べたように、library working group (LWG)はもうすでに提案の募集と標準ライブラリの追加作業を継続することが決まっている。 Kona会合ではまだライブラリ拡張のチャンスがあることを確認し、LWGの議長であるAlisdair Meredithはthis call for library proposals を議題にあげた。

しかし、これらのライブラリはなにもC++1yのためだけではない。というのは、LWGは迅速に成果を提供すべく小さな単位/小さなサイズで新しいライブラリを導入するつもりだからだ。FileSystemやNetworkingのようなライブラリは、非常に大きいので、C++1yとは分けて(註: C++1yより早い段階で)Technical Specification(TS)の形式で発布できる程度に独立した部品として発布する。(語註: TSとはISO用語で、最初のライブラリ拡張であるTRのように、我々がType 2 Technical Report(TR)と呼んでいたものである)

これら分割した部分については別々に作業をすすめ、完全にWG21 LWGへ移行できる段階に達したとき、LWGがその進捗を管理することになるだろう。おそらくはC++1yの国際標準(IS)の一部として、もしくは単体のTS、ISとして。

研究部会

作業全体を加速するべく、また並行して作業をすすめられるように、今回初めて4つのWG21公式研究部会(SG: Study Group)を設立した。これはWG21総会の間に独立して会合を開催し、作業をすすめる権限をもつ。 これらの作業部会は提案をより早く進捗/洗練することが目的だが、TSやISとして発行される前に、さらに洗練の度合いを高めて承認を受けるために、通例どおりWG21にかけられることになるだろう。

4つの研究部会と議長は下記のとおり。

  • SG1: 並列、並行 (Hans Boehm)
  • SG2: モジュール (Doug Gregor)
  • SG3: FileSystem (Beman Dawes)
  • SG4: Networking (Kyle Kloepper)
おそらく一回以上はSGの会合が開催されることになるだろう。いまのところ、僕が把握している範囲では以下の通りである:
  • 2012年5月の第二週:アメリカ合衆国ワシントン州ベルビュー(SG1 と SG4)
  • (必要ならば) 2012年夏:カナダ トロント(SG1)

今後の予定

研究部会の会合を除くと、ISO C++ standards committee総会の開催予定日ならびに開催予定場所は以下の通りである:

  • 2012/10/15-19: アメリカ合衆国オレゴン州ポートランド
  • 2013/4/15-20: イギリス ブリストル