>Rubyの「全てがオブジェクト」みたいな謳い文句はJavaに対する差別化でしかないと思っていて、Javaよりモダンな言語が多数登場した今となっては賞味期限切れな台詞なのではないか
twitter.com/mod_poppo/status/1

いや、当時の Ruby のそのコピーは Perl に対するカウンターで C++ や Java のようないわゆる「オブジェクト指向言語」に対するものではなかった筈。

Java は「オブジェクト指向」であること以上に、当時はカオスになってた UNIX 系プラットフォームでバイナリ互換のコードが吐けることが画期的だった。"write at once, run ahywhere" って奴。まぁ実際には "debug anywhere" だったんだけどw

当時は同じ UNIX なのにバイナリ互換性がないことが凄く問題だったのよ

あれから30年近く経って,その間に のようなシングルバイナリでマルチプラットフォーム対応な言語&高速コンパイラが登場して,あのときの苦労はなんだったんだ,とは思うねw

書籍『Clean Architecture』では

>オブジェクト指向プログラミングは、間接的な制御の移行に規律を課すものである。

とざっくり書かれている。もう少し言えば、オブジェクト指向ってのはオブジェクトという概念を使って「振る舞い」に関する制約を構成する。

もし Perl にオブジェクト指向な言語仕様を追加できれば面白いだろう(今世紀に入って Perl はオブジェクト指向な要素を追加した話を聞いた気がするが... うろ覚えゴメン)。最近のバージョンは知らないが、元々の Ruby の動的型システムは確か duck typing で、基本型を含めて、まさに振る舞いによる制約を構成するものだ。スクリプト言語はオブジェクト指向と相性がいいよね

私は若い頃、C言語(C++ではない)でオブジェクト指向プログラミングを設計&実装させられた事があって、それと C++ を比較して「オブジェクト指向言語すげー」と思ったことがある。その後 Java を触るようになって、ポインタをすべて参照で隠蔽する思い切った言語設計に苦笑した覚えがある。今どきの人はむしろポインタこそ難解な概念かもしれないけどw

産業界でも Ruby が台頭し始めて改めて思ったのが「コンパイル言語ってオブジェクト指向プログラミングと相性が悪いんじゃねーの?」だった。

これが覆ったのが を知ってから。クラスも継承もなく、枯れた言語仕様のみで構成されてるのに無理なくオブジェクト指向プログラミングができるのはある意味で衝撃的だった。関数型プログラミングの要素を極力排除する、時代と逆行する言語設計も面白い

フォロー

さっき紹介した『Clean Architecture』では

>関数型プログラミングは、代入に規律を課すものである。

と、これまたざっくりと書かれている。

恥ずかしい話だが、ロートルエンジニアの私は未だに関数型に慣れない。脳内でスパスパっとコードが書けないでいる。これが少し緩和されつつあるのが Rust である。

Rust は所有権の概念を使って部分的に「代入に規律を課」している。まぁ、ガチの関数型言語を操ってる人から見れば「何言ってるの?」って感じだろうがw

まぁでも、Rust の勉強は中断して久しいので、やるなら最初からやり直しだなぁ。仕事で Rust をやるというのなら飛びつくだろうけど

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。