नए C / C ++ मानकों के लिए विजुअल स्टूडियो सपोर्ट?


102

मैं C99 और C ++ 11 और इन सभी पूरी तरह से मीठी चीजों के बारे में पढ़ता रहता हूं जो भाषा मानक में जुड़ रही हैं जो किसी दिन उपयोग करने के लिए अच्छा हो सकता है। हालाँकि, हम वर्तमान में विजुअल स्टूडियो में C ++ लिखने की भूमि में हैं।

क्या मानक में कोई भी नया सामान कभी विज़ुअल स्टूडियो में जोड़ा जाएगा, या ऐसा करने के लिए Microsoft नए C # वेरिएंट को जोड़ने के लिए अधिक इच्छुक है?

संपादित करें: स्वीकृत उत्तर के अलावा, मुझे विजुअल C ++ टीम ब्लॉग मिला:

http://blogs.msdn.com/vcblog/

और विशेष रूप से, इस पोस्ट में:

https://web.archive.org/web/20190109064523/https://blogs.msdn.microsoft.com/vcblog/2008/02/22/tr1-slide-decks/

बहुत उपयोगी। धन्यवाद!


3
मुझे समझ में नहीं आता है कि vcblog से 2008/02 के लेख में आपको क्या उपयोगी मिला, क्योंकि इसमें बताई गई विशेषताएं लंबे समय से मौजूद हैं और यह काफी प्रसिद्ध है। C ++ 0x की विश्व-बदलते विशेषताएं अलग-अलग हैं: lambda फ़ंक्शन, इनिशियलाइज़र, आदि en.wikipedia.org/wiki/C%2B%2B0x पर सूचीबद्ध हैं ।
अमित

ब्लॉगs.msdn.com/vcblog/archive/2009/04/22/ हाल का लेख देखें (मुझे पता है कि यह बाद में है जब सवाल पूछा गया था)
amit

1
दृश्य स्टूडियो के हाल के संस्करणों में बहुत सुधार किया गया है, जैसे 2015 अपडेट 2: visualstudio.com/en-us/news/vs2015-update2-vs.aspx#Cdoubleplus
रिकार्डो पेरेस

जवाबों:


103

एमएस के पास सार्वजनिक उत्तरों की एक श्रृंखला है, उनमें से अधिकांश अपने उपयोगकर्ताओं को दोष दे रहे हैं। इस तरह:

https://devblogs.microsoft.com/cppblog/iso-c-standard-update/

अब, विजुअल C ++ कंपाइलर टीम को कभी-कभार सवाल मिलता है कि हमने C99 को लागू क्यों नहीं किया। यह वास्तव में हमारे उपयोगकर्ताओं से ब्याज पर आधारित है। जहाँ हमें कुछ C99 सुविधाओं के लिए कई अनुरोध मिले हैं, हमने उन्हें (या एनालॉग्स) लागू करने की कोशिश की है। कुछ उदाहरण variadic मैक्रो नहीं है, long long, __pragma, __FUNCTION__, और __restrict। यदि अन्य C99 सुविधाएँ हैं जो आपको अपने काम में उपयोगी लगेंगी, तो हमें बताएं! हम अपने सी उपयोगकर्ताओं से ज्यादा नहीं सुनते हैं, इसलिए बोलते हैं और अपने आप को सुनते हैं

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360

नमस्ते: दुर्भाग्य से हमारे उपयोगकर्ताओं के बहुमत से हमें प्राप्त होने वाली भारी गड़बड़ी यह है कि वे पसंद करेंगे कि हम C-99 के बजाय C ++ - 0x पर ध्यान दें। हमारे पास कुछ खास सी -99 फीचर्स (वैरिएड मैक्रोज़ long long) "चेरी-पिक" हैं, लेकिन इसके अलावा हम सी -99 स्पेस (कम से कम शॉर्ट टर्म) में ज्यादा कुछ करने की संभावना नहीं रखते हैं।

जोनाथन गुफाएँ

विजुअल C ++ कंपाइलर टीम।

यह मामलों की एक बहुत दुखद स्थिति है, लेकिन यह भी समझ में आता है अगर आपको संदेह है कि एमएस उपयोगकर्ताओं को लॉक करना चाहता है: यह आधुनिक जीसीसी-आधारित कोड को MSVC में पोर्ट करना बहुत कठिन बनाता है, जो कम से कम मुझे बेहद दर्दनाक लगता है।

एक समाधान मौजूद है, हालांकि: ध्यान दें कि इंटेल इस पर बहुत अधिक प्रबुद्ध है। इंटेल सी कंपाइलर C99 कोड को संभाल सकता है और यहां तक ​​कि gcc के समान झंडे भी हैं, जिससे प्लेटफार्मों के बीच कोड पोर्ट करना बहुत आसान हो जाता है। इसके अलावा, इंटेल संकलक दृश्य स्टूडियो में काम करता है। तो एमएस कंपिल को स्क्रैप करके आप अभी भी एमएस आईडीई का उपयोग कर सकते हैं जो आपको लगता है कि किसी प्रकार का मूल्य है, और अपने दिल की सामग्री के लिए C99 का उपयोग करें।

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


42
फिर भी, मुझे लगता है कि उनका असली कारण वही है जो उन्होंने कहा था: C ++ / C # /। NET / ASP समुदाय की तुलना में विंडोज पर C समुदाय संभवतः लगभग न के बराबर है, या नगण्य है। इस प्रकार, उनके पास एक वैध बिंदु है। इसके बावजूद कि मेरे पास एक लिनक्स है, और g ++ की तरह, मैं केवल C99 की वजह से MSVC ++ को स्क्रैप नहीं करूंगा, क्षमा करें।
पियरसबल

11
यदि वे कम से कम हमें (int i;;) और इनलाइन के लिए देते हैं।
निक वान ब्रंट


2
C ++ 0x- उन्मुख विकास के बारे में उनके जवाब का सबसे अच्छा हिस्सा यह है कि अब, 4 साल बाद, उनके पास अभी भी मुश्किल से कोई C5 11 समर्थन है। (इस बीच gcc लगभग पूरी बात का समर्थन करता है।)
GManNickG

10
FWIW, VC2013 पूर्वावलोकन अब C ++ 11 और C99 मानकों का समर्थन कर रहा है। देखें कि C / C ++ देवों के लिए क्या नया है
वल्कैन रावेन

37

हर्ब सटर दोनों कुर्सी और C ++ मानकीकरण कॉमाइट का एक बहुत सक्रिय सदस्य है, साथ ही Microsoft के लिए विज़ुअल स्टूडियो पर सॉफ्टवेयर वास्तुकार भी है।

वह C ++ 0x के लिए मानकीकृत नए C ++ मेमोरी मॉडल के लेखक में से हैं। उदाहरण के लिए, निम्नलिखित कागजात:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2669.htm
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007 /n2197.pdf

उस पर उसका नाम है। इसलिए मुझे लगता है कि C ++ 0x के विंडोज पर समावेश तब तक सुनिश्चित किया जाता है जब तक H. Sutter Microsoft पर बना रहता है।

C99 के लिए केवल आंशिक रूप से विजुअल स्टूडियो में शामिल है, मुझे लगता है कि यह प्राथमिकताओं का सवाल है।

  • अधिकांश दिलचस्प C99 सुविधाएँ पहले से ही C ++ (इनलाइनिंग, वैरिएबल डिक्लेरेशन कहीं भी, / कॉमेंट्स, आदि) में मौजूद हैं और शायद विजुअल स्टूडियो में C में पहले से ही प्रयोग करने योग्य है (यदि केवल C ++ कंपाइलर के भीतर C कोड कर रहे हैं)। मेरा जवाब यहां देखेंC ++ में C99 सुविधाओं के बारे में अधिक संपूर्ण चर्चा के लिए ।
  • C99 C ++ में पहले से मौजूद सुविधाओं को जोड़कर C और C ++ के बीच का विचलन बढ़ाता है, लेकिन असंगत तरीके से (क्षमा करें, लेकिन C99 में बूलियन कॉम्प्लेक्स कार्यान्वयन सबसे अच्छा है, सबसे अच्छा है ... देखें http://david.tribh.com/ पाठ / अधिक जानकारी के लिए cdiffs.htm )
  • विंडोज पर सी समुदाय गैर-मौजूद है या स्वीकार किए जाने के लिए पर्याप्त महत्वपूर्ण नहीं है
  • विंडोज पर C ++ समुदाय को नजरअंदाज किया जाना बहुत जरूरी है
  • .NET वह तरीका है जिससे Microsoft विंडोज पर प्रोग्राम करना चाहता है। इसका अर्थ है C #, VB.NET, शायद C ++ / CLI।

तो, क्या मैं Microsoft होगा, मैं उन विशेषताओं को क्यों लागू करूंगा जिन्हें कुछ लोग कभी भी उपयोग करेंगे जब समान सुविधाएँ पहले से ही अधिक सामुदायिक सक्रिय भाषाओं में पहले से ही अधिकांश लोगों द्वारा उपयोग की जा रही हैं?

निष्कर्ष?

सी ++ 0x को वीएस 2008 के निष्कर्षण के रूप में या विजुअल स्टूडियो की अगली पीढ़ी (पीढ़ियों) पर शामिल किया जाएगा।

C99 सुविधाएँ जो पहले से लागू नहीं हुई हैं वे अगले वर्षों में नहीं होंगी, जब तक कि कुछ नाटकीय नहीं होता (C99 डेवलपर्स से भरा देश कहीं नहीं दिखता?)

2011-04-14 को संपादित करें

जाहिर है, "C99 डेवलपर्स से भरा देश" पहले से मौजूद है: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^

फिर भी, पर अंतिम टिप्पणी: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 पर्याप्त स्पष्ट है, मुझे लगता है।

2012-05-03 को संपादित करें

हर्ब सटर ने स्पष्ट किया कि:

  1. हमारा प्राथमिक लक्ष्य "अधिकांश C99 / C11 का समर्थन करना है जो ISO C ++ 98 / C ++ 11 का सबसेट है।"
  2. हम ऐतिहासिक कारणों के लिए भी एक C90 संकलक को शिप करते हैं जो केवल (C) C90 स्वीकार करता है और C ++ नहीं
  3. हम आईएसओ सी सुविधाओं का समर्थन करने की योजना नहीं बनाते हैं जो सी 90 या आईएसओ सी ++ का हिस्सा नहीं हैं।

ब्लॉग पोस्ट उन फैसलों के लिए लिंक और आगे स्पष्टीकरण जोड़ते हैं।

स्रोत: http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/


1
निष्पक्ष होने के लिए - C99 में बूलियन कार्यान्वयन को सायन कोड (यानी बूल को बूलियन परिभाषित करने वाले कोड) के साथ पिछड़े-अनुकूलता की अनुमति देने के लिए किया गया था।
मैकीज पीचोटका

19
यह: "सबसे दिलचस्प C99 सुविधाएँ पहले से ही C ++ में मौजूद हैं" केवल झूठी है। हेक्साडेसिमल फ्लोटिंग-पॉइंट फॉर्मेटर्स और शाब्दिक। C99 गणित पुस्तकालय कार्य। नामांकित इनिशियलाइज़र्स फॉर स्ट्रक्चर्स / यूनियन restrictकीवर्ड। एक टन महान C99 विशेषताएं हैं जो C ++ से गायब हैं, और वे ऐसी विशेषताएं हैं जो मैं हर दिन C प्रोग्रामर के रूप में उपयोग करता हूं।
स्टीफन कैनन

1
@ स्टेफेन कैनन: कृपया मेरा जवाब यहां पढ़ें: stackoverflow.com/questions/3879636/… । बेशक, यह C ++ डेवलपर्स के लिए C ++ का उत्तर है, इसलिए यह C डेवलपर्स के लिए उपयुक्त नहीं है कि वे कक्षाओं, कंस्ट्रक्टर्स या ओवरलोड गणित कार्यों का उपयोग करने के लिए अनिच्छुक हों (जिन्हें C ++ में tgmath.h की आवश्यकता है?)। मुद्दा यह है: क्या मायने रखता है या पहले से ही लागू करने के लिए आसान है। के रूप में restrictकीवर्ड, आप अभी भी जाहिरा तौर पर सी में उपयोग कर सकते हैं ++: stackoverflow.com/questions/776283/... । । ।
पियरसबल

5
@paercebal: आप उस दृष्टिकोण के हकदार हैं, लेकिन C ++ में ऐसा कुछ भी नहीं है जो मुझे हेक्साडेसिमल फ्लोटिंग-पॉइंट शाब्दिकों को छोड़ने के लिए लुभाए । यह बिल्कुल मेरी बात है। बेशक C ++ प्रोग्रामर C99 फीचर्स की परवाह नहीं करते हैं; शायद यही कारण है कि वे C ++ प्रोग्रामर हैं। इसके विपरीत, C प्रोग्रामरों की एक पूरी दुनिया है, जो C ++ सुविधाओं के लिए बिल्कुल भी परवाह नहीं करते हैं, और बस चाहते हैं कि माइक्रोसॉफ्ट एक सी कंपाइलर प्रदान करे जो कम से कम हर किसी के समान मानक का पालन करने की कोशिश करता है।
स्टीफन कैनन

13
@paercebal: "समकक्ष" बेकार हैं। पोर्टेबल सी कोड की लाखों लाइनें हैं जो हर दूसरे प्लेटफॉर्म पर ठीक काम करती हैं। क्या आप सुझाव दे रहे हैं कि उन्हें फिर से लिखा जाए? C99 उपयोगकर्ता समुदाय पर्याप्त रूप से बड़ा है कि प्रत्येक अन्य प्रमुख कंपाइलर विक्रेता कम से कम संगतता प्रदान करने का प्रयास करता है: IBM, HP, Apple, Intel, GNU, Sun, ARM, असंख्य एम्बेडेड डिवाइस कंपाइलर, आदि। C99 विंडोज के सुरक्षाकर्मियों के लिए महत्वपूर्ण नहीं हो सकता है। लेकिन विंडोज प्रोग्राम लिखे गए कुल कोड के एक छोटे से हिस्से का प्रतिनिधित्व करते हैं।
स्टीफन कैनन

11

से शुरू VC2013 पूर्वावलोकन 1 , C99, सी ++ 11 का एक और अधिक विविध सेट और कुछ नव शुरू की सी ++ 14 मानकों समर्थित हैं। अधिक जानकारी के लिए आधिकारिक ब्लॉग देखें: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview। aspx

अपडेट करें:

से https://news.ycombinator.com/item?id=9434483 (स्टीफ़न टी Lavavej उर्फ: एसटीएल एसटीएल @VC टीम के मेंटेनर है):

विशेष रूप से, 2015 में हमारा C99 स्टैंडर्ड लाइब्रेरी कार्यान्वयन पूर्ण है, सिवाय tgmath.h (C ++ में अप्रासंगिक) और CX_LIMITED_RANGE / FP_CONTRACT प्रागमा मैक्रोज़ को छोड़कर।

इस पोस्ट को विवरण के लिए देखें: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx


C99 के लिए केवल आंशिक समर्थन जहाँ तक मैं बता सकता हूँ: blogs.msdn.com/b/vcblog/archive/2013/07/19/… "... हम जानते हैं कि यह C99 लाइब्रेरी फ़ंक्शंस के लिए पूर्ण समर्थन नहीं है।"
sdfqwerqaz1

@ sdfqwerqaz1, यहां STL की टिप्पणी देखें : "कंपाइलर और लाइब्रेरी की टीमें उन्हें केस-बाय-केस आधार पर विचार करेंगी, लेकिन हमारी मुख्य प्राथमिकता C ++ कंफर्मेशन है। उदाहरण के लिए, C ++ 11/14 में C99 स्टैंडर्ड शामिल है। संदर्भ से लाइब्रेरी, 2015 पूर्वावलोकन पूरी तरह से C99 मानक लाइब्रेरी का समर्थन करता है (केवल चूक के साथ tgmath.h, जिसे C कंपाइलर मैजिक की आवश्यकता होती है और C ++ के लिए प्रासंगिक नहीं है, जिसमें ओवरलोडिंग है, और CX_LIMITED_RANGE / FP -CONTRACT जिसे कंपाइलर समर्थन की भी आवश्यकता है) "
वल्केन रेवेन

8

मैं आईएसओ सी ++ काम (2000-2005) में शामिल रहा हूं, और माइक्रोसॉफ्ट ने उस भाषा में महत्वपूर्ण योगदान दिया। इसमें कोई संदेह नहीं है कि वे सी ++ 0x पर काम करेंगे, लेकिन उन्हें इंटेल के कहने की तुलना में थोड़ा अधिक समय की आवश्यकता होगी। माइक्रोसॉफ़्ट को एक बड़े कोडबेस से निपटना पड़ता है जो अक्सर अपने मालिकाना एक्सटेंशन का उपयोग करता है। यह बस एक लंबी परीक्षा के लिए बनाता है। फिर भी, वे अंततः C ++ 0x का अधिकांश समर्थन करेंगे (निर्यात अभी भी प्यार नहीं है, या इसलिए मैं समझता हूं)।

जब यह आईएसओ सी की बात आती है, तो मानक पर काम करने वाले लोग माइक्रोसॉफ़्ट बाजार के लिए प्रतिनिधि नहीं होते हैं। माइक्रोसोफ्ट ग्राहक C ++ 98 का ​​उपयोग कर सकते हैं यदि वे सिर्फ एक बेहतर सी की तलाश कर रहे हैं। तो Microsoft C99 पर पैसा क्यों खर्च करेगा? ज़रूर, Microsoft चेरी-उठाया भागों, लेकिन यह समझदार व्यवसाय है। उन्हें वैसे भी C ++ 0x के लिए उन लोगों की आवश्यकता होगी, इसलिए प्रतीक्षा क्यों करें?


7

सी के लिए MSVC समर्थन दुर्भाग्य से बहुत कमी है। यह केवल C99 के भाग का समर्थन करता है जो C ++ का सबसेट है ... जिसका अर्थ है कि, उदाहरण के लिए, MSVC में ffmpeg या इसके libav * पुस्तकालयों को संकलित करना शारीरिक रूप से असंभव है, क्योंकि वे कई C99 सुविधाओं जैसे कि संरचनात्मक तत्वों का उपयोग करते हैं। यह इस तथ्य से भी बदतर है कि libavcodec को एक संकलक की आवश्यकता होती है जो स्टैक अलाइनमेंट को बनाए रखता है, जो MSVC नहीं करता है।

मैं x264 पर काम करता हूं, जो कि ffmpeg के विपरीत MSVC को सपोर्ट करने का प्रयास करता है , हालांकि ऐसा करना अक्सर अपने आप में एक बुरा सपना होता है। यदि आप स्पष्ट रूप से एक स्पष्ट असेंबली-आधारित स्टैक संरेखण फ़ंक्शन के माध्यम से उच्चतम फ़ंक्शन कॉल पास करते हैं, तो भी यह स्टैक संरेखण को बनाए नहीं रखता है, इसलिए सभी कार्यों को जो एक स्टैक संरेखित करने की आवश्यकता होती है, उसे अक्षम करना होगा। यह भी बहुत कष्टप्रद है कि मैं या तो वार्निश का उपयोग नहीं कर सकता हूं; शायद यह सबसे अच्छा के लिए है, क्योंकि जाहिरा तौर पर जीसीसी बड़े पैमाने पर उन्हें प्रदर्शन-वार करता है।



4

Microsoft ने कभी भी c99- मानक (जो अब तक पुराना हो रहा है) के साथ अप-टू-स्पीड रखने में कोई वास्तविक रुचि व्यक्त नहीं की है। सी-प्रोग्रामर के लिए दुख की बात है, लेकिन मुझे संदेह है कि Microsoft C ++ समुदाय के लिए अधिक परवाह करता है।


4

विजुअल C ++ 2008 SP1 में TR1 के भाग कम से कम हैं, और समय-समय पर Visual C ++ टीम ब्लॉगिंग या C ++ 0x के बारे में बात कर रही है, इसलिए मुझे लगता है कि वे इस सुविधा में कुछ समय पर इसका समर्थन करेंगे। हालांकि मैंने कुछ भी आधिकारिक नहीं पढ़ा।


4

इस पर अद्यतन जानकारी:

अब (10 नवंबर 2008) VS2010 का एक "कम्युनिटी टेक प्रीव्यू" (CTP) है जिसमें VC10 का पूर्वावलोकन है जिसमें C ++ 0x के कुछ हिस्से लागू हैं (ध्यान दें कि VC10 में C ++ 0x का पूरा सेट नहीं होगा। वीसी 10 जारी होने पर भी लागू किए गए परिवर्तन):

http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=en

VC10 CTP में नया क्या है, इस पर कुछ विवरण:

जैसा कि उपरोक्त लेख में कहा गया है, "Microsoft Visual Studio 2010 सितंबर कम्युनिटी टेक्नोलॉजी प्रीव्यू (CTP) में विजुअल C ++ कंपाइलर में चार C ++ 0x भाषा सुविधाओं के लिए समर्थन है, अर्थात्:"

  • lambdas,
  • ऑटो,
  • static_assert,
  • संदर्भों को देखें

3

हर्ब सटर आईएसओ सी ++ मानकों बॉडी का अध्यक्ष है और यह माइक्रोसॉफ्ट के लिए भी काम करता है। मुझे विजुअल स्टूडियो सी मानक के बारे में पता नहीं है - मुख्यतः क्योंकि मैं कभी भी सादे सी का उपयोग नहीं करता हूं - लेकिन Microsoft निश्चित रूप से नए C ++ मानक को आगे बढ़ाने की कोशिश कर रहा है। इसका प्रमाण है - जैसे ओरेगॉनहोस्ट ने उल्लेख किया है - TR1 जो नवीनतम विज़ुअल स्टूडियो सर्विस रिलीज़ में शामिल है।


3

विजुअल C ++ टीम ने C ++ 0x सुविधाओं की एक तालिका रखी, जो 2010 की रिलीज़ http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language पर समर्थन करती है। -features-इन-VC10-table.aspx । चूंकि कल्पना और कार्यान्वयन के बीच एक अंतराल समय हो सकता है, इसलिए यह उचित है। विकिपीडिया में युक्ति के बारे में एक अच्छा लेख है। जिस समय मैं यह लिख रहा हूं, यह समाप्त नहीं हुआ है।


1

विजुअल सी ++ ब्लोक वीसी ++ 11 में सी ++ 11 के समर्थन के बारे में कई इंटरेस्टिंग बिंदुओं पर बहुत सारी जानकारी प्रदान करता है, जिसमें कई टेबल भी शामिल हैं।

  • सी ++ 11 कोर भाषा सुविधाएँ
  • C ++ 11 कोर भाषा विशेषताएं: समरूपता
  • C ++ 11 कोर भाषा विशेषताएं: C99
  • x86 कंटेनर आकार (बाइट्स)
  • x64 कंटेनर आकार (बाइट्स)

विजुअल C ++ टीम ब्लॉग, C ++ 11 विजुअल C ++ 11 में विशेषताएं

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