दूसरे दिन, Google ने robots.txt पार्सर के लिए स्रोत कोड प्रकाशित किया। पीवीएस-स्टूडियो द्वारा पहले से ही परीक्षण किए गए प्रोजेक्ट को क्यों न चलाएं और संभवतः एक त्रुटि ढूंढें। जल्दी से नहीं कहा। यह एक अफ़सोस की बात है कि कुछ भी महत्वपूर्ण नहीं पाया जा सकता है। ठीक है, तो यह Google डेवलपर्स की प्रशंसा करने के लिए सिर्फ एक बहाना है।
robots.txt - एक अनुक्रमणिका फ़ाइल जिसमें खोज रोबोट के लिए नियम होते हैं। यह https, http और ftp प्रोटोकॉल के लिए मान्य है। Google ने अपनी robots.txt फ़ाइल पार्सर को सभी के लिए उपलब्ध कराया है। इस खबर के बारे में यहां और पढ़ें:
Google ने robots.txt पार्सर का स्रोत कोड खोलामुझे लगता है कि हमारे लेखों के अधिकांश पाठकों को पता है कि पीवीएस-स्टूडियो क्या करता है। लेकिन यदि आप हमारे ब्लॉग पर नए हैं, तो हम एक संक्षिप्त संदर्भ देंगे। PVS-Studio एक स्थिर कोड विश्लेषक है जो आपको C, C ++, C # और Java में लिखी परियोजनाओं में विभिन्न प्रकार की त्रुटियों, कमजोरियों और कमियों को खोजने की अनुमति देता है। दूसरे शब्दों में, पीवीएस-स्टूडियो एक
सस्टे सॉल्यूशन है और उपयोगकर्ता मशीनों या बिल्ड सर्वर, और
क्लाउड दोनों पर काम कर सकता है। और पीवीएस-स्टूडियो टीम को विभिन्न परियोजनाओं की जांच के बारे में
लेख लिखना पसंद है। तो चलिए व्यापार के लिए नीचे उतरें और Google से पार्सर स्रोत कोड में त्रुटियों को खोजने का प्रयास करें।
हमारे अफसोस के लिए, और, हर किसी की खुशी के लिए, कोई त्रुटि नहीं मिली। केवल कुछ खामियां पाई गईं, जिनके बारे में हम बात करेंगे। आपको कम से कम कुछ लिखना है :)। त्रुटियों की अनुपस्थिति को परियोजना की छोटी मात्रा और कोड की उच्च गुणवत्ता से ही समझाया गया है। इसका मतलब यह नहीं है कि कुछ त्रुटियां वहां छिपी नहीं हैं, लेकिन स्थैतिक विश्लेषण इस समय शक्तिहीन हो गया है।
सामान्य तौर पर, यह लेख हमारे अन्य प्रकाशन की भावना में बदल गया, "
नंगेक्स सत्यापन पर सबसे छोटा लेख ।"
छोटे अनुकूलन की संभावना थी:
V805 प्रदर्शन में कमी। 'Strlen (str)> 0' कंस्ट्रक्शन का उपयोग करके एक खाली स्ट्रिंग की पहचान करना अक्षम है। एक और अधिक कुशल तरीका जाँच करना है: str [0]! = '\ 0'। robots.cc 354
bool RobotsTxtParser::GetKeyAndValueFrom(char **key, ....) { .... *key = line; .... if (strlen(*key) > 0) { .... return true; } return false; }
स्ट्रिंग एक गैर-रिक्त है या नहीं, यह पता लगाने के लिए
स्ट्रैलेन फ़ंक्शन को कॉल करना एक अक्षम तरीका है। इस तरह के एक चेक को बहुत सरल बनाया जा सकता है:
यदि (* कुंजी [0]! = '\ 0') , और आपको स्ट्रिंग के सभी तत्वों के माध्यम से जाने की आवश्यकता नहीं है यदि यह गैर-रिक्त है।
V808 'पथ' ऑब्जेक्ट 'basic_string' प्रकार बनाया गया था, लेकिन उपयोग नहीं किया गया था। robots.cc 123
std::string GetPathParamsQuery(....) { std::string path; .... }
पथ स्ट्रिंग घोषित है, लेकिन आगे उपयोग नहीं किया गया है। कुछ मामलों में, अप्रयुक्त चर एक त्रुटि का संकेत दे सकते हैं। लेकिन यहां ऐसा लगता है कि पहले इस चर का किसी तरह इस्तेमाल किया गया था, लेकिन बदलाव करने के बाद इसकी जरूरत नहीं रह गई थी। इस प्रकार, विश्लेषक अक्सर कोड क्लीनर बनाने में भी मदद करता है और केवल अपनी उपस्थिति के लिए आवश्यक शर्तें हटाकर त्रुटियों से बचने में मदद करता है।
निम्नलिखित मामले में, विश्लेषक,
मुख्य रूप से सभी
मुख्य संसाधित होने के बाद एक डिफ़ॉल्ट
रिटर्न जोड़ने की सिफारिश करता है। यह बहुत अंत में
रिटर्न जोड़ने के लायक हो सकता है ताकि आप समझ सकें कि सब कुछ वास्तव में काम किया है। हालाँकि, यदि इस व्यवहार की योजना बनाई गई थी और कुछ भी बदलने की आवश्यकता नहीं थी, और मैं विश्लेषक संदेश नहीं देखना चाहता, तो पीवीएस-स्टूडियो के मामले में आप इस चेतावनी को दबा सकते हैं और इसे फिर कभी नहीं देख सकते :)।
V591 'मुख्य' फ़ंक्शन एक मान नहीं लौटाता है, जो 'रिटर्न 0' के बराबर है। यह संभव है कि यह एक अनपेक्षित व्यवहार है। robots_main.cc 99
int main(int argc, char** argv) { .... if (filename == "-h" || filename == "-help" || filename == "--help") { ShowHelp(argc, argv); return 0; } if (argc != 4) { .... return 1; } if (....) { .... return 1; } .... if (....) { std::cout << "...." << std::endl; } }
यह भी पाया गया कि नीचे दिए गए दो कार्य, अलग-अलग नामों के साथ समान कार्यान्वयन हैं। शायद यह इस तथ्य का परिणाम है कि इससे पहले कि इन कार्यों में अलग-अलग तर्क थे, लेकिन एक ही आया। या यह हो सकता है कि एक टाइपो कहीं में क्रेप हो, इसलिए ऐसी चेतावनियों को सावधानी से जांचना चाहिए।
V524 यह विचित्र है कि 'MatchDisallow' फ़ंक्शन का शरीर 'MatchAllow' फ़ंक्शन के शरीर के समतुल्य है। robots.cc 645
int MatchAllow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; } int MatchDisallow(absl::string_view path, absl::string_view pattern) { return Matches(path, pattern) ? pattern.length() : -1; }
यह एकमात्र स्थान है जो मुझे संदिग्ध बनाता है। इसे परियोजना के लेखकों द्वारा जांचा जाना चाहिए।
इस प्रकार, Google से robots.txt पार्सर के सत्यापन से पता चला है कि एक परियोजना इतनी सक्रिय रूप से उपयोग की जाती है और, सबसे अधिक संभावना है, बार-बार त्रुटियों की जांच की जाती है, इसका गुणवत्ता कोड होता है। और जो कमियां मिलीं, वे इस धारणा को खराब नहीं कर सकतीं कि Google के कूल कोडर्स इस प्रोजेक्ट में क्या शामिल थे :)।
हम आपको उस परियोजना पर
पीवीएस-स्टूडियो डाउनलोड करने और प्रयास करने की पेशकश करते हैं, जिसमें आप रुचि रखते हैं।

यदि आप इस लेख को अंग्रेजी बोलने वाले दर्शकों के साथ साझा करना चाहते हैं, तो कृपया अनुवाद के लिंक का उपयोग करें: विक्टोरिया खानिएवा।
PVS-Studio चाहता था, लेकिन robots.txt में बग नहीं खोज सका