में शुद्ध कार्यात्मक प्रोग्रामिंग मेरे दिमाग में कार्यात्मक शुद्धता की शक्ति तब होती है जब गहरे कोड पथ को दुष्प्रभाव मुक्त के रूप में सत्यापित किया जा सकता है। कोड पेड़ के पैमाने में लोगों के अनुभव क्या हैं जो शुद्ध विनिर्देशक के अंदर हो सकते हैं, और कोड पुन: उपयोग के स्तर का क्या हो सकता है?डी
कुछ बातें मैं देखा:
std.algorithm
ज्यादातर pure
के रूप में चिह्नित नहीं है, लेकिन संभावित काफी हद तक शुद्ध हो सकता है, या तो instantiating समारोह या mixin की शुद्धता की मांग एल्गोरिदम का एक शुद्ध संस्करण से, वरना शुद्धता से स्पष्ट रूप से स्थिर रूप से polymorphic होने के नाते।
to!string(someInt)
जैसे उपयोगी कन्वर्टर्स वर्तमान में शुद्ध नहीं हैं।
उपयोगकर्ता परिभाषित structs के साथ (जैसा कि नीचे बताया) समस्याओं के लिए लग रहे हैं: एक नेस्टेड struct पर
1. शुद्ध विनाशकर्ता
2. भी एक गैर नेस्टेड struct
निम्नलिखित कोड पर एक शुद्ध postblit समारोह वर्तमान में डीएमडी 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'
आपकी टिप्पणियों के लिए धन्यवाद। मैंने प्रयोग करते समय कुछ समय पहले शुद्धता की कमजोर परिभाषा देखी, और यह स्पष्ट रूप से बहुत शक्तिशाली है, शुद्ध कोड में पूर्ण उत्परिवर्तनीय ओओ प्रोग्रामिंग की अनुमति देता है, और आलसी-मूल्यांकन थंक्स या शेड्यूलिंग वादे आदि बनाते समय मजबूत रूप आसानी से मेटा द्वारा लगाया जा सकता है प्रकार क्वालिफायर पर प्रोग्रामिंग। मुझे लगता है कि अत्यधिक समवर्ती दृष्टि के लिए वास्तव में बाहर निकलने के लिए, एक शुद्ध लिफाफे के अंदर होने की आवश्यकता है। मैंने जो विनाशक और पोस्टब्लिट मुद्दों का उल्लेख किया है वे मुझे सबसे ज्यादा प्रभावित कर रहे हैं क्योंकि मुझे शुद्ध कोड में गिनती का संदर्भ देने की आवश्यकता है, क्या आपको लगता है कि वे बग हैं? – John
@ जॉन: हाँ, ये शायद बग हैं। – dsimcha