Эффективный D: лучшие практики и шаблоны проектирования

Интересная конференция была посвящена D-Specific Design Patterns и в сообществе D, некоторые люди думали, что это может быть отправной точкой для a книга, посвященная эффективным методам кодирования. Другие утверждают, что было слишком рано, поскольку не так много людей большой опыт, автор (и) такой книги будет иметь некоторую предвзятую/личную оценку относительно понятия эффективности. SO - это более интерактивный носитель (с его ограничениями). Поэтому, ожидая выхода "Эффективного D", будет здорово, если мы сможем поделиться некоторыми (убийственными) советами/методами/шаблонами, чтобы сделать код D более приятным. Я думаю, что будет яснее, если ответ:

  • выставить уникальную технику
  • - это, по сути, фрагмент кода с комментариями
  • (если он слишком велик) - это просто ссылка на код (public gist...)

Ответ 1

У меня есть несколько сообщений D Tip в блоге (1 2 3).

Здесь один: Тестирование с помощью TypeTuple


При тестировании функции обычно рекомендуется протестировать ее с различными входами. Для этого вы можете легко использовать цикл for над массивом входных значений, но что, если ваш ввод является типом, как это часто бывает с кодом шаблона?

Язык программирования D позволяет вам перебирать TypeTuple, поэтому все, что вам нужно сделать, это объявить кортеж всех типов, которые вы хотите протестировать, и перебирать их обычным способом:

import std.typetuple;
alias TypeTuple!(int, long, double) Types;
foreach (T; Types)
    test!T();

Вы можете задаться вопросом, к чему это компилируется. В конце концов, тело цикла меняется с T, поэтому сгенерированный код также должен меняться на каждой итерации. Как компилятор справляется с этим?

Ответ заключается в том, что цикл полностью развернут. Вышеупомянутый код буквально совпадает с:

test!int();
test!long();
test!double();

По этой причине вам может потребоваться следить за размером ваших TypeTuples, чтобы избежать раздувания кода.