C 2011 में परिवर्तनीय लंबाई सरणियों को वैकल्पिक क्यों बनाया गया था?


12

जब वीएएलए को सी 1999 में पेश किया गया था, तो मुझे लगा कि यह भाषा के लिए एक महान नवाचार है। हालाँकि, यह जानने के बाद कि इसे 2011 में C के लिए वैकल्पिक बनाया गया था, मैं सोच रहा था कि इसकी स्थिति में क्या बदलाव आया है, और अगर इसका मतलब है कि यह सुविधा वास्तव में अप्रचलन के लिए है। यदि हां, तो क्या गतिशील रूप से आकार के डेटा के स्वत: प्रबंधन के बराबर धारणा है जिसे इसे बदलने के लिए माना जा रहा है?

मैंने सी 2011 के तर्क दस्तावेज़ को खोजने का प्रयास किया, लेकिन यह अभी तक प्रकाशित नहीं हुआ है।


गोद लेने की कमी?
रियान रीच

@RyanReich: शायद, लेकिन विक्रेताओं से प्रतिरोध क्यों?
jxh

जवाबों:


8

मैंने सुना है कि किंवदंतियों को "यह वैकल्पिक होना चाहिए क्योंकि कुछ छोटे संकलक बिना वीएलए के C11-अनुरूप होने में सक्षम होना चाहिए" "यह पहली जगह पर एक गलती थी"। हालांकि मुझे इस बारे में एक भी सही और निश्चित जवाब नहीं मिला है। अंततः, मुझे विश्वास नहीं है कि किसी के पास वास्तव में कारण के रूप में एक है (- और उम्मीद है - एक है) कभी भी खुलासा नहीं किया गया था (जहां तक ​​मेरी पुरानी खोजें चली गईं)।


इंटरनेशनल स्टैंडर्ड - प्रोग्रामिंग लैंग्वेजेज के सी 4 (पेज 13) से - सी 5.10 (2003)

उनके द्वारा स्वीकार किए जाने वाले कार्यक्रमों के संदर्भ में अनुरूप कार्यान्वयन को परिभाषित करके, मानक पत्ते एक अनुरूप कार्यान्वयन के हिस्से के रूप में विस्तार की एक व्यापक श्रेणी के लिए दरवाजा खोलते हैं। दोनों अनुरूपित मेजबान को परिभाषित करने और फ्रीस्टैंडिंग कार्यान्वयन के अनुरूप होने से, मानक ऐसे कार्यक्रमों को ऑपरेटिंग सिस्टम और ROM- आधारित अनुप्रयोगों के साथ-साथ अधिक पारंपरिक होस्ट किए गए अनुप्रयोगों को लिखने के लिए C के उपयोग को मान्यता देता है। इस दो-स्तरीय योजना से परे, सी के लिए कोई अतिरिक्त उप-निर्धारण परिभाषित नहीं किया गया है, क्योंकि C89 समिति ने दृढ़ता से महसूस किया कि कई स्तर एक मानक की प्रभावशीलता को कम करते हैं

जोर मेरा। गौर करें कि यह निर्णय उनके अपने तर्क के विरुद्ध है। फिर भी, एक और बात वैकल्पिक है। अब आपको या तो __STDC_NO_VLA__वीएलए सपोर्ट मिलेगा । यह बहुत ही अजीब फैसला है।


@jxh ने वह भी नहीं देखा। इसे इंगित करने के लिए धन्यवाद, इसे एक स्पष्ट और कम अस्पष्ट शब्दों में बदल दिया गया है। मैंने मोटिफ को कुछ संदर्भों में मकसद और लक्ष्य के पर्याय के रूप में देखा है, लेकिन मेरा मानना ​​है कि यह केवल कलात्मक परिदृश्यों में आम है।
बर्नार्डो सुल्ज़बाक

केवल दो-स्तरीय योजना होने के साथ समस्या यह है कि कई उपयोगी विशेषताएं और गारंटी हैं जो व्यापक रूप से समर्थित हैं, लेकिन सार्वभौमिक रूप से समर्थित नहीं हैं, और जो कुछ प्रकार के कार्यक्रमों को अधिक कुशलता से लिखे जाने की अनुमति दे सकती हैं अन्यथा संभव नहीं होगा। इस तरह की सुविधाओं की उपलब्धता के लिए परीक्षण के किसी भी मानक साधन की कमी एक महत्वपूर्ण अंश के लिए आवश्यक बनाती है यदि मानक में शामिल लोगों से परे गारंटी का उपयोग करने के लिए कई क्षेत्रों में व्यावहारिक कार्यक्रमों का बहुमत नहीं है, और इसके साथ निर्धारित करना मुश्किल है। निश्चित है कि क्या कोई विशेष ...
सुपरकैट

... कार्यक्रम किसी विशेष कार्यान्वयन के साथ काम करेगा। वैकल्पिक सुविधाओं और गारंटियों की एक बड़ी विविधता को परिभाषित करना, जो कार्यान्वयन या तो समर्थन कर सकते हैं या मना कर सकते हैं (संकलन को अस्वीकार करके) यह परीक्षण के लिए एक अच्छा आसान मानक तरीका संभव होगा कि क्या एक कार्यक्रम जो ठीक से अपनी आवश्यकताओं को निर्दिष्ट करता है, एक मंच पर सही ढंग से काम करेगा या नहीं? इसे बनाने के लिए। अगर यह बनाता है, यह काम करेगा। यदि नहीं, तो यह स्पष्ट रूप से नहीं होगा। उन कार्यक्रमों के अंश को बढ़ाना जिनके लिए यह सुनिश्चित करना संभव होगा कि एक सफल निर्माण सफल संचालन की गारंटी देगा ...
सुपरकैट

... कंपाइलरों की संख्या को अधिकतम करने की तुलना में कहीं अधिक मूल्यवान होगा जो कि उन छोटे-छोटे कार्यक्रमों को संभाल सकता है जो सुविधाओं से लाभान्वित नहीं होते हैं और मानक से अधिक की गारंटी देता है।
सुपरकैट

4

जहां तक ​​मैं सार्वजनिक समिति के दस्तावेजों (विशेष रूप से एन 1395 ) से निर्धारित कर सकता हूं , वीएलए के (जटिल अंकगणित और सूत्रण के साथ) वैकल्पिक बनाने का एक प्रमुख कारण यह था कि छोटे छोटे प्रोसेसर के लिए अनुरूप सी कंपाइलर बनाना संभव हो सके।

प्रवृत्ति यह थी कि संकलित सिस्टम को लक्षित करने वाले कंपाइलर विक्रेता C90 मानक पर बने हुए थे, क्योंकि उन बड़ी विशेषताओं की शुरूआत के लिए जो उनके ग्राहक नहीं पूछ रहे थे।


कई मामलों में, "बाहर निकलने के लिए कह रहे थे"। एक बार जब आप रैम पदचिह्न परिवर्तन को देखते हैं तो जब आप उन सुविधाओं को सक्षम करते हैं तो यह स्पष्ट हो जाता है कि कुछ लोग उन्हें क्यों नहीं चाहते हैं। यह प्रोसेसर की लागत को दोगुना कर सकता है, जो सिस्टम का सबसे महंगा हिस्सा हो सकता है।
Ⴖ uі

1
@ जेरेकॉफिन: हाँ, लेकिन कोड केवल तभी उत्पन्न होता है जब आकार () वास्तव में सरणी पर उपयोग किया जाता है। संकलक को जानकारी को ट्रैक करने की आवश्यकता होती है ताकि यह सही कोड उत्पन्न कर सके, लेकिन उस जानकारी को वीएलए के मेमोरी प्रतिनिधित्व में एम्बेड नहीं किया जाना चाहिए।
18

2
@jxh: जैसा कि मूल रूप से कल्पना की गई है, फ्रीस्टैंडिंग और होस्ट किए गए कार्यान्वयन ने एक ही मूल भाषा का उपयोग किया है। मतभेद पुस्तकालय तक ही सीमित थे। वीएलएएस के मामले में, भाषा में ही अंतर है कि (कम से कम कुछ विक्रेताओं को लगा) वास्तव में छोटे एम्बेडेड सिस्टम के लिए उपयुक्त नहीं था। जहाँ तक आकार को एम्बेड करने की बात है: नहीं, यह शायद कभी पूरी तरह से आवश्यक नहीं है, लेकिन सबसे आसान तरीका हो सकता है (जैसे, आकार के लिए भंडारण के कुछ बाइट्स इसे गणना करने के लिए कोड के कई बाइट्स से बच सकते हैं)।
जेरी कॉफ़िन

1
@ सुपरकैट: मैं चेरी को सी लाइब्रेरी की कार्यक्षमता के तर्क को देख सकता हूं, लेकिन भाषा की विशेषताओं को "वैकल्पिक" बनाने से लगता है कि कोई व्यक्ति बहु-मंच सी कोड लिखने की कोशिश कर रहा है। यह प्रयोग किया जाता है कि सी प्रोग्रामिंग है कि आसानी से एक अलग संकलक और विभिन्न हार्डवेयर मंच के लिए retargeted किया जा सकता है धातु प्रणालियों के करीब के लिए स्वाभाविक पसंद था किया जाना है। अब, यह इतना स्पष्ट नहीं है।
jxh

1
@ सुपरकैट: स्टैक पर बमबारी करना वीएलए के लिए अद्वितीय नहीं है। असामान्य रूप से बड़ी स्वचालित वस्तुओं या एक अनर्गल फ़ंक्शन कॉल स्टैक में समान समस्याएं होंगी। यदि मानक उन मामलों के लिए विफलता का पता लगाने के साधन को परिभाषित करता है, तो यह वीएलए के लिए भी काम करेगा। वैकल्पिक के संदर्भ में, यह सिर्फ नई परियोजनाओं में नए सी कोड में नई सी विशेषताओं का उपयोग करने के लिए बहस करना कठिन बनाता है, जिन्हें कई विक्रेताओं से संकलक का उपयोग करके कई प्लेटफार्मों पर काम करना आवश्यक है।
jxh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.