理由はたくさんあります。Eric Lippertは、理由feature X
はC#にないのは、予算にないからだと何度も述べています。言語設計者には、物事を実装するための無限の時間もお金もありません。また、各新機能には、それに関連するメンテナンスコストがあります。言語をできる限り小さく保つことは、言語設計者にとってだけでなく、代替の実装やツール(IDEなど)を作成する人にとっても簡単です。無料で移植可能。単体テストがライブラリとして実装されている場合、一度だけ記述するだけでよく、言語の準拠する実装で機能します。
Dには単体テストの構文レベルのサポートがあることに注意してください。彼らがなぜそれを投入することにしたのかはわかりませんが、Dが「高レベルのシステムプログラミング言語」であることを意図していることは注目に値します。設計者は、C ++が伝統的に使用されてきた、安全ではない低レベルのコードに対して実行可能であることを望んでいました。そのため、いくつかの安全でないコードが機能することを確認するのに役立つものに余分な労力を費やすことは、彼らにとって理にかなっていると思います。たとえば、特定の信頼できるモジュールのみが、未チェックの配列アクセスやポインター演算などの安全でない操作を実行できるように強制できます。
また、迅速な開発も優先事項であったため、Dコードをスクリプト言語として使用できるようにコンパイルするのに十分な速度でコンパイルするという設計目標を達成しました。ユニットテストを言語に直接ベイクして、追加のフラグをコンパイラに渡すだけでテストを実行できるようにします。
ただし、優れた単体テストライブラリは、いくつかのメソッドを見つけて実行するだけではありません。HaskellのQuickCheckを例にとると、f (x, y) == f (y, x)
「すべてのxとyについて」などをテストできます。QuickCheckはユニットテストジェネレーターとして記述される方が適切であり、「この入力に対して、この出力を期待しています」よりも高いレベルでテストすることができます。QuickCheckとLinqの違いはそれほどありません。どちらもドメイン固有の言語です。ユニットテストのサポートを言語に追加するのではなく、DSLを実用的にするために必要な機能を追加してみませんか?ユニットテストだけでなく、結果としてより良い言語になります。