سؤال

أواصل القراءة عن C99 وC++11 وكل هذه الأشياء الرائعة تمامًا التي تتم إضافتها إلى معيار اللغة الذي قد يكون من الجيد استخدامه يومًا ما.ومع ذلك، فإننا حاليًا نعاني من الكتابة بلغة C++ في Visual Studio.

هل ستتم إضافة أي من العناصر الجديدة في المعيار إلى الاستوديو المرئي، أم أن Microsoft مهتمة أكثر بإضافة متغيرات C# جديدة للقيام بذلك؟

يحرر:بالإضافة إلى الإجابة المقبولة، وجدت مدونة فريق Visual C++:

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

وعلى وجه التحديد، هذه المشاركة فيه:

http://blogs.msdn.com/vcblog/archive/2008/02/22/tr1-slide-decks.aspx

مفيد جدا.شكرًا!

هل كانت مفيدة؟

المحلول

لدى MS سلسلة من الردود العامة على هذا، معظمها يلقي اللوم على مستخدميها.مثل هذه:

http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx

الآن، يتلقى فريق برنامج التحويل البرمجي Visual C++ السؤال أحيانًا حول سبب عدم تنفيذنا لـ C99.إنه يعتمد حقًا على اهتمام مستخدمينا.حيث تلقينا العديد من الطلبات لبعض ميزات C99، حاولنا تنفيذها (أو نظائرها).ومن الأمثلة على ذلك وحدات الماكرو المتغيرة، long long, __pragma, __FUNCTION__, ، و __restrict.إذا كانت هناك ميزات أخرى لـ C99 تجدها مفيدة في عملك، فأخبرنا بذلك!نحن لا نسمع الكثير من مستخدمي لغة C لدينا، لذا تحدثوا واجعلوا أنفسكم مسموعًا

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

أهلاً:ولسوء الحظ، فإن التعليقات الساحقة التي نحصل عليها من غالبية مستخدمينا هي أنهم يفضلون أن نركز على C++-0x بدلاً من C-99.لقد "انتقينا" بعض ميزات C-99 الشائعة (وحدات الماكرو المتغيرة، long long) ولكن بعد ذلك من غير المرجح أن نفعل المزيد في مجال C-99 (على الأقل في المدى القصير).

كهوف جوناثان

فريق مترجم Visual C++.

هذه حالة حزينة جدًا، ولكنها منطقية أيضًا إذا كنت تشك في أن MS يريد قفل المستخدمين:إنه يجعل من الصعب جدًا نقل التعليمات البرمجية الحديثة المستندة إلى دول مجلس التعاون الخليجي إلى MSVC، وهو الأمر الذي أجده مؤلمًا للغاية على الأقل.

يوجد حل بديل، على الرغم من ذلك:لاحظ أن Intel أكثر استنارة في هذا الشأن.يمكن لمترجم Intel C التعامل مع كود C99 ولديه نفس إشارات gcc، مما يجعل من الأسهل بكثير نقل التعليمات البرمجية بين الأنظمة الأساسية.كما يعمل مترجم Intel في الاستوديو المرئي.لذلك، من خلال إلغاء MS COMPILER، لا يزال بإمكانك استخدام MS IDE الذي يبدو أنك تعتقد أن له قيمة ما، واستخدام C99 لمحتوى قلبك.

الطريقة الأكثر عقلانية هي الانتقال بصراحة إلى Intel CC أو gcc واستخدام Eclipse لبيئة البرمجة الخاصة بك.تعد إمكانية نقل التعليمات البرمجية عبر Windows-Linux-Solaris-AIX وما إلى ذلك أمرًا مهمًا في تجربتي عادةً، وهذا غير مدعوم على الإطلاق بواسطة أدوات MS، للأسف.

نصائح أخرى

هيرب سوتر هو الرئيس والعضو النشط جدًا في لجنة توحيد معايير C++، بالإضافة إلى مهندس البرمجيات في Visual Studio for Microsoft.

وهو من بين مؤلفي نموذج ذاكرة C++ الجديد الموحد لـ C++0x.على سبيل المثال الأوراق التالية:

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

يكون اسمه على ذلك.لذلك أعتقد أن التضمين على Windows لـ C++ 0x مضمون طالما أن H.يبقى سوتر في مايكروسوفت.

أما بالنسبة لـ C99 المضمن جزئيًا فقط في Visual Studio، فأعتقد أن هذه مسألة أولويات.

  • معظم ميزات C99 المثيرة للاهتمام موجودة بالفعل في C++ (التضمين، وإعلان المتغير في أي مكان، // التعليقات، وما إلى ذلك) وربما تكون قابلة للاستخدام بالفعل في C في Visual Studio (في حالة تنفيذ تعليمات برمجية C فقط داخل مترجم C++).انظر إجابتي هنا للحصول على مناقشة أكثر اكتمالاً حول ميزات C99 في C++.
  • يعمل C99 على زيادة التباعد بين C وC++ عن طريق إضافة ميزات موجودة بالفعل في C++، ولكن بطريقة غير متوافقة (عذرًا، ولكن منطقية التنفيذ المعقد في C99 أمر مثير للضحك، في أحسن الأحوال...يرى http://david.tribble.com/text/cdiffs.htm للمزيد من المعلومات)
  • يبدو مجتمع لغة C على نظام التشغيل Windows غير موجود أو غير مهم بما يكفي للاعتراف به
  • يبدو مجتمع C++ على Windows مهمًا جدًا بحيث لا يمكن تجاهله
  • .NET هي الطريقة التي تريد Microsoft من الأشخاص أن يبرمجوها على Windows.وهذا يعني C#، VB.NET، وربما C++/CLI.

لذا، هل سأكون Microsoft، فلماذا أقوم بتنفيذ ميزات لن يستخدمها سوى عدد قليل من الأشخاص على الإطلاق عندما تكون نفس الميزات متوفرة بالفعل في المزيد من اللغات النشطة في المجتمع والتي يستخدمها بالفعل معظم الأشخاص؟

خاتمة؟

سيتم تضمين C++0x كامتداد لـ VS 2008، أو على الجيل التالي (الأجيال؟) من Visual Studio.

لن يتم تنفيذ ميزات 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 الذي يقبل (فقط) C90 وليس C++
  3. نحن لا نخطط لدعم ميزات ISO C التي ليست جزءًا من C90 أو ISO C++.

يضيف منشور المدونة روابط وتفسيرات إضافية لتلك القرارات.

مصدر: http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/

بدءا من معاينة VC2013 1, ، C99، يتم دعم مجموعة أكثر تنوعًا من C++ 11 وبعض معايير C++ 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 (ستيفان تي لافافيج المعروف أيضًا باسم:STL هي الجهة المشرفة على فريق STL@VC):

على وجه التحديد، في عام 2015، اكتمل تنفيذ مكتبة C99 القياسية، باستثناء tgmath.h (غير ذي صلة في C++) ووحدات الماكرو CX_LIMITED_RANGE/FP_CONTRACT pragma.

تحقق من هذه المشاركة للحصول على التفاصيل: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx.

لقد شاركت في عمل ISO C++ (2000-2005)، وقد قدمت Microsoft مساهمات كبيرة في تلك اللغة.ليس هناك شك في أنهم سيعملون على C++0x، لكنهم سيحتاجون إلى وقت أطول قليلاً مما تقوله Intel.يتعين على شركة Micosoft التعامل مع قاعدة تعليمات برمجية أكبر تستخدم غالبًا امتداداتها الخاصة.وهذا ببساطة يجعل مرحلة اختبار أطول.ومع ذلك، فإنهم سيدعمون معظم C++0x في نهاية المطاف (على الرغم من أن التصدير لا يزال غير محبب، أو هذا ما أفهمه).

عندما يتعلق الأمر بـ ISO C، فإن الأشخاص الذين يعملون على المعيار لا يمثلون سوق Microsoft.يمكن لعملاء Microsoft استخدام C++ 98 إذا كانوا يبحثون فقط عن لغة C أفضل.فلماذا تنفق Microsoft الأموال على C99؟من المؤكد أن Microsoft اختارت الأجزاء بعناية، ولكن هذا عمل معقول.سيحتاجون إلى تلك الخاصة بـ C++0x على أي حال، فلماذا الانتظار؟

دعم MSVC لـ C للأسف غير موجود للغاية.إنه يدعم فقط جزء C99 الذي يعد مجموعة فرعية من C++ ...مما يعني أنه، على سبيل المثال، من المستحيل فعليًا ترجمة ffmpeg أو مكتبات libav* الخاصة به في MSVC، لأنها تستخدم العديد من ميزات C99 مثل عناصر البنية المسماة.ومما يزيد الأمر سوءًا حقيقة أن libavcodec يتطلب أيضًا مترجمًا يحافظ على محاذاة المكدس، وهو ما لا يفعله MSVC.

أنا أعمل على x264، وهو على عكس ffmpeg يفعل بذل جهدًا لدعم MSVC، على الرغم من أن القيام بذلك غالبًا ما كان بمثابة كابوس في حد ذاته.لا يحافظ على محاذاة المكدس حتى إذا قمت بشكل صريح بتمرير أعلى استدعاء دالة من خلال وظيفة محاذاة المكدس الصريحة القائمة على التجميع، لذلك يجب تعطيل جميع الوظائف التي تتطلب مكدسًا محاذيًا.لقد كان الأمر مزعجًا جدًا أيضًا لأنني لا أستطيع استخدام المصفوفات المتغيرة أيضًا؛ربما يكون هذا للأفضل، حيث يبدو أن دول مجلس التعاون الخليجي تشاؤم بشكل كبير من حيث الأداء.

منشور أحدث حول توافق ميزات MSVC's C++ 11 لـ MSVC 2010 و2011 هو الآن على شبكة الإنترنت.

لم تعرب Microsoft مطلقًا عن أي اهتمام حقيقي بمواكبة السرعة مع معيار c99 (الذي أصبح قديمًا الآن).حزين لمبرمجي لغة C، لكني أظن أن Microsoft تهتم أكثر بمجتمع لغة C++.

يحتوي Visual C++ 2008 SP1 على أجزاء من TR1 على الأقل، ومن وقت لآخر، يقوم فريق Visual C++ بالتدوين أو التحدث عن C++0x، لذلك أعتقد أنهم سيدعمونه في وقت ما في هذه الميزة.رغم أنني لم أقرأ أي شيء رسمي.

معلومات محدثة عن هذا:

يوجد الآن (10 نوفمبر 2008) "معاينة تقنية المجتمع" (CTP) لـ VS2010 والتي تحتوي على معاينة لـ VC10 التي تحتوي على بعض تم تنفيذ أجزاء من C++ 0x (لاحظ أن VC10 لن يحتوي على المجموعة الكاملة من تغييرات C++ 0x التي تم تنفيذها حتى عند إصدار VC10):

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

بعض التفاصيل حول الجديد في برنامج CTP VC10:

كما هو مذكور في المقالة أعلاه، "يحتوي برنامج التحويل البرمجي Visual C++ في Microsoft Visual Studio 2010 سبتمبر Community Technology Preview (CTP) على دعم لأربع ميزات لغة C++ 0x، وهي:"

  • لامدا,
  • آلي،
  • static_assert،
  • مراجع القيمة

هيرب سوتر هو رئيس هيئة معايير ISO C++ ويعمل أيضًا لدى Microsoft.لا أعرف شيئًا عن معيار Visual Studio C - ويرجع ذلك أساسًا إلى أنني لا أستخدم لغة C العادية مطلقًا - ولكن من المؤكد أن Microsoft تحاول دفع معيار C++ الجديد إلى الأمام.والدليل على ذلك - كما ذكر OregonGhost - هو TR1 المضمن في أحدث إصدار لخدمة Visual Studio.

قام فريق Visual C++ بوضع جدول بميزات C++0x التي يدعمها إصدار 2010 http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language-features-in-vc10-the-table.aspx.وبما أنه يمكن أن يكون هناك فترة زمنية بين المواصفات والتنفيذ، يبدو ذلك معقولًا جدًا.تحتوي ويكيبيديا على مقالة لطيفة حول المواصفات.لم ينته الأمر في الوقت الذي أكتب فيه هذا.

يوفر Visual C++ Bloq الكثير من المعلومات حول العديد من النقاط المثيرة للاهتمام فيما يتعلق بدعم C++11 في VC++11، بما في ذلك العديد من الجداول

  • ميزات لغة C++11 الأساسية
  • ميزات لغة C++ 11 الأساسية:التزامن
  • ميزات لغة C++ 11 الأساسية:C99
  • أحجام الحاويات x86 (بايت)
  • أحجام الحاويات x64 (بايت)

مدونة فريق Visual C++، ميزات C++11 في Visual C++ 11

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top