読者です 読者をやめる 読者になる 読者になる

なぜC++にはキーワード引数が取り入れられなかったか?

C++の設計と進化」の1エピソードより抜粋。
odzさんの

そういえば静的言語でキーワード引数をサポートしているのってあったかな。メジャーなところではあまりない気がする。

キーワード引数 - odz buffer

に反応している部分でもあり。
フルで引用はせずにダイジェスト気味に。


C++の設計と進化」のP.192に件の詳細がある。(索引にもあるので簡単に見つかります)

キーワード引数は、関数の引数を呼び出しの名前で指定できる機能だ。
その提案は、技術的にはほとんど完璧だった。
だからこの提案が受けいれられず却下された理由は、とりわけ興味深い。
拡張作業部会は、この提案がほとんど冗長であること、既存のC++のコードとの非互換性を招くこと、
あまりよくないプログラミングスタイルを推奨しそうなこと、……以上を理由として提案を却下した。

と書いてあるが、実際にそれだけの理由で却下されたと言うわけではない。
本書ではこの「キーワード引数」を用いることでよりプログラムをロバスト(堅牢)にできそうな例を持ち出している。

しかし、

キーワード引数がなくても私たちはそれほど困らない、ということも事実だった。

ということと、

キーワード引数が呼び出しインタフェイスと実装の間に、新しい形の束縛(binding)を導入することだ

という難点を挙げている。
引数名のbindingで困るのはhppとcppを使い分けなければならないC++プログラマにとって頭が痛いことだ。

そして、様々な紆余曲折を経て、

C++の可読性に対するこの提案の貢献は負だ

という結論を導き出した。
わざと端的に抜き出すが、

キーワード引数は、私たちが下手な書き方だと見なすコードにおいて最も便利だ、という結論になる。
私たちが衰退してほしいと願っているプログラミングスタイルを主にサポートする新機能を、導入することが果たして道理的だろうか?

ということになった。


個人的にはそこに続く「キーワード引数に代わるもの」という章も必見だと思う。
立ち読みできるレベルなので是非。

C++の設計と進化

C++の設計と進化