オブジェクトの同一性ってそこまで重要なものなのかな?っていう.この重要性がいまだに自分にはピンとこない. C++ で書いている人なので値の同一性以上のものが本質的に必要になるときってあるの?みたいな.
#あー,そりゃ必要になるときが当然あるにゃー.そうなるとやっぱ smart pointer が第1候補かにゃー.でも,「いつでも entity-base」は C++ の考え方として受け入れがたいよなー.値の同一性 (値のコピー) は言語として提供するから,オブジェクト (entity) の同一性の保証は (それが必要ならば) おまいらプログラマでなんとかしる!っていうのが C++ だしなー.
コレクション (コンテナ) ,一般にコピーが重たいオブジェクトを関数から値返しで返せないという不満については,まさに move semantics が改善しようとしている対象領域.ただし,今手元にない言語の機能で語っても詮無い.
GC は,昔の自分なら要らないと書いたと思うけれど,今は optional/transparent な GC ならあるほうが良いかもねっていう意見にシフト中.それが (ある程度綺麗な形で) 実現できるかどうかはまーおいとくとして.でもこの人とかなら何とかしてくれるかも知れないなー,ってゆー淡く儚い期待.ただし,言語全体に GC を導入するのは自分は絶対に受け入れられないし, C++ としても言語の理念・一貫性・後方互換性の観点から無理だろう.
OOP と Generic Programming っていうのは,どちらが良い悪いではなくて, (少なくとも C++ においては) 相補的な立ち位置に居るという理解.でも自分は OOP がいまだに良く分からないんだよにぇ.なぜ OOP が分からないかを書くと相当長くなる気がするのでまた今度気が向いたら.
そもそもマルチパラダイムプログラミング言語と言ったときに,それが,手続き的にできるよ, OOP ができるよ,汎用プログラミングができるよ,関数プログラミングができるよ,メタプログラミングができるよ,ただそれだけを意味するならそれは極めて悲しい事態だと思う.たとえば「関数プログラミングがやりたければ C++ じゃなくて関数型言語使えばいいじゃん」という言は自分としてはぶっちゃけそりゃそーだろー,と思う.マルチパラダイムプログラミング言語であることの本当のうれしさは,各々のドメイン・粒度に最適なパラダイムを自在に選択でき,なおかつそれらの間を極めて流動的に移行し,各々を円滑に結合できることだとずーっと思っている.だから,たとえば

  • 汎用プログラミングと関数プログラミングは (STL などの汎用ライブラリを一望する限り) 極めて相性が良いように見受けられるけれどそれはどうしてだろうか,とか
  • 静的多態から動的多態へと変換する type erasure にはどれだけの可能性が詰まっているのか,とか
  • どの程度の粒度までなら静的多態が有利でどの粒度から動的多態が有利になるのか,とか

そういう異なるパラダイム間の相互運用性に真摯に向き合う議論があればそれはもう自分にとっては垂涎モノなんですよ,ってゆー.
これから先もずっとハードウェアは進化し続けて,多くのドメインにおいては相対的に速度が重要でなくなっていくことは間違いない.また,優秀な人材は優秀なハードウェアよりも高くつく.今,仮に人材に対する投資とその投資に対する見返り,ハードウェアに対する投資とその投資に対する見返りという二元論的な trade off が単純に成り立つドメインに限って論じるならば,今後,人材,特に人材のプログラミングや低レイヤーに関する知識・技術に投資する分をハードウェアに回して,人材をハードウェアでカバーしようという発想はむしろ適切となるように思う.こういう潮流がある中で C++ は,その立ち位置,あるいは他の言語の存在を考慮すれば,今後対象とするドメインが縮小するという見通しは非常に自然であり,その論点に対して別に異論はない.ただし,こういう議論の多くにおいて言及していない点がいくつかある.たとえば,ハードウェアの速度が速くなればなるほどプログラムが扱うデータ量もそれに (運が悪ければ超線形に) 比例して増加するドメインが存在すること.また,ロングスパンでのハードウェアの進化を見越したとしても絶望的にリソースが足りていないドメイン.消費電力の問題.もちろん,それらの問題に対する直接的な breakthrough があればそれに越したことはないけれど,それは期待すればやってくるような代物でもない.
こういったドメインは極めて専門性が高いことが多い.だから, C++ によるプログラミングを続けていく上で一番重要なのは, C++ の言語仕様の理解とかではなくて,「『それ』は Java とか Ruby とかでもなくて C++ じゃないといけない」という主張が正当となる『それ』に関する知識と理解だというのは,昔っからの自分の信念.
仕事によって言語を選ぶというならば,言語によって仕事を選ぶと発想するバカが1人くらい居ても良さそうな気がする.