Moim zdaniem moc funkcjonalnej czystości polega na tym, że głębokie ścieżki kodu można zweryfikować jako efekt uboczny. Jakie są doświadczenia ludzi w skali drzewa kodu, które mogą znajdować się w czystym specyfikatorze, a jaki poziom ponownego użycia kodu?Czyste funkcjonalne programowanie w D
Kilka rzeczy dostrzegłem:
std.algorithm
nie jest najczęściej oznaczone jako pure
, ale potencjalnie może być w dużym stopniu czystości, albo czystej wersji algorytmów wymagających czystości funkcji instancji lub wstawek, albo przez czystości sam specyfikator jest statycznie polimorficzny.
Przydatne konwertery, takie jak to!string(someInt)
, nie są obecnie czyste.
elemencie zdefiniowane przez użytkownika wydaje się, że problem (jak pokazano poniżej) w:
1. czystych destruktory zagnieżdżonym struktury
2. czystej funkcji postblit nawet nie zagnieżdżonej struktury
Następujący kod obecnie daje wiele błędów na DMD 2.052 wygrać 32-bitowy
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'
Dzięki za komentarze. Zauważyłem słabą definicję czystości podczas eksperymentowania i jest ona wyraźnie bardzo potężna, pozwalając na pełne zmienianie programowania OO w czystym kodzie, a przy tworzeniu leniwych wycisków lub obietnic planowania itp. Mocna forma może być łatwo potwierdzona przez metę -programowanie na kwalifikatorach typu. Sądzę, że aby prawdziwie zbiegać się z wizją, znacznie więcej musi być w czystej kopercie. Problemy z destruktorem i postblitem, o których wspomniałem, mają na mnie największy wpływ, ponieważ potrzebuję odnieść się do liczby w czystym kodzie, czy uważasz, że są to błędy? – John
@John: Tak, to prawdopodobnie błędy. – dsimcha