【プログラミング】本気でD言語を採用するのですか・・・?
要件に合うのは恐らくRustですが・・・D言語を採用します。
D言語の難点
現代D言語は、どうやらバイナリサイズ警察には抗えない可能性が高いです。
(hello worldで1MB付近)
ただ、これはgoと同じく自前GCと非同期周りで膨らんでいる模様(?)
Linuxのコマンドとしては非常にネックになりますが、Linuxコマンドの仮説新パラダイムに移るに辺り受け入れることにしました。
D言語の利点
非同期処理を関数型言語のように組もうと考えていますが、その上でD言語で興味を引くのは下記4つ
メモリアロケータの独自実装
遅延評価
C++との相性
ビルド速度
メモリアロケータの独自実装に関して
各論理プロセッサ毎に、断片化していない作業領域(メモリ)が欲しい・・・その点、メモリアロケータを自分で作れるのは強いです。
mapやzipで使うような一時的に使うだけの配列やタプル・・・
これらはすぐに使い捨てるので、起動時に確保したメモリ内でノーチェックで使い回して良いはずのため試したいところです(仮説 爆死フラグ)
遅延評価(lazy)
CとC++が顕著、そしてC#でも最悪引っかかりそうですが・・・デバッグ用出力がパフォーマンスを下げたり、酷い時は不可解なバグに繋がります。
assertはリリースビルドの時に何もしない関数になります。しかし、引数の評価自体は行われるため、コストが100%無くなる保証もありません。
(最適化で消えてくれるとは思いますが)
その点、lazyで明示化して抹消でき、しかも標準で対応している。ここは強みと考えます。
C++との相性
C++のライブラリも一部は移植されています。何より、core.stdcpp.memoryにunique_ptrが居ます。
プロファイリングの結果から、ボトルネック箇所だけを狙ってムーブセマンティクスを導入できる・・・
これは、実装時の工数に加えて、保守の工数も減ってくれるんじゃないかなと考えます。
ビルド速度
ビルド時間の長さ次第で、退職を検討するプログラマも安心です。
総括
Rustの方が将来的に良い、Goは業務案件がある分潰しが効くという懸念はありますが・・・
C++とRustの中間に位置するD言語に張ろうと思います。
最悪爆発四散しても、RustとモダンC++両方の勉強になる
おしまい