言語仕様が一番複雑なプログラミング言語は何だろうか?主観的な意見として、○○の機能があるとか、ないとか、そういう話になるだろう。しかし、客観的に判断するとしたら、どうするべきだろうか?
一つはBNFを用いた比較だろう。しかし、BNFは文法の複雑さの指標になっても、それらが意味するところの解釈の複雑さについては指標にならない。そこで、解釈を含めたその言語仕様を全てカバーしたもの、つまり、規格書を比較すればいいのではないかと考えた。
プログラミング言語によっては国際的な規格書が存在しないものもある。特にオープンソースで開発されている言語では、コミュニティーの合意によって作成された複数の文献によって仕様が形作られているというのもある。なかには、実装がそのまま仕様であり、明文化されていないものもあるだろう。また、仕様自体がHTMLである場合、それがどれぐらいの量であるかを把握するには難しい(各ページの文字数カウント等が必要であろう)。そこで、今回はPDF化・書籍化されたものに限定し、ページ数を数えることにした。規格書についてはWikipediaの下記ページを参考にした。
Comparison of programming languages - Wikipedia
以下、主な言語についてまとめた表である。内容やページ構成の違いによって大きくページ数が異なることがあるため、絶対的な指標とはならないことに注意して欲しい1。
言語 | 規格書 | ページ数 |
---|---|---|
Fortran | ISO/IEC 1539-1:2010 + ISO/IEC 1539-2:2000 | 603 + 20 |
COBOL | ISO/IEC 1989:2014 | 927 |
C11 | ISO/IEC 9899:2011 | 683 |
C++17 | ISO/IEC 14882:2017 | 1605 |
C#2.0 | ISO/IEC 23270:2006 | 531 |
Ruby1.8 | ISO/IEC 30170:2012 | 313 |
ECMAScript8 | Standard ECMA-262 | 885 |
C#5.0 | Standard ECMA-334 | 516 |
Java10 | Java SE Specifications | 772 |
SQL:2016 | ISO/IEC 9075-1:2016 1,2,3,4,9,10,11,13,14 | 78+1707+391+188+471+376+327+151+444 = 4133 |
※ C#、Rubyについては国際規格の方が後付けであるため、最新のバージョンよりも低い。そのため、その後のバージョンでで追加された機能は記載されていない。
※ 規格化に当たり、全ての言語仕様が記載されていない場合がある。Rubyは1.9以降を考慮したサブセットでの記述になっているし、ECMAScriptにはブラウザのJavaScriptで標準搭載されているDOM周りのAPIは含まれていない。
C++はRubyの5倍以上である。他言語と比較してもほとんどの言語に対してダブルスコアをたたき出している。よくC++は言語仕様が複雑という話があるが、客観的な指標のひとつとしてこの表をみれば納得できるか面もあるかと思う。
-
詳しくは@take_cheezeさんのコメントを参照。 ↩