Причин багато. Ерік Ліпперт багато разів заявляв, що причина feature X
не в C #, тому що це просто не в їхньому бюджеті. Мовні дизайнери не мають нескінченної кількості часу та грошей на реалізацію речей, і кожна нова функція пов’язана з цим витрат на обслуговування. Збереження мови якомога меншою не просто для мовних дизайнерів - це також простіше для всіх, хто пише альтернативні реалізації та інструменти (наприклад, IDE). Крім того, коли щось реалізується з точки зору мови, а не з її частини, ви отримуєте портативність безкоштовно. Якщо тестування одиниць реалізовано як бібліотека, вам потрібно написати лише один раз, і вона працюватиме в будь-якій відповідній реалізації мови.
Варто зазначити, що D має підтримку на рівні синтаксису для тестування одиниць . Я не знаю, чому вони вирішили це зробити, але варто зазначити, що D мається на увазі "мова системного програмування високого рівня". Дизайнери хотіли, щоб це було життєздатним для типу небезпечного, традиційно використовуваного коду низького рівня C ++, а помилка в небезпечному коді неймовірно дорога - невизначена поведінка. Тому я вважаю, що їм було доцільно витрачати додаткові зусилля на те, що допоможе вам перевірити, чи працює якийсь небезпечний код. Наприклад, ви можете встановити, що лише певні довірені модулі можуть виконувати небезпечні операції, такі як неперевірений доступ до масиву або арифметика вказівника.
Швидкий розвиток також був пріоритетним для них, настільки, що вони поставили за мету проектування, що D-код збирається досить швидко, щоб зробити його корисним як мову сценарію. Тести випічки одиниць прямо на мову, щоб ви могли запустити свої тести, просто передавши додатковий прапор компілятору.
Однак я думаю, що велика бібліотека тестування блоків робить набагато більше, ніж просто знайти деякі методи та запустити їх. Візьмемо для прикладу QuickCheck Haskell , який дозволяє перевірити такі речі, як "для всіх x і y f (x, y) == f (y, x)
". QuickCheck краще описується як одиничний тестовий генератор і дозволяє перевірити речі на більш високому рівні, ніж "для цього вводу, я очікую цього результату". QuickCheck та Linq не так вже й різняться - вони обидві доменні мови. Тож, замість того, щоб зафіксувати підтримку модульного тестування на мові, чому б не додати функції, необхідні для того, щоб зробити DSL практичними? Ви закінчите не просто тестування, але й кращу мову.