Yeni C / C ++ standartları için Visual Studio desteği?


102

C99 ve C ++ 11 hakkında okumaya devam ediyorum ve bir gün kullanmak güzel olabilecek dil standardına eklenen tüm bu tatlı şeyler. Ancak, şu anda Visual Studio'da C ++ yazma ülkesinde zayıflıyoruz.

Standarttaki yeni şeylerden herhangi biri görsel stüdyoya eklenecek mi yoksa Microsoft bunu yapmak için yeni C # varyantları eklemekle daha çok ilgileniyor mu?

Düzenleme: Kabul edilen cevaba ek olarak, Visual C ++ ekip blogunu buldum:

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

Ve özellikle bu gönderi:

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

Çok kullanışlı. Teşekkürler!


3
Vcblog'un 2008/02 makalesinde ne kadar yararlı bulduğunuzu anlamıyorum, çünkü burada açıklanan özellikler uzun süredir destek olarak var ve oldukça iyi biliniyor. C ++ 0x'in dünyayı değiştiren özellikleri farklıdır: en.wikipedia.org/wiki/C%2B%2B0x adresinde listelenen lambda işlevleri, başlatıcılar vb .
amit

Blogs.msdn.com/vcblog/archive/2009/04/22/… son makaleye de bakın ( Sorunun sorulduğu zamandan daha geç olduğunu biliyorum)
amit

1
Bu, Visual Studio'nun 2015 Güncelleştirme 2 gibi son sürümlerinde büyük ölçüde iyileştirildi: visualstudio.com/en-us/news/vs2015-update2-vs.aspx#Cdoubleplus
Ricardo Peres

Yanıtlar:


103

MS'in buna kamuoyuna açık bir dizi yanıtı var ve bunların çoğu kullanıcılarını suçluyor. Bunun gibi:

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

Şimdi, Visual C ++ derleyici ekibi neden C99 uygulamadığımıza dair ara sıra soru alıyor. Gerçekten kullanıcılarımızın ilgisine dayanıyor. Belirli C99 özellikleri için birçok talep aldığımızda, bunları (veya analoglarını) uygulamaya çalıştık. Birkaç örnek variadic makrolardır, long long, __pragma, __FUNCTION__, ve __restrict. Çalışmanızda yararlı bulacağınız başka C99 özellikleri varsa, bize bildirin! C kullanıcılarımızdan pek bir şey duymuyoruz, bu yüzden konuşun ve kendinizi duyurun

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

Merhaba: Ne yazık ki kullanıcılarımızın çoğundan aldığımız ezici geri bildirim, C-99 yerine C ++ - 0x'e odaklanmamızı tercih etmeleridir. Bazı popüler C-99 özelliklerini (çeşitli makrolar long long) "özenle seçtik", ancak bunun ötesinde C-99 alanında (en azından kısa vadede) çok daha fazlasını yapmamız pek olası değil.

Jonathan Mağaraları

Visual C ++ Derleyici Ekibi.

Bu oldukça üzücü bir durumdur, ancak MS'in kullanıcıları kilitlemek istediğinden şüpheleniyorsanız mantıklıdır: modern gcc tabanlı kodu MSVC'ye taşımak çok zor, ki en azından ben çok acı verici buluyorum.

Yine de bir geçici çözüm var: Intel'in bu konuda çok daha aydınlandığını unutmayın. Intel C derleyicisi C99 kodunu işleyebilir ve hatta gcc ile aynı bayraklara sahiptir, bu da kodun platformlar arasında taşınmasını çok daha kolay hale getirir. Ayrıca, Intel derleyici görsel stüdyoda çalışıyor. Dolayısıyla, MS DERLEYİCİ'yi hurdaya atarak, bir çeşit değeri olduğunu düşündüğünüz MS IDE'yi kullanmaya devam edebilir ve kalbinizin içeriğinde C99'u kullanabilirsiniz.

Dürüst olmak gerekirse Intel CC veya gcc'ye geçmek ve programlama ortamınız için Eclipse kullanmak daha mantıklı bir yaklaşımdır. Windows-Linux-Solaris-AIX-vb. Arasında kodun taşınabilirliği genellikle benim deneyimime göre önemlidir ve bu maalesef MS araçları tarafından desteklenmemektedir.


42
Yine de, gerçek nedenlerinin tam olarak söyledikleri şey olduğunu tahmin ediyorum: Windows üzerindeki C topluluğu belki neredeyse yok veya C ++ / C # /. NET / ASP topluluğuyla karşılaştırıldığında ihmal edilebilir. Dolayısıyla, geçerli bir noktaları var. Bir Linux'um olmasına ve g ++ gibi olmasına rağmen, MSVC ++ 'yı sadece C99 yüzünden hurdaya çıkarmayacağım, üzgünüm.
paercebal

11
En azından bize (int i ;;) ve satır içi verirlerse.
Nick Van Brunt


2
C ++ 0x odaklı geliştirmeyle ilgili yanıtlarının en iyi yanı, 4 yıldan fazla bir süre sonra, hala neredeyse hiç C ++ 11 desteğine sahip olmadıklarıdır. (Bu arada gcc neredeyse her şeyi destekliyor.)
GManNickG

10
FWIW, VC2013 önizlemesi artık C ++ 11 ve C99 standartlarını desteklemektedir. C / C ++ geliştiricileri için yeniliklere göz atın .
vulcan kuzgun

37

Herb Sutter, C ++ standardizasyon komitesinin hem başkanı hem de çok aktif bir üyesi ve Microsoft için Visual Studio'nun yazılım mimarıdır.

C ++ 0x için standartlaştırılmış yeni C ++ bellek modelinin yazarıdır. Örneğin, aşağıdaki belgeler:

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

üzerinde onun adı var. Sanırım, H. Sutter Microsoft'ta kaldığı sürece Windows'a C ++ 0x'in dahil edilmesi garantidir.

C99'a gelince, Visual Studio'ya yalnızca kısmen dahil edildi, sanırım bu bir öncelik meselesi.

  • En ilginç C99 özellikleri zaten C ++ 'da mevcuttur (satır içi, her yerde değişken bildirimi, // yorumlar vb.) Ve muhtemelen Visual Studio'da C'de kullanılabilir (Yalnızca C ++ derleyicisinde C kodu yapılıyorsa). C ++ 'daki C99 özellikleri hakkında daha eksiksiz bir tartışma için cevabıma buradan bakın .
  • C99, C ++ 'da zaten var olan özellikleri ekleyerek, ancak uyumsuz bir şekilde (üzgünüm, ancak C99'daki boolean karmaşık uygulaması en iyi ihtimalle gülünçtür ... Bkz. Http://david.tribble.com/ text / cdiffs.htm )
  • Windows'daki C topluluğu yok gibi görünüyor veya kabul edilecek kadar önemli değil
  • Windows'taki C ++ topluluğu göz ardı edilemeyecek kadar önemli görünüyor
  • .NET, Microsoft'un insanların Windows'ta programlamasını istediği yöntemdir. Bu C #, VB.NET, belki de C ++ / CLI anlamına gelir.

Öyleyse, Microsoft olur muyum, aynı özellikler zaten çoğu insan tarafından kullanılan daha fazla topluluk aktif dilde sunuluyorken neden birkaç kişinin kullanacağı özellikleri uygulayayım?

Sonuç?

C ++ 0x, VS 2008'in uzantısı olarak veya Visual Studio'nun yeni nesline (nesiller?) Dahil edilecektir.

Henüz uygulanmamış olan C99 özellikleri, dramatik bir şey olmadıkça (C99 geliştiricileriyle dolu bir ülke birdenbire ortaya çıkmadıkça) önümüzdeki yıllarda olmayacak.

Düzenle 2011-04-14

Görünüşe göre, "C99 geliştiricileriyle dolu ülke" zaten mevcut: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^

Yine de, http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 adresindeki son yorum yeterince açık, sanırım.

Düzenle 2012-05-03

Herb Sutter şunu açıkça ortaya koydu:

  1. Öncelikli hedefimiz "ISO C ++ 98 / C ++ 11'in bir alt kümesi olan C99 / C11'in çoğunu" desteklemektir.
  2. Ayrıca tarihsel nedenlerden dolayı (yalnızca) C90'ı kabul eden ve C ++ 'yı kabul etmeyen bir C90 derleyicisi gönderiyoruz.
  3. Ne C90 ne de ISO C ++ parçası olmayan ISO C özelliklerini desteklemeyi planlamıyoruz.

Blog yayını, bu kararlar için bağlantılar ve daha fazla açıklama ekler.

Kaynak: http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/


1
Adil olmak gerekirse - C99'daki boole uygulaması, aklı başında kodla geriye dönük uyumluluk sağlamak için yapılmıştır (yani bool'u boole'ye sahip olacak şekilde tanımlayan kod).
Maciej Piechotka

19
Bu: "En ilginç C99 özellikleri zaten C ++ 'da mevcuttur" sadece yanlıştır. Onaltılık kayan nokta biçimlendiricileri ve değişmezleri. C99 matematik kitaplığı işlevleri. Yapılar / birlikler için adlandırılmış başlatıcılar. restrictAnahtar kelime. C ++ 'da eksik olan bir sürü harika C99 özelliği var ve bunlar bir C programcısı olarak her gün kullandığım özellikler.
Stephen Canon

1
@Stephen Canon: Lütfen cevabımı şu adresten okuyun: stackoverflow.com/questions/3879636/… . Tabii ki, bu C ++ geliştiricileri için bir C ++ cevabıdır, bu nedenle sınıfları, yapıcıları veya aşırı yüklenmiş matematik işlevlerini kullanmak istemeyen C geliştiricileri için uygun değildir (C ++ 'da tgmath.h'ye kimin ihtiyacı var?). Önemli olan şudur: Önemli olan zaten oradadır veya uygulaması kolaydır. restrictAnahtar kelimeye gelince , C ++ 'da hala kullanabilirsiniz, görünüşe göre: stackoverflow.com/questions/776283/… . . .
paercebal

5
@paercebal: bu bakış açısına hakkınız var, ancak C ++ ' da beni onaltılık kayan noktalı değişmez değerlerden vazgeçmeye ikna edecek hiçbir şey yok . Ben de tam bunu kastetmiştim. Elbette C ++ programcıları C99 özelliklerini umursamıyor; muhtemelen bu yüzden C ++ programcılarıdır. Tersine, C ++ özelliklerini hiç umursamayan ve Microsoft'tan en azından herkesin yaptığı gibi standarda uymaya çalışan bir C derleyicisi sağlamasını isteyen koca bir C programcı dünyası var.
Stephen Canon

13
@paercebal: "eşdeğerler" işe yaramaz. Diğer tüm platformlarda gayet iyi çalışan milyonlarca satırlık taşınabilir C kodu vardır. Yeniden yazılmalarını mı öneriyorsunuz? C99 kullanıcı topluluğu yeterince büyük olduğunu her diğer büyük derleyici satıcı uyumluluğu sağlamak için en az girişimleri de: IBM, HP, Apple, Intel, GNU, Güneş, ARM, sayısız gömülü cihaz derleyiciler, vb C99 için önemli olmayabilir , Windows programcılar, ancak Windows programları, yazılan toplam kodun çok küçük bir bölümünü temsil eder.
Stephen Canon

11

VC2013 önizleme 1 , C99'dan başlayarak, daha çeşitli bir C ++ 11 kümesi ve yeni tanıtılan bazı C ++ 14 standartları desteklenmektedir. Daha fazla ayrıntı için resmi bloga göz atın : http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview. aspx

Güncelleme:

Gönderen https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej aka: STL STL @VC ekibinin muhafaza edicisidir):

Spesifik olarak, 2015 yılında, tgmath.h (C ++ ile ilgisiz) ve CX_LIMITED_RANGE / FP_CONTRACT pragma makroları dışında C99 Standart Kitaplığı uygulamamız tamamlandı.

Ayrıntılar için bu gönderiye göz atın: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx .


C99 için yalnızca anlayabildiğim kadarıyla kısmi destek: blogs.msdn.com/b/vcblog/archive/2013/07/19/… "... Bunun C99 kitaplık işlevleri için tam destek olmadığını biliyoruz."
sdfqwerqaz1

@ sdfqwerqaz1, STL gelen yorumu görmek burada : . "derleyici ve kitaplık ekipleri bir vaka ile ayrı ayrı bunları ele alacağız, ama bizim ana önceliğimiz C ++ uyumsuzluk söz konusudur Örneğin, C ++ 14/11 dahil C99 Standardı beri Başvuruya göre kitaplık, 2015 Önizleme, C99 Standart Kitaplığı'nı tam olarak destekler (tek eksiklik, C derleyici sihrini gerektiren ve aşırı yüklemeye sahip C ++ ile ilgili olmayan tgmath.h ve ayrıca derleyici desteği gerektiren CX_LIMITED_RANGE / FP_CONTRACT) " .
vulkan kuzgunu

8

ISO C ++ çalışmasına (2000-2005) dahil oldum ve Microsoft bu dile önemli katkılarda bulundu. Hiç şüphe yok ki C ++ 0x üzerinde çalışacaklar, ancak Intel'den biraz daha fazla zamana ihtiyaçları olacak. Micosoft, genellikle kendi özel uzantılarını kullanan daha büyük bir kod tabanıyla uğraşmak zorundadır. Bu sadece daha uzun bir test süreci sağlar. Yine de, sonunda C ++ 0x'in çoğunu destekleyecekler (dışa aktarma yine de sevilmiyor, yoksa anlıyorum).

ISO C söz konusu olduğunda, standart üzerinde çalışan kişiler Microsofts pazarının temsilcisi değildir. Microsofts müşterileri yalnızca daha iyi bir C istiyorlarsa C ++ 98'i kullanabilir. Peki Microsoft neden C99'a para harcasın? Elbette, Microsoft'un kiraz seçtiği parçalar, ama bu mantıklı bir iş. Zaten C ++ 0x için bunlara ihtiyaçları olacak, öyleyse neden bekleyesiniz?


7

C için MSVC desteği maalesef çok eksik. Yalnızca C99'un bir C ++ alt kümesi olan kısmını destekler ... bu, örneğin ffmpeg'i veya libav * kitaplıklarını MSVC'de derlemenin fiziksel olarak imkansız olduğu anlamına gelir, çünkü adlandırılmış yapı öğeleri gibi birçok C99 özelliğini kullanırlar. Bu, libavcodec'in MSVC'nin yapmadığı yığın hizalamasını koruyan bir derleyici gerektirmesi gerçeğiyle daha da kötüleşir.

Aksine ffmpeg X264 I eser yok bunu yaparken çoğu zaman kendi başına bir kabus olmuştur rağmen, MSVC desteklemek için çaba. En yüksek işlev çağrısını açık bir şekilde montaj tabanlı yığın hizalama işlevinden geçirseniz bile yığın hizalamasını korumaz, bu nedenle hizalanmış bir yığın gerektiren tüm işlevlerin devre dışı bırakılması gerekir. Ayrıca değişken dizilerini de kullanamamak çok can sıkıcı oldu; Belki de bu en iyisi, çünkü görünüşe göre GCC onları performans açısından büyük ölçüde etkisiz hale getiriyor.



4

Microsoft, c99 standardına (şimdiye kadar eskimeye başlayan) hızına ayak uydurmak konusunda hiçbir zaman gerçek bir ilgi göstermedi. C programcıları için üzücü, ancak Microsoft'un C ++ topluluğuna daha çok önem verdiğinden şüpheleniyorum.


4

Visual C ++ 2008 SP1 en azından TR1'in parçalarını içeriyor ve zaman zaman Visual C ++ ekibi blog yazıyor veya C ++ 0x hakkında konuşuyor, bu yüzden özellikte bir zaman destekleyeceklerini tahmin ediyorum. Yine de resmi bir şey okumadım.


4

Bununla ilgili güncellenmiş bilgiler:

Şu anda (10 Kasım 2008) , C ++ 0x'in bazı bölümlerinin uygulandığı VC10'un bir önizlemesini içeren bir "Community Tech Preview" (CTP) var (VC10'un C ++ 0x'in tam setine sahip olmayacağını unutmayın) VC10 piyasaya sürüldüğünde bile uygulanan değişiklikler):

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

VC10 CTP'deki yeniliklerle ilgili bazı ayrıntılar:

Yukarıdaki makalede belirtildiği gibi, "Microsoft Visual Studio 2010 Eylül Topluluk Teknolojisi Önizlemesindeki (CTP) Visual C ++ derleyicisi, dört C ++ 0x dil özelliği için destek içerir, yani:"

  • lambdas,
  • Oto,
  • static_assert,
  • rvalue referansları

3

Herb Sutter, ISO C ++ standartları kuruluşunun başkanıdır ve ayrıca Microsoft için çalışmaktadır. Visual Studio C standardını bilmiyorum - esasen hiçbir zaman düz C kullanmadığım için - ancak Microsoft kesinlikle yeni C ++ standardını ileriye taşımaya çalışıyor. Bunun kanıtı - OregonGhost'un bahsettiği gibi - en son Visual Studio Service Release'de bulunan TR1'dir.



1

Visual C ++ Bloq, birkaç tablo dahil olmak üzere, VC ++ 11'de C ++ 11 desteğiyle ilgili çeşitli ilginç noktalar hakkında birçok bilgi sağlar

  • C ++ 11 Çekirdek Dil Özellikleri
  • C ++ 11 Temel Dil Özellikleri: Eşzamanlılık
  • C ++ 11 Çekirdek Dil Özellikleri: C99
  • x86 Konteyner Boyutları (Bayt)
  • x64 Konteyner Boyutları (Bayt)

Visual C ++ Takım Blogu, Visual C ++ 11'deki C ++ 11 Özellikleri

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.