Ich lese immer wieder über C99 und C ++ 11 und all diese total süßen Dinge, die dem Sprachstandard hinzugefügt werden und die eines Tages nützlich sein könnten. Derzeit befinden wir uns jedoch im Land des Schreibens von C ++ in Visual Studio.
Wird eines der neuen Dinge im Standard jemals zu Visual Studio hinzugefügt, oder ist Microsoft mehr daran interessiert, neue C # -Varianten hinzuzufügen, um dies zu tun?
Bearbeiten: Zusätzlich zur akzeptierten Antwort habe ich den Visual C ++ - Teamblog gefunden:
Und speziell dieser Beitrag darin:
Sehr hilfreich. Vielen Dank!
c++
visual-studio
visual-c++
c++11
c99
Colen
quelle
quelle
Antworten:
MS hat eine Reihe öffentlicher Antworten darauf, von denen die meisten ihre Benutzer beschuldigen. Wie dieser:
https://devblogs.microsoft.com/cppblog/iso-c-standard-update/
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=345360
Dies ist ein ziemlich trauriger Zustand, macht aber auch Sinn, wenn Sie den Verdacht haben, dass MS Benutzer einschließen möchte: Es macht es sehr schwierig, modernen gcc-basierten Code in MSVC zu portieren, was zumindest für mich äußerst schmerzhaft ist.
Es gibt jedoch eine Problemumgehung: Beachten Sie, dass Intel diesbezüglich viel besser informiert ist. Der Intel C-Compiler kann C99-Code verarbeiten und verfügt sogar über dieselben Flags wie gcc, wodurch das Portieren von Code zwischen Plattformen erheblich vereinfacht wird. Der Intel-Compiler arbeitet auch in Visual Studio. Wenn Sie also MS COMPILER verschrotten, können Sie immer noch die MS IDE verwenden, von der Sie glauben, dass sie einen Wert hat, und C99 nach Herzenslust verwenden.
Ein vernünftigerer Ansatz ist es, ehrlich zu Intel CC oder gcc zu wechseln und Eclipse für Ihre Programmierumgebung zu verwenden. Die Portabilität von Code unter Windows-Linux-Solaris-AIX-etc ist meiner Erfahrung nach normalerweise wichtig, und dies wird von MS-Tools leider überhaupt nicht unterstützt.
quelle
Herb Sutter ist sowohl Vorsitzender als auch ein sehr aktives Mitglied des C ++ - Standardisierungskomitees sowie Softwarearchitekt in Visual Studio für Microsoft.
Er gehört zu den Autoren des neuen C ++ - Speichermodells, das für C ++ 0x standardisiert ist. Zum Beispiel die folgenden Papiere:
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
habe seinen Namen drauf. Ich denke, die Aufnahme von C ++ 0x unter Windows ist gewährleistet, solange H. Sutter bei Microsoft bleibt.
Da C99 nur teilweise in Visual Studio enthalten ist, ist dies vermutlich eine Frage der Prioritäten.
booleschekomplexe Implementierung in C99 ist bestenfalls lächerlich ... Siehe http://david.tribble.com/). text / cdiffs.htm für weitere Informationen)Wäre ich Microsoft, warum sollte ich Funktionen implementieren, die nur wenige Benutzer jemals verwenden werden, wenn dieselben Funktionen bereits in mehr Community-aktiven Sprachen angeboten werden, die bereits von den meisten Benutzern verwendet werden?
Fazit?
C ++ 0x wird als Erweiterung von VS 2008 oder in der nächsten Generation (Generationen?) Von Visual Studio enthalten sein.
Die nicht bereits implementierten C99-Funktionen werden in den nächsten Jahren nicht verfügbar sein, es sei denn, es passiert etwas Dramatisches (ein Land voller C99-Entwickler erscheint aus dem Nichts?)
Bearbeiten 2011-04-14
Anscheinend existiert das "Land voller C99-Entwickler" bereits: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6415401
^ _ ^
Der letzte Kommentar unter: http://blogs.msdn.com/vcblog/archive/2007/11/05/iso-c-standard-update.aspx#6828778 ist jedoch klar genug.
Bearbeiten 2012-05-03
Herb Sutter machte deutlich, dass:
Der Blog-Beitrag fügt Links und weitere Erklärungen für diese Entscheidungen hinzu.
Quelle: http://herbsutter.com/2012/05/03/reader-qa-what-about-vc-and-c99/
quelle
restrict
Schlüsselwort. Es gibt eine Menge großartiger C99-Funktionen, die in C ++ fehlen, und diese Funktionen verwende ich jeden Tag als C-Programmierer.restrict
Schlüsselwort können Sie anscheinend weiterhin in C ++ verwenden: stackoverflow.com/questions/776283/… . . .Ab VC2013 Preview 1 , C99 werden ein breiterer Satz von C ++ 11 und einige neu eingeführte C ++ 14-Standards unterstützt. Weitere Informationen finden Sie im offiziellen Blog: http://blogs.msdn.com/b/vcblog/archive/2013/06/27/what-s-new-for-visual-c-developers-in-vs2013-preview. aspx
Aktualisieren:
Von https://news.ycombinator.com/item?id=9434483 (Stephan T Lavavej aka: STL ist Betreuer des STL @ VC-Teams):
Weitere Informationen finden Sie in diesem Beitrag: http://blogs.msdn.com/b/vcblog/archive/2015/04/29/c-11-14-17-features-in-vs-2015-rc.aspx .
quelle
Ich war an der ISO C ++ - Arbeit (2000-2005) beteiligt, und Microsoft hat wichtige Beiträge zu dieser Sprache geleistet. Es besteht kein Zweifel, dass sie unter C ++ 0x arbeiten werden, aber sie brauchen etwas mehr Zeit als Intel. Micosoft muss sich mit einer größeren Codebasis auseinandersetzen, die häufig ihre proprietären Erweiterungen verwendet. Dies führt einfach zu einer längeren Testfase. Sie werden jedoch irgendwann den größten Teil von C ++ 0x unterstützen (Export wird jedoch immer noch nicht geliebt, oder so verstehe ich).
Wenn es um ISO C geht, sind die Leute, die an Standards arbeiten, nicht repräsentativ für den Microsoft-Markt. Microsoft-Kunden können C ++ 98 verwenden, wenn sie nur nach einem besseren C suchen. Warum sollte Microsoft also Geld für C99 ausgeben? Sicher, Microsoft hat Teile ausgewählt, aber das ist eine vernünftige Angelegenheit. Sie würden diese sowieso für C ++ 0x brauchen, warum also warten?
quelle
Die MSVC-Unterstützung für C fehlt leider sehr. Es wird nur der Teil von C99 unterstützt, der eine Teilmenge von C ++ ist. Dies bedeutet, dass es beispielsweise physikalisch unmöglich ist, ffmpeg oder seine libav * -Bibliotheken in MSVC zu kompilieren, da sie viele C99-Funktionen wie benannte Strukturelemente verwenden. Dies wird durch die Tatsache verschlimmert, dass libavcodec auch einen Compiler benötigt, der die Stapelausrichtung beibehält, was MSVC nicht tut.
Ich arbeite an x264, die im Gegensatz zu ffmpeg nicht anstrengen zu MSVC zu unterstützen, obwohl so oft einen Alptraum an und für sich gewesen zu tun. Die Stapelausrichtung wird nicht beibehalten, selbst wenn Sie den höchsten Funktionsaufruf explizit über eine explizite Assembly-basierte Stapelausrichtungsfunktion übergeben. Daher müssen alle Funktionen, die einen ausgerichteten Stapel erfordern, deaktiviert werden. Es war auch sehr ärgerlich, dass ich auch keine Vararrays verwenden kann; Vielleicht ist dies das Beste, da GCC sie anscheinend in Bezug auf die Leistung massiv pessimiert.
quelle
Ein neuerer Beitrag zur Kompatibilität der C ++ 11-Funktionen von MSVC für MSVC 2010 und 2011 ist jetzt online .
quelle
Microsoft hat nie wirklich Interesse daran bekundet, mit dem c99-Standard (der mittlerweile in die Jahre gekommen ist) auf dem Laufenden zu bleiben. Traurig für C-Programmierer, aber ich vermute, dass Microsoft sich mehr für die C ++ - Community interessiert.
quelle
Visual C ++ 2008 SP1 enthält mindestens Teile von TR1, und von Zeit zu Zeit bloggt oder spricht das Visual C ++ - Team über C ++ 0x. Ich denke, sie werden es irgendwann in der Funktion unterstützen. Ich habe allerdings nichts offizielles gelesen.
quelle
Aktualisierte Informationen hierzu:
Es gibt jetzt (10. November 2008) eine "Community Tech Preview" (CTP) von VS2010, die eine Vorschau von VC10 enthält, in der einige Teile von C ++ 0x implementiert sind (beachten Sie, dass VC10 nicht den vollständigen Satz von C ++ 0x enthält Änderungen auch bei Freigabe von VC10 implementiert):
http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&displaylang=de
Einige Details zu den Neuerungen im VC10 CTP:
Wie im obigen Artikel erwähnt, enthält der Visual C ++ - Compiler in der Community Technology Preview (CTP) von Microsoft Visual Studio 2010 im September Unterstützung für vier C ++ 0x-Sprachfunktionen, nämlich: "
quelle
Herb Sutter ist Vorsitzender des ISO C ++ - Normungsgremiums und arbeitet auch für Microsoft. Ich weiß nichts über den Visual Studio C-Standard - hauptsächlich, weil ich nie einfaches C verwende -, aber Microsoft ist sicher, dass es versucht, den neuen C ++ - Standard voranzutreiben. Ein Beweis dafür ist - wie bereits von OregonGhost erwähnt - der TR1, der in der neuesten Visual Studio Service-Version enthalten ist.
quelle
Das Visual C ++ - Team hat eine Tabelle mit C ++ 0x-Funktionen veröffentlicht, die in der Version 2010 unter http://blogs.msdn.com/b/vcblog/archive/2010/04/06/c-0x-core-language unterstützt werden -features-in-vc10-the-table.aspx . Da zwischen der Spezifikation und der Implementierung eine Verzögerungszeit liegen kann, erscheint dies ziemlich vernünftig. Wikipedia hat einen schönen Artikel über die Spezifikation. Es ist noch nicht fertig, als ich das schreibe.
quelle
Das Visual C ++ Bloq bietet viele Informationen zu verschiedenen interessanten Punkten in Bezug auf die Unterstützung von C ++ 11 in VC ++ 11, einschließlich mehrerer Tabellen
Visual C ++ Team Blog, C ++ 11 Funktionen in Visual C ++ 11
quelle