На мой взгляд, сила функциональной чистоты заключается в том, что пути глубокого кода могут быть проверены как свободные от побочных эффектов. Что такое люди?
Полезные преобразователи, такие как в! String (someInt)
, в настоящее время не являются чистыми.
Определенные пользователем структуры, похоже, имеют проблемы (как показано ниже) с:
1. чистые деструкторы во вложенной структуре
2. Чистая функция postblit даже для невложенной структуры
Следующий код в настоящее время выдает несколько ошибок на DMD 2.052 win 32-bit
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'