Мова програмування d: модулі та їх тестування

Відео: Що таке комп`ютер насправді? / Введення в програмування, урок 1 (javascript ES6)

Модулі та їх тестування
Мова програмування D: модулі та їх тестування

У D немає заголовних файлів і директив #include, а є модулі, дуже схожі на модулі мови Python. Кожен файл за умовчанням є модулем з ім`ям, що збігається з ім`ям файлу, а дійсно глобальних змінних немає зовсім - всі вони обмежені своїм модулем. Ні в D і просторів імен (namespaces) оскільки області видимості символів визначаються модулями. Є кілька форм імпорту модулів:
import std.stdio - // Звичайний імпорт всього вмісту модуля
import widget: fun, gun- // Селективний імпорт
// Імпорт з призначенням псевдоніма
import list = util.container.finite.linear.list-

Компілятор дуже суворий в дозволі можливих конфліктів імен і ніколи не допускає неоднозначностей.

Автоматичне тестування елементів програми зараз використовується настільки широко, що в D ввели спеціальний блок unittest для тестування модулів. У нього поміщається тестовий код, який повинен виконуватися без помилок, якщо модуль працює, як треба (як правило, це директиви assert). При звичайній компіляції цей блок ігнорується, але якщо передати компілятору прапор --unittest, то він компілюється, а при старті програми перед входом в main запускаються тести всіх її модулів. У нашому прикладі з делегатами тест може виглядати так:
unittest {
auto add5 = do_plus (5);
assert (add5 (10) == 15) - assert (add5 (100) == 105);
}

Виконання коду на етапі компіляції




В С ++ можна виконувати код на стадії компіляції за допомогою «шаблонного метапрограмування». Ця техніка дозволяє домогтися небувалої виразності і оптимізації коду (взяти хоча б бібліотеки на зразок boost :: spirit і Eigen), але надзвичайно складна. Її складність викликана тим, що шаблонне мета-програмування в С ++ засноване на чистому хакерстве - використанні шаблонів не за призначенням. Знання С ++ нічого не дає для метапрограмування - це по суті особливий, дуже складний і дуже обмежений в коштах мову. У D виконання коду на стадії компіляції спочатку закладено в дизайні мови. По-перше, на етапі компіляції можна викликати будь-яку функцію:
// (метод 1) спеціальний «статичний assert»
static assert (function_to_call_at_compile_time (arg1, arg2));
// (метод 2) присвоєння enum відбувається на стадії компіляції
enum val = function_to_call_at_compile_time (arg1, arg2);
// (метод 3) ініціалізація статичної змінної відбувається



// на стадії компіляції
static val = function_to_call_at_compile_time (arg1, arg2) -

Мова програмування D: модулі та їх тестування

По-друге, в D є «підмішування» (mixins), подібні операторам eval в скриптових мовах, але виконуються при компіляції. На етапі компіляції будь-який рядок може бути інтерпретована як код:
// Генерує рядок коду, який оголошує 100 функцій
string generate_functions () {
string ret-
foreach (n-1..100)
ret ~ = "void function_" ~ to! string (n) ~
"() {Writeln (" ~ to! String (n) ~ ") -}" -
return ret;
}
mixin (generate_functions ()) - // Компілюємо цей рядок коду
...
function_14 () - // Викликаємо функцію

Звертає на себе увагу оператор конкатенації рядків «~» і дуже просте перетворення числа в рядок.

Підмішування в багатьох випадках повністю замінюють зовнішні генератори коду. Можна, наприклад, взяти текстовий опис GUI (скажімо, XML, створений візуальним редактором) і прямо на місці згенерувати і відкомпілювати код всіх віджетів.

Як же може виконується код, якщо він ще не скомпільовано? Фронтенд компілятора D містить для цього особливий вбудований інтерпретатор. Поки що він має обмеження (наприклад, не вміє виділяти пам`ять для класів), а й те, що вже є, на порядки потужніший, простіше і швидше «хакерського мета-програмування» в С ++. Перспективи такого підходу величезні і поки навіть не осмислені до кінця.

ІНШЕ

Мова програмування go фото

Мова програмування go

Відео: Топ-4 Кращих Мови програмування для Початківців | ТОП Мова програмування Go (https://qoianq.org/) з`явився в 2007…

» » Мова програмування d: модулі та їх тестування