>Rubyの「全てがオブジェクト」みたいな謳い文句はJavaに対する差別化でしかないと思っていて、Javaよりモダンな言語が多数登場した今となっては賞味期限切れな台詞なのではないか
https://twitter.com/mod_poppo/status/1748868929613881458?s=20
いや、当時の Ruby のそのコピーは Perl に対するカウンターで C++ や Java のようないわゆる「オブジェクト指向言語」に対するものではなかった筈。
Java は「オブジェクト指向」であること以上に、当時はカオスになってた UNIX 系プラットフォームでバイナリ互換のコードが吐けることが画期的だった。"write at once, run ahywhere" って奴。まぁ実際には "debug anywhere" だったんだけどw
当時は同じ UNIX なのにバイナリ互換性がないことが凄く問題だったのよ
あれから30年近く経って,その間に #golang のようなシングルバイナリでマルチプラットフォーム対応な言語&高速コンパイラが登場して,あのときの苦労はなんだったんだ,とは思うねw
私は若い頃、C言語(C++ではない)でオブジェクト指向プログラミングを設計&実装させられた事があって、それと C++ を比較して「オブジェクト指向言語すげー」と思ったことがある。その後 Java を触るようになって、ポインタをすべて参照で隠蔽する思い切った言語設計に苦笑した覚えがある。今どきの人はむしろポインタこそ難解な概念かもしれないけどw
産業界でも Ruby が台頭し始めて改めて思ったのが「コンパイル言語ってオブジェクト指向プログラミングと相性が悪いんじゃねーの?」だった。
これが覆ったのが #golang を知ってから。クラスも継承もなく、枯れた言語仕様のみで構成されてるのに無理なくオブジェクト指向プログラミングができるのはある意味で衝撃的だった。関数型プログラミングの要素を極力排除する、時代と逆行する言語設計も面白い
さっき紹介した『Clean Architecture』では
>関数型プログラミングは、代入に規律を課すものである。
と、これまたざっくりと書かれている。
恥ずかしい話だが、ロートルエンジニアの私は未だに関数型に慣れない。脳内でスパスパっとコードが書けないでいる。これが少し緩和されつつあるのが Rust である。
Rust は所有権の概念を使って部分的に「代入に規律を課」している。まぁ、ガチの関数型言語を操ってる人から見れば「何言ってるの?」って感じだろうがw
まぁでも、Rust の勉強は中断して久しいので、やるなら最初からやり直しだなぁ。仕事で Rust をやるというのなら飛びつくだろうけど