「純粋な」オブジェクト指向プログラミング言語

気になったので走り書き。

純粋なオブジェクト指向プログラミング言語 (pure object-oriented language)
当初からオブジェクト指向プログラミング言語として設計されたもの。Smalltalk、Eiffel、Self、JavaRubyなど。
wikipedia:オブジェクト指向プログラミング


そもそも気になったのが、C#Rubyを「純粋なOOPL*1」として紹介していることが多かったこと。
純粋なOOPLの定義が分からなかったので簡単にググって見たのだが……
これを見るに、「純粋な」がどこにかかるか、が問題になっているっぽい。


「純粋な」が「OOPL」全体を修飾しているとすると、設計の当初からOOPLであることを意識しているように感じる。そのため、この意味解釈だと、Wikipediaの定義はそこまで悪く無いように見える。


一方で、「純粋な」が「OO」にかかるとした場合を考える。つまり、「オブジェクト指向を純粋に表現出来る」PLの意味に取る場合である。
自分は「純粋なOOPL」と言われると、コッチの意味でしか捉えていなかった。
この場合、例えばJavaでは、プリミティブ型が入っているから「純粋」とは言われないはず。各言語がユーザーに対してより便利な手法を与えることが多いため*2に、純粋と呼べる言語はほとんど無い*3と思われる。


ただ一昔前の記憶では、Rubyの記事を読むと、Javaと比較してRubyは純粋なOOPLであることを謳っていることがあった。プリミティブ型でabsなどは出来ないこと強調していたので、これは明らかに後者の意味で比較をしている。
ただ、先に書いたとおり、自分はRubyが後者の意味での純粋なOOPLであるとは思えないかなぁ。

*1:オブジェクト指向プログラミング言語、object-oriented programming language

*2:例えば、C#ではstructがあるし、Rubyの既存クラスへのメソッド挿入などはOOとは少し違うように思うのだが……

*3:少なくとも自分の知っている中にはない。