На мой взгляд, сила функциональной чистоты заключается в том, что глубокие кодовые пути можно проверить как свободные от побочных эффектов. Каковы опыты людей в масштабе дерева кодов, которые могут находиться внутри чистого спецификатора, и каков уровень повторного использования кода?Чисто функциональное программирование в D
Несколько вещей, которые я заметил:
std.algorithm
в основном, не помеченный как pure
, но потенциально может быть в значительной степени чистыми, либо чистой версией алгоритмов, требующих чистоту функции инстанцирования или Mixin, либо чистота сам спецификатор статически полиморфен.
Полезные преобразователи, такие как to!string(someInt)
, в настоящее время не чисты.
определенного пользователь Структуры, кажется, есть проблемы (как показано ниже): 1.
чистых деструкторов на вложенную структуру
2. чистая функция postblit даже на невложенную структуру
Следующего кода в настоящее время дает несколько ошибок на DMD 2,052 выиграть 32-битном
struct InnerStruct
{
pure this(this) {}
pure ~this() {}
}
struct OuterStruct
{
InnerStruct innerStruct;
pure this(this) {}
pure ~this() {}
}
pure void somePureFunc()
{
OuterStruct s1 = OuterStruct(); // pure nested destructor does not compile
OuterStruct s2 = s1;
InnerStruct is1 = InnerStruct(); // pure non-nested destructor seems to compile
InnerStruct is2 = is1; // pure non-nested postblit does not compile
}
void main()
{
somePureFunc();
}
pure_postblit.d(18): Error: pure function 'somePureFunc' cannot call impure function '__cpctor'
pure_postblit.d(20): Error: pure function 'somePureFunc' cannot call impure function '__cpctor'
pure_postblit.d(18): Error: pure function 'somePureFunc' cannot call impure function '~this'
pure_postblit.d(17): Error: pure function 'somePureFunc' cannot call impure function '~this'
Спасибо за ваши комментарии. Я заметил слабое определение чистоты в то время, когда экспериментирую, и это явно очень мощно, позволяя полное программируемое программирование OO в чистом коде, а также при создании ленивых оценочных шутов или планировании обещаний и т. Д. Сильную форму можно легко утверждать мета -программирование на классификаторах типов. Я думаю, что для высококонкурентного видения, чтобы действительно взлететь, гораздо больше нужно быть в чистом конверте. Проблемы деструктора и postblit, о которых я упоминал, больше всего влияют на меня, поскольку мне нужно ссылаться на счет в чистом коде, вы думаете, что это ошибки? – John
@John: Да, это, наверное, ошибки. – dsimcha