एसटीएल सी ++ दुनिया का एक महत्वपूर्ण टुकड़ा है, अधिकांश कार्यान्वयन स्टेपानोव और मुसर द्वारा शुरुआती प्रयासों से प्राप्त होते हैं।अधिकांश एसटीएल कार्यान्वयन में कोड इतनी गड़बड़ क्यों है?
मेरा प्रश्न कोड की आलोचना को दिया गया है, और यह लोगों के लिए भय और सीखने के उद्देश्यों के लिए अच्छी तरह लिखित सी ++ के उदाहरण देखने के लिए प्राथमिक स्रोतों में से एक है: एसटीएल के विभिन्न कार्यान्वयन क्यों देखने के लिए घृणित हैं एक सौंदर्यशास्त्र बिंदु से सी ++ कोड लिखने के तरीके के बारे में ठोस और आम तौर पर अच्छे उदाहरण।
नीचे दिए गए कोड उदाहरण उन स्थानों पर कोड-समीक्षा पास नहीं करेंगे जो मैंने चरम नामकरण, लेआउट, मैक्रोज़ और ऑपरेटरों के उपयोग से भिन्न कारणों के लिए काम किया है जिनके लिए वास्तव में क्या होता है यह जानने के लिए एक साधारण नज़र से अधिक की आवश्यकता होती है ।
template<class _BidIt> inline
bool _Next_permutation(_BidIt _First, _BidIt _Last)
{ // permute and test for pure ascending, using operator<
_BidIt _Next = _Last;
if (_First == _Last || _First == --_Next)
return (false);
for (; ;)
{ // find rightmost element smaller than successor
_BidIt _Next1 = _Next;
if (_DEBUG_LT(*--_Next, *_Next1))
{ // swap with rightmost element that's smaller, flip suffix
_BidIt _Mid = _Last;
for (; !_DEBUG_LT(*_Next, *--_Mid);)
;
_STD iter_swap(_Next, _Mid);
_STD reverse(_Next1, _Last);
return (true);
}
if (_Next == _First)
{ // pure descending, flip all
_STD reverse(_First, _Last);
return (false);
}
}
}
_Ty operator()()
{ // return next value
static _Ty _Zero = 0; // to quiet diagnostics
_Ty _Divisor = (_Ty)_Mx;
_Prev = _Mx ? ((_Ity)_Ax * _Prev + (_Ty)_Cx) % _Divisor
: ((_Ity)_Ax * _Prev + (_Ty)_Cx);
if (_Prev < _Zero)
_Prev += (_Ty)_Mx;
return (_Prev);
}
कृपया ध्यान दें कि मैं इंटरफ़ेस की आलोचना नहीं कर रहा हूं, क्योंकि यह बहुत अच्छी तरह डिज़ाइन और लागू है। मैं जो चिंतित हूं वह कार्यान्वयन विवरण की पठनीयता है।
ऐसा ही एक सवाल पहले से उत्पन्न किया गया है:
Is there a readable implementation of the STL
Why STL implementation is so unreadable? How C++ could have been improved here?
नोट: ऊपर प्रस्तुत कोड MSVC 2010 एल्गोरिथ्म और कतार हेडर से लिया जाता है।
जैसा कि मैंने इसे पढ़ा है, सवाल वास्तव में नहीं है "एसटीएल इतनी गड़बड़ क्यों है?" लेकिन "एसटीएल के सामान्य रूप से उपयोग किए जाने वाले कार्यान्वयन के कारण इस तरह के स्पष्ट रूप से ठोस स्रोत कोड क्यों हैं?" क्या वो सही है? –
@ जेम्स: यह सही है। मैंने नीचे एक बयान के साथ अपने प्रश्न को और योग्यता प्राप्त की है। –
एसटीएल बिल्कुल एक ऑब्जेक्ट मॉडल नहीं है जिसे व्यापक रूप से अन्य भाषाओं में अपनाया गया था। लेकिन यह आपकी शिकायत का मुद्दा नहीं है। इस तरह का बकवास है कि लाइब्रेरी डिज़ाइनर को तब से जाना होगा जब भाषा में प्रीप्रोसेसर हो। ओह, और एक शीर्षलेख में सभी कार्यान्वयन लिखना है। –