Gsl लाइब्रेरी में स्पैन और array_view के बीच क्या अंतर है?


94

कई हालिया सम्मेलन प्रस्तुति में मैंने बज़्ने स्ट्रॉस्ट्रप और अन्य लोगों को सी ++ के लिए नए कोडिंग दिशानिर्देशों का उल्लेख किया है और कुछ प्रकार उनका समर्थन करते हैं।

विशेष रूप से, मुझे एक फ़ंक्शन के पैरामीटर के span<T>बजाय उदाहरण (उदाहरण के लिए(T* p, int n) लगभग 32:00 बजे बात में) याद है; लेकिन मुझे उपयोग करने का सुझाव भी याद है array_view<T>। क्या वे दो विकल्प हैं लेकिन एक ही अवधारणा है? या मैं चीजों को भ्रमित कर रहा हूं और वे वास्तव में इतने संबंधित नहीं हैं?

मैं किसी भी आधिकारिक परिभाषा को खोजने के लिए प्रतीत नहीं कर सकता कि वे दोनों क्या होने वाले हैं।


@DavidHaim: संपादित करें, साथ ही उदाहरण के लिए यहां देखें ।
einpoklum

जंगली में व्यू व्यू कार्यान्वयन और प्रस्ताव हैं। क्या आपने उनकी तरफ देखा है?
याक - एडम नेवरामोंट १६'१६

1
मेरा मानना ​​है कि array_viewइसका नाम बदल दिया गया span
गालिक

@ जालिक: क्या आप सबूत दे सकते हैं? यदि आप कर सकते हैं, तो इसे एक उत्तर के रूप में लिखें और मैं इसे स्वीकार करूँगा ...
21

@ यक: हाँ, एक बिट, लेकिन मैं उन चीजों को देख रहा हूं जो जरूरी नहीं कि संबंधित हैं, जैसे कि माइक्रोसॉफ्ट सी ++ एएमपी इत्यादि का हिस्सा। मुझे लगा कि एक से अधिक चीजें हो सकती हैं, जिनका नाम array_viewफ्लोटिंग है।
ईनपोकलम 25

जवाबों:


187

हमने मानक समिति में पुस्तकालय काम करने वाले समूह के लोगों के साथ बात की । वे चाहते थे कि वे केवल पढ़ने के लिए मानक में आने की कोशिश कर रहे हैं। मुख्य दिशानिर्देशों के लिए, हमें एक अमूर्तता की आवश्यकता थी जो पढ़ने और लिखने में थी। (संभावित) मानकों और दिशानिर्देशों (लाइब्रेरी (GSL)) के बीच टकराव से बचने के लिए, हमने अपना नाम (पढ़ा और लिखा) का नाम बदलकर : https://github.com/microsoft/gsl कर दियाarray_viewarray_viewspan


41
और const array_view<T>प्लस array view<const T>संतोषजनक नहीं था?
ईनपोकलम

शून्य लागत अमूर्त मंत्र के लिए प्रतिबद्ध होने के लिए धन्यवाद - मुझे वास्तव में लगता है कि spanबहुत सारे प्रोग्रामर को मूर्खतापूर्ण त्रुटियां करने से बचाएंगे। मुझे लगता है कि इन नए परिवर्तनों का संचार एक स्पष्ट तरीके से किया जा सकता है। मैं बस सोच रहा हूँ - यह कुछ ऐसा नहीं होगा जिसे नियमित यादृच्छिक अभिगमकर्ता के साथ स्पष्ट रूप से हल किया जा सके? क्या प्रकार केवल स्पष्टता के लिए जोड़ा गया था?
बेंजामिन ग्रुएनबाम

6
यह संसाधनों और झूलने वाले बिंदुओं पर बातचीत थी। स्पैन और जीएसएल एक साइड इश्यू था। नील MacIntosh की CppCon 2015 की चर्चा पर नज़र डालें: "सुरक्षित सी + + कोड के लिए array_view और string_view" youtube.com/watch?v=C4Z3c4Sv52U और / या GSL स्रोत पर एक नज़र डालें: github.com/microsoft/gsl । हम हैं। औपचारिक (मानक शैली) विनिर्देश पर भी काम कर रहे हैं।
बज़्ने स्ट्रॉस्ट्रुप

5
एक चिंता थी कि "दृश्य" का मतलब सिर्फ सामग्री को देखना था, उन्हें संशोधित नहीं करना था, इसलिए कुछ लोग पढ़ने / लिखने के संस्करण के लिए एक अलग प्रत्यय चाहते थे। मुझे नहीं लगता कि किसी को केवल पढ़ने के लिए केवल array_view प्रकार के बारे में बहुत परवाह है। यह string_view है कि लोगों का ध्यान केवल डिफ़ॉल्ट रूप से पढ़ा जाता है।
जेफरी यास्किन

ग्राफिक्स कोडर के रूप में जहां 'व्यू' का अर्थ है कि डेटा को पढ़ने / लिखने में किसी का वर्तमान दृश्य (जैसे glViewPort, D3D का सेट व्यूपोर्ट), "व्यू" को केवल पढ़ने के लिए बनाना आश्चर्यचकित करता है, लेकिन बाहर के ग्राफिक्स, मुझे लगता है कि मैं 'दृश्य' को देख सकता / सकती हूं रीड / राइट विंडो की तुलना में रीड-ओनली विंडो की तरह।
ड्वेन रॉबिन्सन 3

44

में CppCoreGuidlines मूल array_viewकरने के लिए दिया गया था span

देखें: https://github.com/isocpp/CppCoreGuidelines/pull/377

यह इस प्रकार वर्णित है:

स्पैन एक बाउंड-चेक, एरे का उपयोग करने के लिए पॉइंटर्स का उपयोग करने के लिए सुरक्षित विकल्प है


2
मैंने आपको + 1 लिया, लेकिन बज़्ने स्ट्रॉस्ट्रुप (वास्तव में?) का उत्तर अधिक विस्तृत है।
ईनपोकलम 25

29
@einpoklum नहीं, मैं समझ गया। मैं शायद मेरे ऊपर भी Bjarne Stroustrup चुना है। नहीं (सूंघ) लेने (सूंघ) यह (सूंघ) व्यक्तिगत (wahhhhhh) ...
Galik

उस टिप्पणी ने मुझे अंदर से कुछ महसूस कराया, इसलिए +1 भी मुझ से ;-)
YePhIcK

11

लाइब्रेरी इवोल्यूशन वर्किंग ग्रुप (LEWG) से दस्तावेज़ P0122R (2016-02-12 ) आधिकारिक तौर पर इस प्रकार का नाम रखता है :
array_viewspan

बदलाव का

R0 से परिवर्तन

  • कोना बैठक में LEWG से निम्नलिखित प्रतिक्रिया के array_viewलिए प्रस्तावित प्रकार का नाम बदला गया span
  • [...]

हम यह भी पढ़ सकते हैं:

मानक पर प्रभाव

यह प्रस्ताव एक शुद्ध पुस्तकालय विस्तार है। इसे मानक कक्षाओं, कार्यों या हेडर में किसी भी बदलाव की आवश्यकता नहीं है। इसे बढ़ाया जा सकता है यदि P0257byte में प्रस्तावित एलाइजिंग व्यवहार के प्रकार और परिवर्तनों पर निर्भर करता है ।

हालाँकि - यदि अपनाया गया है - यह इस नए प्रकार (एक उदाहरण होगा copy()) के लिए कुछ मानक पुस्तकालय कार्यों को अधिभारित करने के लिए उपयोगी हो सकता है ।

spanमानक C ++ (C ++ 11) में लागू किया गया है और C ++ कोड के साथ-साथ वाणिज्यिक कार्यालय उत्पादकता सॉफ़्टवेयर के लिए एक वाणिज्यिक स्थैतिक विश्लेषण उपकरण के भीतर सफलतापूर्वक उपयोग किया जा रहा है। एक खुला स्रोत, संदर्भ कार्यान्वयन https://github.com/Microsoft/GSL पर उपलब्ध है ।

एक अगले अध्याय में, इस दस्तावेज प्रस्तुत रीड-ओनली और पढ़ने-लिखने की ( परिवर्तनशील ) तक पहुँचता है:

तत्व प्रकार और रूपांतरण

spanटेम्प्लेट पैरामीटर के माध्यम से इसके तत्व प्रकार से कॉन्फ़िगर किया जाना चाहिए ValueType, जिसे एक संपूर्ण ऑब्जेक्ट प्रकार की आवश्यकता होती है जो एक सार वर्ग प्रकार नहीं है। spanया तो केवल पढ़ने के लिए या अनुक्रम के माध्यम से परस्पर उपयोग का समर्थन करता है। रीड-ओनली डेटा एक्सेस करने के लिए, उपयोगकर्ता एक घोषणा कर सकता है span<const T>, और म्यूटेबल डेटा तक पहुंच ए का उपयोग करेगा span<T>

[...]


दिशानिर्देश समर्थन लाइब्रेरी समीक्षाspan<T> भी देखें : Marius Bancila (मार्च 2016) से परिभाषित span:

दिशानिर्देश समर्थन लाइब्रेरी प्रकार और में वर्णित कार्यों में से कुछ की एक Microsoft कार्यान्वयन है सी ++ कोर दिशानिर्देश द्वारा बनाए रखा स्टैंडर्ड सी ++ फाउंडेशन । जीएसएल द्वारा प्रदान किए गए प्रकारों के बीच span<T>पूर्व में जाना जाता है array_view<T>

span<T>सन्निहित स्मृति का एक गैर मालिक रेंज संकेत (और आकार काउंटर) या मानक कंटेनर (जैसे के स्थान पर किया की सिफारिश की है std::vectorया std::array)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.