江添亮
http://cpplover.blogspot.jp/
boostcpp@gmail.com
@EzoeRyou
GFDL 1.3 with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
Cube - Page - Concave - Zoom - Linear - Fade - None - Default
Bjarne Stroustrup
C++のオリジナルの設計者にして最初の実装者
Stroustrup、ケンブリッジで博士号を取得するべく研究中
分散システム上で動作するソフトウェアの研究
実証のため、大規模なシミュレーターを書かなければならない
Simulaで書いた
「Simulaで書くのは最高だった」
クラス機能によって、問題をそのままコードに落とし込める
クラス自体がコルーチンのように並列実行できる
強い型システムとコンパイル時警告
分割コンパイルしてリンクが遅い
実行速度が遅い
メモリ確保がすべてGC
これらを無効にする方法がない
僅かな部分をコンパイルして、
コンパイル済みのバイナリへのリンクが遅い
すべてのソースコードを単一のファイルで
コンパイルするのに比べて、30倍遅い
メモリ確保はすべてGC
明示的にリソース管理をしているのにすべてGC
実行時間の80%がGCで浪費
シミュレーターが遅すぎて使い物にならない
このままでは研究が実証できない
Stroustrupの博士号が危うい
BCPLで全面的に書きなおした
「BCPLに比べれば、Cがとても高級な言語に見えた」
型がない
コンパイル時チェックもない
何もない
BCPLはとても速い
リンクが速い
実行速度も速い
シミュレーターは動いた
二度とまともなツールなしに大規模な問題に取り組まないと誓う
Stroustrupは、なんとか博士号を取得。
ケンブリッジを去る
Bell Labで職を得る
十分なコンピューター資源が与えられる
優秀な同僚(K&Rも在籍)との議論が推奨される
仕事内容、「なにか面白いことをやれ」
結果は一年後に報告
ネットワークに繋がれたコンピューター群
その上で動作するUNIXカーネルについて
まともなツールなしでは
二度と大規模な問題には挑まない
まともなツールを作る
C言語に独自のプリプロセッサーを組み合わせたツール
C言語にSimulaのクラス機能をもたらす
名前を変えてツールから言語へ
手で書くCと変わりない実行効率
他の言語とリンクできるバイナリ互換
線形探索より複雑なアルゴリズムを使わず実装可能
C with Classesは複数のプロジェクトで使われるようになった
これより進化させるには、本物の言語として、新たに設計と実装が必要
得られた経験をもとに、新しい言語C++を作る
Rick Mascittiが提案
元ネタはK&RのC言語
その元ネタはMartin RichardsのBCPL
さらに元ネタはKen TompsonのB言語
StroustrupによるC++のリファレンス実装
移植性を重視
C++の完全なコンパイラー
無料
C++の設計と進化のための実装
ツールとしては貧弱
C++が十分に普及すれば独立した実装が出るはず
それまでの間、動く実装を提供
世の中にはコンピューターの種類が多すぎる
名前すら聞いたことのないようなOSがある
アセンブリや中間コードを出力したのでは対応しきれない
C言語コンパイラーはほとんどの環境にあり、移植性が高い
Cコードを出力
CPP済みのC++コードを受け取る
パース、内部表現に変換、解析、Cコードで出力
単なるプリプロセッサーではない
C++普及のために必要
多くの自称良いツールは
多くの教授が、商用コンパイラーを要求した
そこで商用版も発売した
結果、CFrontの改変版が各社から発売
アルゴリズムとデータ構造は
特定の型やバイト列とは独立して実装できる
オブジェクトのサイズや、構築やコピー方法さえ引数化できれば
後は汎用的に実装できるはず
int min( int x, int y )
{ return x < y ? x : y ; }
double min( double x, double y )
{ return x < y ? x : y ; }
struct int_list_node
{
int value ;
int_list_node * prev ;
int_list_node * next ;
} ;
プリプロセッサーは字句的に処理する
文法やスコープを考慮しない暴君
文法とスコープを尊重する機能がほしい
型を引数にできる機能
template < typename T >
T min ( T x, T y )
{ return x < y ? x : y ; }
テンプレートはコンテナーを書くために設計された
コンテナーとは値の集合を管理するためのクラス
実装に使うデータ構造がどうあれ、操作は汎用化できる
C++の標準ライブラリ
主にコンテナーとアルゴリズム
Alexander Stepanovが設計、実装
Adaも早くからテンプレート機能を持っていた
Stepanovは、当初AdaでSTLの実装に挑戦
当時のAdaコンパイラの実装の問題により挫折
その後、Bell研究所に転職 StepanovがC++にやってきた
C++でようやくSTL実装に成功
コンパイル時に行うプログラミング
1994年、Erwin Unruhが標準化委員会で提示したテンプレートのコード
コード自体はコンパイルエラー
ただし、エラーメッセージが、素数のみ出力される
UnruhはC++における最初のメタプログラマーとなる
Unruhの意図
テンプレートはコンパイル時プログラミングを行えるほど複雑である
ゆえに、もっと制限を加えるべき
大多数の標準化委員会の感想
「すばらしいものだ」
その後、多くのメタプログラミング技法が発見される
メタプログラミングをサポートするための機能が多く追加される
今後も発展が期待される
理想
あるプログラムが合法か違法か決定できるもの
現実
C++では、すべてのプログラムに白黒をつけることができない
C++の標準規格を制定する
C++の分裂を防ぐ
ある種の挙動は規定せずに実装にまかせる
ANSIとISOがある
下院(ANSI)と上院(ISO)のような関係
ほとんどの規格制定はANSIで行う
議論、提案、文面変更など
メンバーはたいてい企業の代表
投票権はひとつの企業につき一票
特定の企業を代表しない個人も一票
年三回ほど、一週間の会議が開かれる。
ANSIの作業結果を投票により承認する
主要な各国に支部がある
投票権は、ひとつの国につき一票
最終的に、FCDを出す
ISOの各国支部が投票する。
可決されれば規格制定
慣習的に、規格制定は全員一致
ドラフト編集作業では、特に国籍にはこだわらない
アメリカの標準団体が強権を発揮することもない
関心のある企業、グループ、個人が提案
議論、文面案作成、ドラフト入り
新機能の提案を会議のために準備し、会議で可決される
CDに対して各国支部が国を代表するNBコメントを出す
最終的な投票も一国一票
慣習的に全国一致で規格制定
投票権というよりは拒否権
はやく正式な規格が制定されてほしいという利害は一致
十分に妥協できるところで規格制定
会議以外の議論は非公開のメーリングリスト
非公開の理由は、積極的な議論を促すため
しかし、今の時代には閉鎖的
C++の標準化と啓蒙を目的としたC++財団を設立
誰でも参加できるメーリングリストを設置
それまで納期ごとに一括公開していた論文を、逐一公開
その他、C++の教育記事執筆など
C++のドラフト規格のソースコード(tex)をGitHubで公開
Pull Requestも絶賛受付中
1998年
遅れに遅れた標準規格が制定
規格制定にあまりに時間をかけすぎてしまった
C++実装が規格に追いつくための時間が必要
委員に最新技術に追いつくための時間が必要
標準化委員会の活動をしばらく縮小
2003年
文面の曖昧な点や矛盾点を修正したマイナーアップデート
新機能はほとんどなし
世はC++のさらなる進化を必要としている
標準化委員会の活動、再び活発化
大規模な文面変更と新機能追加
200x年に制定予定なのでC++0x
2011年
遅れに遅れて、ようやく規格制定
「C++0xのxは16進数」というジョークまで
特にコンセプト機能でもめた
一旦ドラフト入りしたコンセプト機能を取り除くだけで一年半以上遅れた
2014年制定予定
C++11に対するマイナーアップデート
文面の曖昧性や矛盾点を多く解決
小粒な新機能を追加
Clangがすでに機能完全に実装済み
GCCも積極的に実装中
2017年制定予定
次のメジャーアップデート
多くの新機能を追加する
ISOのC++WGの日本支部
日本を代表して意見と投票を行う
1992年、1993年頃
C++WG JP設立前にも私的な会議が何度か行われていた
慶応SFCの斎藤信夫先生が設立に尽力
「日本でも標準化にコミットするための委員会をつくろうと思う」
斎藤信夫先生が初代主査
日本の情報規格調査会傘下
複雑になりすぎたC++のサブセットを作ろうという日本の動き
実装が簡単でオーバーヘッドのないサブセット
C++WG JPとは独立した業界団体
8-bit, 16-bitマイコンでも使えるC++のサブセットの規定
1995年11月10日に第一回会議が行われる
NEC、日立、富士通、松下、三菱、日本モトローラ、東芝の半導体部門の開発ツール担当者
ツールベンダ
Cygnus,GreenHills,PlumHall,Dinkumware,ADaC, 日本ノーベル,横河YDC
C++に独占権利を主張するわけではないが・・・
言語の分裂は利用者も分断してしまう
どうせやるならば、標準化委員会で議論してはどうかと提案
EC++団体が標準化委員会に合流
国際会議で提案を発表
しかし、ゼロオーバーヘッドで実装できるとの反論多数
反論がPerformance TRとしてまとめられる。
日本独自のよくわからない理由で機能削減されたサブセット規格
各社独自の閉鎖的な環境で開発されたコンパイラー
プラットフォームは非力なマイコン
使われるわけがない
2000年代から、存続の危機に
既存のスポンサーはEC++のコンパイラー実装のため
余裕のある一部大企業を除いてスポンサー大量離脱
その一部大企業も、もはや標準化委員会の籍をおいているだけ
国際会議はおろか、国内会議にも出席せず
2005年
C++WG JPに籍をおいていた最後の教育関係者にして三代目の主査が逝去
東京工科大学の越田一郎先生
以降、C++WG JPに教育関係者なし
しばらく主査は東芝の林田が担当
現在の主査は日本アイ・ビー・エムの安室
2007年
もはや国際会議に日本代表を送るスポンサーがいない
国内会議にも3,4人しか出てこない
企業側の標準C++への関心低下
C++の仕様が大きくなりすぎたため、
1企業単独で C++コンパイラを開発するのは困難となり
EDG や Dinkumware などを購入して C++を構築するようになった
このため、標準C++に対する関心が低下した。
言語規模にかかわらずコンパイラーの開発は広い分野の人間を必要とする
一社単独の閉鎖的な環境でコンパイラーを開発できる時代ではない
そのような不自由なコンパイラーは、規格準拠度が低い
自社のコードだけコンパイルが通ればよいという考えに陥りやすい
EDGやDinkumwareのような不自由ソフトウェアではなく
GCCやClangのような自由ソフトウェアに金を出すべきだった
2006年
スポンサー、教育者、人、何もかもが不足
国内活動すらままならない
このままでは存続すら危うい
日本を代表して意見表明するC++WG JPを残さなければならない
せめて、人材だけは維持しなければならない
人づてにエキスパートメンバーを勧誘
エキスパートメンバーが大幅に増える
個人に年会費などはない
極小数のスポンサーつき委員
圧倒的多数の活動的なスポンサーなし個人
いびつながらも国内会議が続けられるように
C++WG JP存続
国際会議でドラフト入りした提案論文のレビュー
レビュー:論文を全訳して問題点の洗い出し
NBコメントの取りまとめと議論
C++03までは、規格の日本語訳をJIS規格として出していた
人と金を出すスポンサーからの要請
今はスポンサーもいない
大多数の人も義務のないスポンサーなしの個人
C++11のJIS規格のための翻訳が行われない
C++11以降は、会議すら行われない
標準化委員会の会議は、メンバーしか参加できない
会議には、場所の確保やら議事録の作成やら、事務仕事が多い
しかし、大多数のメンバーはスポンサーを持たない個人
なぜそんな閉鎖的な会議にするのか?
委員会の外の非公式な勉強会
費用はほとんどかからない
委員会外からも参加者を募れる
最近の活動は、もっぱら非公式勉強会
東京在住のエキスパートメンバーが主催
足立 高徳(ARMを翻訳した人)
林田 誠司(東芝)
日本のC++界に激震走る
これまで行く金がなかった
National Bodyを通して参加
すなわちC++WG JP
日本代表(Head of Delegation)となる
日本国を代表し
全C++利用者を代表し
全権委任されて
日本国の代表として参加
あまりにも重すぎて
上位組織が認めない
2009年に、一人だけ参加した者がいる
当時の議長に私的に連絡を取り
議長のお友達として潜り込んだ
日本のNational Bodyに身を置いている人間が
何故そんな屈辱的な非正規の方法で
国際会議に参加しなければならないのか
上位組織に認めてもらう必要がある
上位組織の個人と、委員会の外で私的に懇意になって認めてもらう
National Bodyの存在意義は
国家の代表を国際会議に送り込むことだ
ここにその機会と能力のある人間がいる
国際会議に参加できないとはどういうことだ
議長のお友達枠で潜り込むとはどういうことだ
委員会の外の活動とはどういうことだ
C++小委員会は
個人メンバーの活動に支えられてきた
ITSCJ = 社団法人情報規格調査会
金は規格賛助員の会費で賄われてきた
規格賛助員とは、企業がなるもの
ITSCJの規格賛助員が減ったため
ITSCJに魅力がないから減った
でも、規格賛助員は増えない
個人メンバーは金を出さないので不公平である
よって、個人メンバーの扱いを変える
従来のエキスパートメンバーとメールメンバー資格は
個人メンバーからは剥奪
アドバイザーを新設
個人メンバーはアドバイザーに押し込める
この機会に個人メンバーの数を減らす噂
これまでC++小委員会の活動を
支えていた個人メンバーに
何たる扱いだ
個人メンバーがいなくなれば
C++WG JPはさらに活動停滞する
江添亮は規格賛助員になれたとして
何の活動もない組織になぜ金を払う必要があるのだ
金を払わない個人メンバーを追い出して
ますます金を払う価値のない組織にした
おめでとう