D言語であんまり使うべきでない機能ってある?

最近ゲーム内のActor管理を見直しているのだが、それに従って今まで使ってなかったD言語の機能に少しずつ手をつけ始めている。具体的にはモジュール内の暗黙friendとwith。

で、確かにこいつらは便利なんだけど、これってがんがん使ってもいい機能なのかな。カプセル化とか読みやすさとかの観点から言って、なんかあんまり多用してはいけないような感覚が。

モジュール内暗黙friendは本来publicにしなきゃいけないものをprivateにできるので公開範囲を限定しているという点ではいいのだが、ぱっとコード字面を見たときに、あれなんでこのフィールドここから触れるんだ?っていう違和感がある。

friendの是非に関しては、大先輩であるC++において数限りない論争が行われた後なんだろうけど、C++への理解が浅いからどうにも分からない。そもそもfriendは演算子オーバーロードの時にしょうがなく使う以外の使い方はぜんぶダメっていう位置づけなのか?あとC++のfriendが持つ問題はD言語のモジュールというスコープを導入することで解決されたのか?

もう1つのwithに関しては、その是非に関して一番議論がされている言語が何かすら分からん。DelphiJavaScriptか?

まあこの辺の議論は、大人数での開発における是非がほとんどで、個人開発においてはその辺の価値判断が違うことも多いので、それほど気にしなくてもいいかもしらん。個人でゲーム作る分には、そのコードが読みやすいか、という可読性の1点だけ優れてればそれ以外の保守性とか再利用性とかはどうでもいいような気もする。

再利用性がどうでもいいってのは言いすぎかもしれんが、厳密な再利用性を考えて設計する必要はなくて、コピペフレンドリーなフレームワークになってればだいたいいいんじゃねえのという考え方、っていうのも分かりにくいな。要は

再利用可能な設計にするには手間がかかります。そしてその手間は再利用しないと報われません。そしてそんな機会は実は多くないのです。だから再利用再利用とありもしない未来の事を考えるのはやめましょう。今このソフトをどう設計すればいいかだけを考えるのです。そして後になって再利用したくなったら必要な部分だけコピーして改造すればいいのです。その方が簡単でしょう?

っていうことだな。