Язык программирования D - это статически типизированный, нативно скомпилированный язык, имеющий некоторые важные особенности, вдохновленные Python.
Массивы и ассоциативные массивы встроены в язык. Нет никаких списочных представлений, но библиотеки std.range и std.algorithm заполняют большую часть этого пробела. Например, вот способ суммировать все четные числа от 0 до 100 в D:
auto result = reduce!"a + b"(
filter!"a % 2 == 0"(
iota(0, 100)
)
);
Пока нет аргументов с ключевыми словами, но есть замыкания. Кортежи поддерживаются, но не распаковываются автоматически.
В D вы избегаете указывать классы (и типы в целом) везде с ключевым словом auto
и с шаблонами. Например, вот общий код для поиска произведения массива любого числового типа:
// The return type of product() is inferred.
auto product(T)(T[] array) {
T ret = 1;
foreach(num; array) { // typeof(num) is inferred.
ret *= num;
}
return ret;
}
Поддержка метапрограммирования D состоит из самоанализа во время компиляции (например, вы можете выполнять итерации по полям класса или структуры во время компиляции), информации о типах времени выполнения и шаблонах, которые фактически предназначены для метапрограммирования помимо простых обобщений. Например, вот как написать обобщенную функцию, которая генерирует операцию сравнения по умолчанию для двух структур, что полезно, если вам нужно произвольное общее упорядочение для чего-то вроде двоичного дерева:
/**Returns -1 if lhs < rhs, 0 if lhs == rhs, 1 if lhs > rhs.*/
int compareStructs(T)(T lhs, T rhs) {
foreach(tupleIndex, value; lhs.tupleof) {
if(value < rhs.tupeof[tupleIndex]) {
return -1;
} else if(value > rhs.tupleof[tupleIndex]) {
return 1;
}
}
return 0;
}