많은 이유가 있습니다. Eric Lippert는 feature X
C #에 해당하지 않는 이유 는 예산이 충분하지 않기 때문 이라고 여러 번 언급 했습니다. 언어 디자이너는 구현할 시간과 비용이 무한하며 새로운 기능마다 유지 관리 비용이 발생합니다. 언어를 가능한 한 작게 유지하는 것은 언어 디자이너에게 더 쉬운 일이 아닙니다. 대안 구현 및 도구 (예 : IDE)를 작성하는 사람도 더 쉽습니다. 또한 언어의 일부가 아닌 언어로 무언가가 구현되면 무료로 휴대 할 수 있습니다. 단위 테스트가 라이브러리로 구현되는 경우 한 번만 작성하면 언어를 준수하는 모든 구현에서 작동합니다.
D 는 단위 테스트를위한 구문 수준의 지원을 가지고 있습니다 . 왜 그들이 그것을 던지기로 결정했는지 모르겠지만, D가 "고수준 시스템 프로그래밍 언어"라는 점은 주목할 가치가 있습니다. 설계자들은 C ++이 전통적으로 사용되었던 안전하지 않은 저수준 코드의 종류에 대해 실행 가능하기를 원했으며 안전하지 않은 코드의 실수는 엄청나게 비용이 많이 드는 정의되지 않은 동작입니다. 따라서 안전하지 않은 코드가 작동하는지 확인하는 데 도움이되는 모든 것에 추가 노력을 기울이는 것이 합리적이라고 생각합니다. 예를 들어, 신뢰할 수있는 특정 모듈 만 검사되지 않은 배열 액세스 또는 포인터 산술과 같은 안전하지 않은 작업을 수행 할 수 있도록 할 수 있습니다.
빠른 개발은 또한 그들에게 우선 순위가되었으므로 D 코드를 스크립팅 언어로 사용할 수있을 정도로 빠르게 컴파일하는 디자인 목표로 만들었습니다. 베이킹 유닛 테스트는 언어로 바로 테스트되므로 컴파일러에 추가 플래그를 전달하여 테스트를 실행할 수 있습니다.
그러나 훌륭한 단위 테스트 라이브러리는 몇 가지 방법을 찾아서 실행하는 것 이상을 수행 한다고 생각 합니다. 예를 들어 Haskell의 QuickCheck 를 예로 들어 "모든 x 및 y에 대해"와 같은 것을 테스트 할 수 있습니다 f (x, y) == f (y, x)
. QuickCheck는 단위 테스트 생성기 로 더 잘 설명되며 "이 입력에 대해이 출력을 기대합니다"보다 더 높은 수준에서 테스트 할 수 있습니다. QuickCheck와 Linq는 그다지 다르지 않습니다. 둘 다 도메인 별 언어입니다. 따라서 단위 테스트 지원을 언어에 적용하지 않고 DSL을 실용적으로 만드는 데 필요한 기능을 추가하지 않겠습니까? 당신은 단위 테스트뿐만 아니라 결과적으로 더 나은 언어로 끝납니다.