Чистое функциональное программирование на D

На мой взгляд, сила функциональной чистоты заключается в том, что пути глубокого кода могут быть проверены как свободные от побочных эффектов. Что такое люди? Полезные преобразователи, такие как в! 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'  
22
задан Brad Gilbert 31 July 2014 в 20:15
поделиться