निम्नलिखित प्रोग्राम के आउटपुट का अनुमान लगाएं:
अगले भाग पर जाने से पहले यह अनुमान लगाने का प्रयास करें कि आउटपुट क्या है।
कार्यक्रम निम्नलिखित आउटपुट प्रदर्शित करेगा:
Halló heimur is 13 characters long.
आपकी आंखें आपको धोखा नहीं दे रही हैं - "हैलो हेमूर" में 12 वर्ण हैं (अंतरिक्ष सहित)। आइए पीछे हटें और देखें कि रस्ट का String प्रकार कैसे काम करता है। की आंतरिक संरचना परिभाषा Stringकाफी सीधी है:
स्ट्रिंग्स केवल बाइट्स ( u8) का एक वेक्टर है, जो यूटीएफ -8 नामक एन्कोडिंग में यूनिकोड वर्णों का प्रतिनिधित्व करता है। जंग स्वचालित रूप से आपकी स्ट्रिंग को यूटीएफ -8 में अनुवादित करती है। एन्कोडिंग इस तरह दिखता है:
आपकी मूल स्ट्रिंग, "Haló hemur" में 11 ASCII वर्ण (स्पेस सहित) और एक "लैटिन -1 पूरक" वर्ण शामिल हैं: ó। ASCII वर्णों को एन्कोड करने के लिए 1 बाइट की आवश्यकता होती है, लैटिन पूरक के लिए दो बाइट्स की आवश्यकता होती है।
रस्ट की स्ट्रिंग एन्कोडिंग प्रत्येक यूनिकोड वर्ण के लिए अतिरिक्त शून्य संग्रहीत नहीं करने के लिए पर्याप्त स्मार्ट है। यदि ऐसा होता है, तो स्ट्रिंग चार प्रकार का वेक्टर होगा। रस्ट char बिल्कुल 4 बाइट लंबा है - एक यूनिकोड वर्ण का अधिकतम आकार । चर एक एकल ASCII वर्ण का प्रतिनिधित्व नहीं करते हैं; इसके बजाय, वे एक यूनिकोड अदिश मान का प्रतिनिधित्व करते हैं । अदिश मान एकल ग्लिफ़ या किसी अन्य ग्लिफ़ में संशोधन का प्रतिनिधित्व कर सकता है।Char
String.len()स्ट्रिंग के बैकिंग वेक्टर में बाइट्स की संख्या की गणना करता है। यदि प्रत्येक वर्ण को चार के रूप में संग्रहीत कर रहा था, तो आप 48 बाइट्स मेमोरी पर कब्जा करने String की अपेक्षा करेंगे । Halló heimurजंग String पात्रों का भंडारण नहीं कर रहा है; यह एक बाइट सरणी संग्रहीत कर रहा है जो संग्रहीत पाठ को आउटपुट करने के लिए आवश्यक बाइट्स का प्रतिनिधित्व करता है।
सभी UTF-8 वर्णों को रेंडर करने के लिए सभी 4 बाइट्स की आवश्यकता नहीं होती है। उदाहरण के लिए, एक स्थान के लिए केवल 1 बाइट की आवश्यकता होती है ( 0x20), जबकि अधिकांश लैटिन एक्सटेंशन वर्ण 2 बाइट्स का उपयोग करते हैं। पहला बाइट ( 0xC3) इंगित करता है कि वर्ण लैटिन एक्सटेंशन वर्ण क्षेत्र का उपयोग करता है, और दूसरा बाइट ( 0xB3for ó) वर्ण की पहचान करता है।
स्ट्रिंग Halló heimurमें 11 ASCII वर्ण होते हैं - प्रत्येक 1 बाइट मेमोरी का उपयोग करता है - 11 बाइट्स पर कब्जा करता है। "ó" के लिए दो बाइट जोड़ें और आपकी स्ट्रिंग में 13 बाइट्स मेमोरी होती है।
Halló heimurआप निम्न कोड के साथ वर्णों को सही ढंग से गिन सकते हैं :
जब आप कॉल करते my_str.chars()हैं, तो आप एक पुनरावर्तक का अनुरोध कर रहे हैं जो स्ट्रिंग के प्रत्येक तत्व को a के रूप में प्रदर्शित करता है char। रस्ट सही ढंग से यह अनुमान लगाता है कि कुल 12 ग्लिफ़ हैं - या यूनिकोड स्केलर मान - स्ट्रिंग बनाते हैं। इटरेटर उनमें से प्रत्येक को आपके उपभोक्ता को 4-बाइट चार के रूप में पास करता है। भले ही ग्लिफ़ को केवल 1 या 2 बाइट्स मेमोरी की आवश्यकता हो, रस्ट चार प्रकार के लिए सभी 4 बाइट्स आवंटित करेगा। इटरेटर को ट्रैवर्स करने से बहुत कम अतिरिक्त मेमोरी का उपयोग होता है। यदि आप collect()इटरेटर को कॉल करते हैं - चार डेटा का वेक्टर बनाने के लिए - वेक्टर 40 बाइट्स मेमोरी का उपभोग करेगा।
my_str.chars()एक स्ट्रिंग में अलग-अलग वर्णों तक पहुँचने के लिए उपयोग करें । यह एक पुनरावर्तक है, इसलिए आप जो खोज रहे हैं उसे खोजने के लिए आप nth, और अन्य पुनरावर्तक कार्यों का उपयोग कर सकते हैं। for_eachउदाहरण के लिए, आप स्ट्रिंग में चौथे वर्ण तक पहुंच सकते हैं my_str.chars().nth(4)।
यूनिकोड स्ट्रिंग साइज़िंग कई बार भ्रमित करने वाला हो सकता है, जिससे आपके कोड में आश्चर्यजनक परिणाम हो सकते हैं। आपको वर्णों और बाइट्स के बीच अंतर के बारे में पता होना चाहिए:
यह पश्चिम की रोलिंग पहाड़ियों में एक शानदार सुनहरी सुबह है, क्योंकि सूरज की पहली किरणें मैदानों पर पाले से ढकी घास को रोशन करती हैं। शांत एंगस मवेशियों का एक झुंड, जेट काले और बड़े पैमाने पर, सूर्योदय के खिलाफ छाया हुआ है क्योंकि वे एक पीटा निशान के नीचे अपना रास्ता बनाते हैं जो वे सभी अच्छी तरह से जानते हैं; नाश्ता बार।
आज की आपस में जुड़ी हुई दुनिया में, साइबर हमलों का खतरा पहले से कहीं अधिक प्रचलित है। साइबर अपराधी और राष्ट्र-राज्य अभिनेता लगातार कमजोरियों का फायदा उठाने और मूल्यवान डेटा चोरी करने की कोशिश कर रहे हैं, जो सभी आकार के संगठनों के लिए एक महत्वपूर्ण जोखिम पोस्ट कर रहे हैं।
मैं हाल ही में दुनिया के सबसे बड़े पेशेवर सोशल नेटवर्क लिंक्डिन पर था, और मेरे द्वारा अनुसरण किए जाने वाले फ्रीलांस डिजाइनरों के पोस्ट मिले जिन्होंने मेरा ध्यान आकर्षित किया। उन सभी ने हवाई जहाज से, अपने लैपटॉप के साथ समुद्र तट पर, स्विमिंग पूल से, और आश्चर्यजनक दृश्यों वाले कार्यालयों से तस्वीरें पोस्ट कीं।
यह मुझ पर अचानक प्रहार करता है जैसा कि यह अक्सर करता है यह फिर से बीच का रास्ता है <नहीं, वह नहीं जो प्रशांत में आप मैरून हैं, जो कार्निवल में है> हर हेडलाइन जोर से… ..
[ट्रिगर अलर्ट: इस निबंध में जॉर्डन नेली के हत्यारे की प्रशंसा करने वाले लोगों के स्क्रीन शॉट्स शामिल हैं।] कानून प्रवर्तन अधिकारियों ने आखिरकार - और शायद अनिच्छा से - डैनियल पेनी पर आरोप लगाया, जिसने जॉर्डन नेली को तब तक मार डाला जब तक वह मर नहीं गया, उस हत्या के लिए।
यदि आप इसे अकेले करने की कोशिश करते हैं तो एक नए करियर पर स्विच करना बेहद चुनौतीपूर्ण हो सकता है। जवाबदेही भागीदारों को ढूंढना महत्वपूर्ण है जो आपके समान सीखने के स्तर पर हैं, जो समान लक्ष्यों, दृढ़ता और ड्राइव को साझा करते हैं।