最終更新日時:
が更新

履歴 編集

BoostCon 2010

2010 Program - boostcon

資料

セッションリスト

Clang: オープンソースのC++コンパイラライブラリ

  • Clang: An Open-Source C++ Compiler Library
  • スピーカー : Douglas Gregor
  • 形式 : 講義
  • トラック : Track I 2010

Clangは、C言語ファミリー(C, C++, Objective-C)のための新たなオープンソースコンパイラフロントエンドである。
C++コンパイラとして、Clangは速く提供できる生産品質なコンパイラであり、省メモリ使用、表現力豊かな診断、標準一致に関する強い関心で、低レベル仮想マシン(Low Level Virtual Machine : LLVM)を通じて、様々な構造のためにコード生成を最適化した。

しかし、Clangはコンパイラを超えるものである。
再使用可能なC++コンパイラライブラリとして設計され、Clangは大きなC++開発ツールを作るためのプラットフォームである。
Clang内部のデータ構造は、プログラムソースコードに関する完全な構文情報(マクロを含む、正確な位置情報)とセマンティクス(解決されたオーバーロード関数呼び出し、暗黙の変換)、両方を提供する。
その、Boost互換で、BSDライクなオープンソースライセンスは、新たなC++言語機能とアイデアのための潜在的な実験場としてや、C++コードを完全に、正しく構文解析することに依存するあらゆるツールのための理想的なベースにもなる。

このトークでは、Clangコンパイラを導入し、その豊かな内部のデータ構造がどれほど大きなユーザーエクスペリアンスを提供するか、次に、Clangに基づく開発ツールを作るためのアーキテクチャ、主要なデータ構造と、ライブラリのチュートリアルに焦点をあてる。

ジェネリックプログラミングとBoost Graph Library

  • Generic Programming And the Boost Graph Library
  • スピーカー : Jeremy Siek
  • 形式 : 講義
  • トラック : Track I 2010

グラフのアルゴリズムとデータ構造は、インターネットパケットルーティング、分子生物学、科学的なコンピューティング、電話ネットワーク設計などの多様な領域の問題を解決するが伝統的なグラフライブラリ設計は、十分な柔軟性を提供することに失敗していた。
Boost Graph Library(BGL)はSTLをグラフドメインに適用し、グラフ問題を解決するための非常に柔軟で効率的なライブラリとなった。
しかし、BGLは使うのが難しいため、このチュートリアルではプログラミングの基本原則を学び、それらがBGLでどう適用されるのかを学んでいく。

計算幾何のためのジェネリックプログラミング

Boost.Geometryは、現代のC++ジェネリックプログラミング手法を使用して設計された。
タグディスパッチはいたるところで使用され、メタ関数、テンプレートメタプログラミング、Traitsおよびコンセプトチェックを組み合わせた。
この講義では、タグディスパッチによって通常ではとれない値をとるなどの、手法を一歩一歩説明し、どのようにそれを使用することができるか、他の技術を組み合わせることができるかを解説する。

Instantiations Must Go!

BoostCon 2009では、メタ関数を簡単に書くための取り組みで変なことをしていたが、あとで多くの専門家と話してそれが不可能であることがわかった。一方、彼らは時々ゾッとするようなTMPのコードをより通常の関数プログラミングのようなコードで書き、大部分のメタ関数のテンプレート定義(宣言ではない)をインスタンス化する必要性を取り除くおもしろい手法を発見した。

C++0x update

  • スピーカー : Michael Wong
  • 形式 : 講義
  • トラック : Track II 2010

BoostCon 2009から継続して、最新コンパイラの実装状況に関するレポートと、C++0x機能に関する最新ニュースについての詳細を伝える。

C++での例外使用に関するガイドラインの再考 - 例外安全なコードを設計するための10の助言

  • Demystifying C++ Exceptions – 10 Tips to Effectively Design Exception-Safe Code
  • スピーカー : Ken Joyner
  • 形式 : 講義
  • トラック : Track II 2010

例外安全なコードを書くことが挑戦的であることは有名である。これは、多くの開発者に、例外の使用が避けられるべきであると結論させる。しかし、この結論に関する問題は、開発者が例外を使わずにエラー安全なコードを書くことがより簡単であると仮定しているということである。私は、この仮定が間違っていると考える。その代わりに、私は実際には、多くの開発者がエラー安全なコードを書くというわけではないと考えている。そして、例外は発生するエラーを無視することは、より挑戦的になる。(あなたのプログラムが未処理例外で終わるので処理しなければならない)

エラー安全なコードを書くのは例外の使用のあるなしにかかわらず、やりがいがある。そして、エラー安全なコードを書かないのは予測できない、不安定なコードをもたらす。

この論文は、(いくつかの修正をした)例外安全性のレベルを再文書化した例外安全推奨を提供する。これは、会社や開発者が必要とする、安全性のレベルを達成するために従うべき実質的なガイドラインの包括的なマニュアルとなる。特定の推奨とともに例外を使用することで、エラー安全なコードを書くことを、例外を使用することへの付加的な利益を加えるとともに、挑戦的なことをしないで済むアシスタントライブラリを提供する。

RAD Spiritのためのフレームワーク

  • A Framework for RAD Spirit
  • スピーカー : Joel de Guzman, Hartmut Kaiser
  • 形式 : チュートリアル
  • トラック : Track II 2010

従来のパーサージェネレータと比較したBoost Spiritパーサーの魅力は、それがC++に埋め込まれることである。ライブラリのユーザーは、C++コードにおいてExpression Templateを使ってパーサー文法を直接指定する。このアプローチには利点もあるが、同時に問題もある。

最も目に付く問題点は、

  • コンパイル時間が長い
  • エラーメッセージを理解するのが難しい
  • パーサーのデバッグとテストが難しい

という点である。

小さな構文解析については、これらは許容できる。しかし、アクティブな開発の8年後、より複雑な構文解析の中で使用されるポイントに来た。2と3はどうにか、Protoを使用することで軽減できる。しかしそれは、ライブラリがもはや役に立たない点にコンパイル時間を増大させる。

EBNF/PEG式を受け入れて、すぐに実行可能であるパーサーかC++ Boost Spiritコードを出力するツールを持つことはおもしろい。RADツールは、パーサーを記述することをできるだけ容易にする。

私たちは、そのようなツールの設計と開発を示したい。明らかに、この「動的なSpirit」ツールは「静止なSpirit」を使用して書かれるだろう。これはSpiritを使用した、本当に実用的な例になるだろう。

Is Boost Broken?

Boostのいいところ

  • 形式的なレビュープロセスによるライブラリ品質と完全性の「証明」
  • 形式的なテスト、リリースプロセスの実施による信頼できる実装の「証明」

Boostは拡張性が高くない

  • テスト時間が長く、より長くなる・・・
  • 有名でないコンパイラをテストすることは難しい
  • 現在のテストはコンパイラ設定(RTTIのON/OFF、デバッグ/リリース、STLライブラリなど)のすべての可能な組み合わせを扱うことができるというわけではない
  • より多くのライブラリが追加されるとき、インストールが面倒で、壊れやすくなる
  • したがって、新規ユーザーがひとつのライブラリだけを使い始める場合でも、 Boostを使うための「コスト」と「オーバーヘッド」は時間とともに増加する。しかし、ひとつのライブラリをテスト/使用するための方法がない。

Boostのアイデンティティの危機

  • コアユーティリティの唯一のライブラリ?
    • i) ツールがテスト、リリース、配置を行う
    • ii) ライブラリのサブセットのテスト、リリース、配置が必要であると考えられる
    • iii) 全てのライブラリのためのひとつのバージョンを振る
  • あるいは、独立、分離されたライブラリのグループ(現在大きい)?
    • i) 多く、あるいはほとんどのライブラリが他のBoostライブラリのサブセットにだけ依存する

私の議論は、Boostが前者として始まり、後者へ向かって進化していきそうだということである。
Boostにとってすばらしい10年だったが、成功し続けるためには進化しなければならないだろう。
この発表では、私が、Boostがどのように変わらなければならないと思うかを説明する。

Data Structure Visualizers in Visual Studio 2010

多くのSTLクラスが説明を複雑にした。デバッグをより簡単にするために、Visual Studio 2005と2008は、人間が読めるようにSTLオブジェクトを表示する「Visualizer」を持っていた。誰でも、Boostクラスのような他の型のためのVisualizerを書くことができる。これはアンドキュメントで、サポートもされないが、非常に有用になりえる。

この発表は、shared_ptrfunctionおよびmapの表示を改善するためにVisualizerを書く方法について説明し、Visual Studio 2010の新しい特徴を利用する方法を紹介する。

Boost.Alabaster: A Law Based Tester

  • スピーカー : Joachim Faulhaber
  • 形式 : 講義
  • トラック : Track I 2010

これは、形式的に規定された法則あるいは公理に基づいて自動テストを提供する、Boostライブラリのための提案である。
テストシステムは3部から成る。

  • 法則のインスタンス化変数を表わす型の並び上のクラステンプレートとして公理または法則を表現することを可能にする法則概念。
  • 与えられた法則と与えられた型の並び用の法則インスタンス化を任意に生成する、法則インスタンス用のジェネレーター。
  • 法則違反を選択し、単純性順序によってそれらを格納するフィルタ。

Boost Interval Containerライブラリの開発のために、Boost.Alabasterのプロトタイプは法則に基づいた開発(law based development)に使用された。手法とツールとしての法則に基づいたテスト(law based testing)は、多くの面で有益であることが判明した:

形式仕様の探究はより深く根付いた設計決定を生じさせ、より耐久性のある設計に結びつく。進化のプロセスでは、一般的なソフトウェアに関してあなたが即座に作った公理で開発を始められなかったとしても、ソフトウェア開発(法則のテスト)では前部(仕様)が抽象化と抽象推論を引っ張り出す。法則に基づいた開発プロセスは、ソフトウェアだけでなくそのソフトウェアに関して保証することができる形式上のプロパティももたらす。それらのプロパティの検証はいつでも繰り返す(replicate)ことができる。テストは、退屈で愛されなかった義務から抽象と設計の品質を促進する非常にクリエイティブなプロセスへと変形される。法則に基づいたテストは、従来の単体テストが提示することができる利点をすべて持ち、それを超える方法である。

C++ Tool-Builders Workshop

  • スピーカー : Douglas Gregor
  • 形式 : ワークショップ
  • トラック : Track I 2010

多くの専門家のように、プログラマは、生産性を改善する様々なツールを使用し、プロジェクト特有のニーズに焦点を当てた自分のツールを作るだろう。不運にも、C++プログラマのために、よいC++ツールの構築は、C++コードを解析する固有の複雑さによって非常に複雑になる。C++の全てを解析することができるオープンソースライブラリの不足と結び付けられたこの複雑さは、C++ツールを他の言語でそれらに相当するものより劣らせていた。Clang( http://clang.llvm.org )は、大きなC++開発ツールを構築することをより簡単にすることによりこの不均衡に焦点を当てたサポートを意図した新たなオープンソースC++コンパイラライブラリである。

このハンズオンワークショップでは、出席者は、新たなC++ツールを構築するためにClangライブラリを使用する方法を学習する。私たちはまず、C++プログラムを解析および識別する面白いプログラム構築から始める。そこから私たちは、その抽象構文ツリーによって語彙の構造(トークン、マクロのインスタンス化など)から意味的な構造(クラス、関数、式、テンプレートなど)までClangがどのようにプログラムを表わすかを知るだろう。最後に、私たちは手を汚して、Clangを使用して、あるC++ツールを構築する。私たちが構築する実際のツールは出席者によって決定されるだろう。しかし、可能性は以下のものを含んでいる:

  • プロジェクト絶対コーディング標準、
  • 特定のオーバーロードが選ばれた理由の説明、
  • クラスを自動的に生成するシリアライズコード、
  • Boostライブラリから抽出するドキュメンテーション、
  • あるいは、対話的にテンプレートやプリプロセッサのメタプログラムをデバッグする

といったものを強化する。

プログラム委員会は以下のことに注意する:

私は、Clangに基づいた2つの異なるセッションを提案している。
90分の発表(「Clang: An Open-Source C++ Compiler Library」)は、Clangをコンパイラ、ライブラリおよびオープンソースプロジェクトと評するだろう:
これはあまり深く話せないため、実際には概要である。

ワークショップは、去年のDaveによるハンズオンBoost++0xワークショップに沿った単なる実験ではない:
今年、私たちは、出席者にBoosterが使用するべきクールなツールを構築させることができるかどうか確かめたい。

C++0x Concurrency

  • スピーカー : Michael Wong
  • 形式 : 講義
  • トラック : Track II 2010

この話では、私はBoostCon 09でのC++0x並列性の議論に引き続いて話していくつもりである。
とくに、C++のメモリモデル、新たなC++0xライブラリを通じて並列性がどのように扱われるか、スレッド管理、スレッド間のデータ共有、同期並列操作に関して話す。

Lock-freeプログラミングの基礎

  • The Basics of Lock-free Programming
  • スピーカー : Tony Van Eerd
  • 形式 : 講義
  • トラック : Track II 2010

基礎から始め、共有データにアクセスするという問題を示し、ゆっくり問題を露出させていき、問題へのLock-freeによる解決策を示す。この話は以下を含む:

  • 原始性についての説明
  • CAS命令とCASループについての説明
  • Double-Checked-Locking Pattern(DCLP)の危険性とそれを避ける方法(メモリバリア)の説明
  • read-request queueとwrite-request queueのアイデアに基づき、どのように複数のCPUが働くか理解できるモデルを提示しメモリバリアを説明する
  • Lock free stackを提示する
  • ABAと、それを回避する方法についての説明
  • Lock-freeプログラミング(楽観的なrelaxed memory operation)におけるいくつかの最前線開発に触れる
  • BoostとC++0xがどのようにLock-freeプログラミングに影響するかについて触れる

TBoost.STMエンジン:コミット時無効化を使用したSoftware Transactional Memoryの効率化

ここでは、具体的なTBoost.STMの内部エンジンの現状、トランザクションコンフリクトの検出、トランザクションがコミットできるかどうかを決定するプロセスを調査する。多くのtransactional memory(TM)は矛盾検知の最適化に専念するが、ほぼ全てのTMがトランザクションのコミット段階で同じ矛盾検知戦略を行う。つまり、彼らはコミット時に検証を行うのである。そこでは、トランザクションが、以前にコミットされたトランザクションによってコンフリクトチェックされる。コミット時検証(commit-time validation)が限られた競合を示す作業量に対して効率的な間、それは競合した作業量のために並列性をきびしく制限できる。

ここでは、TBoost.STMがこのモデルからどう逸れるかを説明し、コミット時無効化(commit-time invalidation)を使用することでコミットする前に飛行中(コミットされていない)トランザクションがそれらのコンフリクトを全て解決する戦略について話す。コミット時無効化は競合マネージャ(CM:contention manager)にコミット時検証を通じて利用不可能なデータを供給し、CMが決定にBoost Concurrencyを作ることを可能にする。コミット時無効化はまた、メモリ集約的なトランザクションのためにコミット時検証より著しく少ない操作を必要とし、動的に検出されたread-onlyトランザクションのための操作と保証、どんなトランザクションでもO(N)時間で完全な不透明性を保証する(インクリメンタルな検証のO(N^2)より速い)。作業量競合の実験結果は、私たちの効率的なコミット時無効化されたSTMは、TL2(最高水準のSTM)より3倍速かった。

しかし、コミット時無効化だけでは不十分である。プログラマはそれらがこの競合検出戦略の利点を完全に利用するために実行している作業量のための効率的な競合マネージャに書く方法を知らなければならない。私たちは、プログラマがどのように自身の競合マネージャに書くか、そして正しい競合マネージャが実行される作業量に基づくTBoost.STMの性能を根本的にどうしたら向上させることができるかを調査する。

Using Spirit V2: Qi and Karma

  • スピーカー : Michael Caisse
  • 形式 : 講義
  • トラック : Track II 2010

機械、センサー、機材、クライアント/サーバーコミュニケーション、ファイル形式でさえ...コミュニケーションストリームの解析と生成はどこでも見るだろう。多くの場合、これらのタスクはその場限りの解決策を勧めるのに十分に単純であるか、あるいは小さい。Spirit 2.1ライブラリは、それらの「quick hacks」に取り組むのに十分に単純で、AST生成のために容易に拡張できる十分な機能のモデルを提供する。

このセッションは、Spiritライブラリのパーサーとジェネレーター(Qi/Karma)による現実の経験を調査する。様々な製品の中で使用された、様々な小型/中型のパーサー/ジェネレーターを見るとともに、私たちは「rules-of-thumb」、およびQi/Karmaを持ったパーサー/ジェネレータードメインに取り組むためのガイドラインを確立するだろう。このセッションは、使用可能なXMLパーサーと、単純化されたXPathのようなノード抽出器の実装で終える。

このセッションは、いくつかのレクチャーと、多くのチュートリアルを含む。
出席者は、知識と、Spirit Qi/Karmaで解析し生成することを始めるツールを持ち帰るだろう。

Production use of Boost.Test

  • スピーカー : Gennadiy Rozental
  • 形式 : 講義
  • トラック : Track I 2010

このセッションでは、プロダクションコンポーネントにおいてのBoost.Testの様々な使用法のシナリオをカバーする。
とくに、以下の主題をカバーする:

  • 関数実行を保護するexecution_monitorの使用法。
  • 高水準なプログラム実行保護のためのprogram_execution_monitorの使用法。様々な配置オプション。
    • (New) 浮動小数点例外の取り扱い。
    • (New) コールバックでの罠
  • (New) 生産コンポーネントにおけるBoostテストツールの使用法。
  • 単体テストにおいて:実装自体の内部を構築コンポーネントユニットテストする2つのアプローチ:
    • a) コンパイル時のスイッチを使用する
    • b) コンソールテスト実行と、共有ライブラリとして組み込まれた実装を使用する

An Asio Based Flash XML Server

  • スピーカー : Michael Caisse
  • 形式 : 講義
  • トラック : Track I 2010

Reactiveシステムはいたるところで見つけられる。多くの待ちスレッドでそれらを実装する誘惑は強くなりえる。しかし、結果はほとんどいつも期待はずれである。

Boost.Asioライブラリは、特定のクラスがネットワーク、シリアルポートI/O、タイマー、およびその他に向けられている状態で非同期なリソースを扱うためのフレームワークを提供する。このセッションでは、様々なシリアル入出力ハードウェアコンポーネントから接続されたFlashディスプレイへのデータストリームを送るサーバーを構築するつもりである。以前のセッションのときに開発したQiパーサーとKarmaジェネレータは、それらの適切な目的地へとシャッフルされるASTを作成するのに使われるだろう。

この講演/チュートリアルは、Flash XML Socketからサーバーを組み合わせてデータストリーミングし、要求を受け取ることができるようにAsio、Spirit、Fusion、Phoenix、Smart_ptr、Thread、FunctionとBindを含むライブラリを使用するだろう。
出席者は、彼ら自身のAsioベースサーバーを作成するために、Asioモデルと様々な実装パターンを理解することになるだろう。

The Meta State Machine Library V2

  • スピーカー : Christophe Henry
  • 形式 : チュートリアル
  • トラック : Track I 2010

BoostCon09でのMSM v1に関する私のアーティクルは、MDD(モデル駆動開発)アプローチと呼ばれるMDA(モデル駆動アーキテクチャ)を促進するというゴールをもつライブラリの主な特徴を示した。具体的に、その話はMSMの記述的に表現する性質を主張した。この論文は初めに、メインサポートされたUML機能を要約し、MSM v2によって提供される新たなフロントエンドでのそれらの使用法を示すだろう。第2部では、MDDコンテキストにおいて使用可能なより多くの能力の提供により、いまMSMがどのようにMDD法をより先に進めさせたかを知ることになるだろう。

Transactional Memoryの概観

  • Overview of Transactional Memory Day
  • スピーカー : Tatiana Shpeisman
  • 形式 : 講義
  • トラック : Track II 2010

Transactional Memory(TM)は並列プログラミングを単純化し、制限のない実行モデルをサポートする現代の並列制御パラダイムである。この終日セッションは、それらの最近のTM研究開発について議論するために業界と学会のエキスパートを集める。Boost、IBM、Intel、Microsoft、およびSun Microsystemsから招待された講演者は、最新作の概要を提供してくれるだろう。セッションは彼らがTMの短期的、あるいは長期的な挑戦についての考えを示すところでパネルディスカッションを締めくくる。最後に、聴衆からの質問に答える。

AME Patterns Library: モデリング、認識、シーケンシャルパターンの統合のためのジェネリックライブラリ

  • AME Patterns Library: a generic library for modeling, recognition, and synthesis of sequential patterns
  • スピーカー : Stjepan Rajko
  • 形式 : チュートリアル
  • トラック : Track I 2010

このチュートリアルは、モデリング、認識、シーケンシャルパターンの統合のためのオープンソースのジェネリックC++ライブラリであるAMEパターンライブラリについて発表する。

このライブラリは、ジェスチャーや音声認識などのアプリケーション、およびそのようなパターンの統合に役立つ。また、隠れマルコフモデル(Hidden Markov Model)などのモデルのための汎用ライブラリとして使用することができる。コンセプトベースのジェネリックプログラミングの使用は、ライブラリに大きな柔軟性を与える。パターン解析が多くのドメインにまたがるので、それは役立つだろう。

また、このライブラリはさらに、プログラミングの計算量、柔軟性、汎用性、およびコンパイルタイムの異なるトレードオフを提供する、いくつかのAPIレベルを提供する。

Type Erasure

  • スピーカー : Nevin Liber
  • 形式 : 講義
  • トラック : Track I 2010

C++ Template Metaprogrammingで見つかった定義から始め、Type Erasureとは何かと、それがどのような利点とコストがあるかについて話す。継承ベースのインタフェースから、それをType Erasureで変換する例から始める。Boost.AnyとBoost.Functionの簡易実装をカバーする予定だ。

regular型とクラスの概念について触れる。( http://stlab.adobe.com/wiki/index.php/Image:2008_06_26_classes_that_work.pdf )

それと共に、Copyable/Assignable型のコンテナを使用することでBoost.shared_ptrとBoost.Pointer Containerを比較する。

Protoによる実用的なDSELの設計

  • Practical DSEL Design with Proto
  • スピーカー : Eric Niebler
  • 形式 : 講義
  • トラック : Track I 2010

この発表は、Boost.Protoで有用なDSELを急速に構築する方法に注目する。

このセッションは、数個の現実世界のDSELの設計と実装に踏み出すだろう。簡単な例(例えば、Boost.Assignのmake_list_of())から始めて、中級(例えば、Howard Hinnantのfutureグループ)、最後に、単純化されたPhoenixライブラリの設計について解説する。現実世界のライブラリ設計問題への解決策に重点を置く。特定の現実世界の問題を通じて、ProtoによってC++でそれを実装する価値があるように、一般的なDSELの価値が明白になるだろう。また、コンパイル時間とテンプレートのエラーメッセージについて議論する。

柔軟なヘッダオンリーC++ネットワークライブラリ実装の手法

  • Techniques in Flexible Header-Only C++ Network Library Implementations
  • スピーカー : Dean Michael Berris
  • 形式 : 講義
  • トラック : Track II 2010

この論文は、Boost.Asio上に単純ではあるが強力なヘッダオンリーC++ネットワークライブラリを提供するcpp-netlibプロジェクトによって使用された様々な手法に重点を置く。

一般的なプログラミング法則に従うベストプラクティスから発生している一方、使用される手法のうちのいくつかは他の既存のライブラリから借りられる。この論文は、共通メッセージ型、型安全なURIパーサーおよびオブジェクト表現の非常にモジュラーで柔軟な実装を達成するために使用されるイディオムと同様にライブラリの異なる部品の構成およびセマンティクス的に一貫したHTTPクライアントを強調することを目標とする。

この論文は、ライブラリの様々なモジュールの実装の全体にわたって使用される現代C++の手法に関する調査と、同様にcpp-netlibプロジェクトへの入門として役立つ。

A MIME library for Boost

  • スピーカー : Marshall Clow
  • 形式 : lecture
  • トラック : Track II 2010

インターネットプロトコル中のデータをカプセル化する最も一般的な方法はMIME(Multipurpose Internet Mail Extensions:多目的インターネットメール拡張)を使用することである。このフォーマットはHTTP、emailおよび他の多くのプロトコルの中で使用される。

私は、作成、解析、およびMIME構造の操作のために、Boostを包含するという視点から開始し、このライブラリを作る際の設計選択について話そう。(提案された)Boost.MIMEライブラリはDean Michael Berrisのネットワークライブラリによって使用される(だろう)。

MIME処理ライブラリは、(スレッド、ネットワークI/Oおよび状態マシンを合わせた)ネットワークプロトコルを実装するために必要とされる基本ビルディングブロックのうちの1つである。

The Numerical Template Toolbox:高性能コンピューティングのための加速(Boost)されたGeneric配列ライブラリ

  • The Numerical Template Toolbox:BOOST’ed Generic Array Library for High Performance Computing
  • スピーカー : Joel Falcou, Jean-Thierry Lapreste
  • 形式 : 講義
  • トラック : Track II 2010

配列のようなデータ構造上での集中的、あるいは非自明なコンピューティングを行うことは、科学的なコンピューティング、ビデオゲーム開発、および他のフィールドで最も一般的なタスクのうちのひとつである。この事実は、そのようなタスクを行うために、ツール、言語、そしてライブラリといったかなりの数のものによってバックアップされる。私たちが自身をC++に基づいた解決策に制限する場合、1ダース以上のライブラリはテンプレートメタプログラミングに基づいたBlitz++やEigen2といったBLAS/LAPACKのC++バインディングが存在している。これらのライブラリの全てが良いパフォーマンス、または良い抽象化を提供する場合、そられのどれも非常に多くのユーザー型に適合するようには思えない。

ここで私たちは、Numeric Template Toolbox(NT2)を提供する。これはテンプレートメタプログラミングで、配列に基づいた演算ライブラリで、直感的であるが拡張可能なユーザーAPIと開発者SDKを提供している間に、メモリハンドリングと自動的な並行処理のようなアーキテクチャの懸念に関して良い性能を出すためにrock-solid実装を目指す。また、全体のライブラリ設計とパフォーマンスのためにBoost.Components(MPI, Proto, Fusion, PP, Serialization, etc...)を使用しているという付加価値を強調する。

C++による関数型プログラミング

  • Functional Programming in C++
  • スピーカー : David Sankel
  • 形式 : 講義
  • トラック : Track II 2010

関数型プログラミング(FP)手法は、一般的で、簡潔で、合成可能で、正確なコードを生成する。最近まで、これらの手法の多くは学究的な世界と難解プログラミング言語(esoteric programming language)の領域に制限されていた。新たなC++とboostでの開発は最終的にこれらの高度な技術にアクセス可能にする。

このセッションの最初では、いま可能なFP手法のHowとWhyを調査する。私たちは代数のデータ型、ポイントフリー高階関数、純粋、ジェネリックプログラミング、型族(Type Families)、圏論および実用的な関数記号をカバーする。

セッションの第2部では、FPの事例研究について話す。

  • 第1に、運動コントローラーに基づいた組み込みドメイン特化言語(EDSL)。
  • 第2に、他に類を見ないジェネリックなXMLシリアライズフレームワーク。

C++による論理型パラダイム

  • Logic Paradigm for C++
  • スピーカー : Roshan Naik
  • 形式 : 講義
  • トラック : Track II 2010

論理型パラダイム(LP)は、オブジェクト指向、命令型、関数型のパラダイムと比較して、主流言語では表現をほとんど見ない、強力でチューリング完全なプログラミングパラダイムである。
LPは時々、プログラミングの聖杯と呼ばれるものへのコンピュータ科学の重要なアプローチである。

「ユーザーが問題を延べ、コンピュータがそれを解決する」

理論の起源は、アリストテレスが論理的な推論に厳格さをもたらすために形式論理を構築した約紀元前300年までさかのぼる。ラッセルとホワイトヘッドが数学をすべて実行することができるかもしれないことを示した時、理論は、現代の論理へ最近(1900年の初め)成熟した。

この話は、Boostへ提案することを目的とする新たなオープンソースライブラリであるCastorを中心に展開する。LPをサポートするBoostの能力の拡張に加えて、これはBoostプログラマがLPと関数型のパラダイムからの機能を組み合わせて、イテレータや範囲の必要なしでストリーム、アルゴリズムおよびコンテナの統合を可能にするだろう。

この話は、C++でLPの基本的な入門を提供する。そして、あなたをこのパラダイムについて考えるようにするための多くの例が続く。私たちは、既存のBoostとC++の概念で、それがどのように自然に混じるか話す。最後に、プログラマが自由にパラダイムを混合しマッチすることができる場合に強力なマルチパラダイム解決がどのように出現するか確かめるために範囲を広げる。LPのきれいで深い統合が、C++を源泉とする多くのデザインパターンがいまだ発見されていないことがこの話で明確になるだろう。

QtとBoostによるクロスプラットフォーム開発

  • Cross-platform development with Qt and Boost
  • スピーカー : Joao P. R. Abecasis
  • 形式 : チュートリアル
  • トラック : Track I 2010

このワークショップの意図は、Qtライブラリの簡潔な概要と、QtとBoostを混合するための現在の現実的解決策を提供することである。

とくに私は、MOCモデルとQObjectモデル(BoostとQtを混合したプロジェクトのための構造システムインテグレーション)を調べ、Boostベースのコンポーネントを小さなサンプルアプリケーションに基づくQObjectシグナル/スロット実装に融合させる様相を調査するつもりである。

私は、相互運用問題と、それがどのように改善することができるかについてBoostコミュニティからフィードバックを集めたいと考えている。

Spiritの歴史と進化

今年、私たちは、90年代初期に非常に大きいGUIライブラリから枝分かれし、2001年にBoostデビューしたSpiritの10周年を祝福する。Spiritは、控えめな7ヘッダファイルのライブラリから成長して最も洗練されたBoostライブラリのうちの一つとなり、途中からBoost.Fusion, Boost.Phoenix, Boost.Wave, Boost.Protoライブラリの培養器となった。

私たちは、歴史的観点からSpirit(そして、それに刺激されたライブラリ)を紹介したい。この発表は、およそ10年間で少なくても4つのライブラリへと発展させ、演算子を虐待し、クレイジーなテンプレートメタプログラムを好む、正真正銘のマッドサイエンティストであるBoost作者の経験と観点から、起爆剤を提供することを目標とする。もちろん、あちこちでC++トリックを誇示するのであれば、私たちはそれを助けることはできないが、私たちがそれを行うのと同じくらい、できるだけ簡単にすることができる。

Future of Boost Panel ’10

Boostには、メーリングリストの話題上で、丁寧で、役立つポストを適度に走らせる少数のモデレーターグループがある。さらに、彼らはウェブサイト、ソースリポジトリ、および他の行政機構の内部を管理する。また、大事なことを一つ言い残していましたが、モデレータは、Boostを促進するための委員会を監督する非公式の幹部の役割を務める。

このセッションでは、モデレータにそれぞれBoostの将来のビジョンに関して5分ずつ話してもらう。しかし、セッションの大部分は聴衆からの質問と提案に専念するだろう。これは、Boostコミュニティの方向性に関して何でも聞けて、提案できる絶好のチャンスである。例えば、特別な政策、ツール、あるいはあなたの考えを採用する。

翻訳者

Akira Takahashi