Im Juli 2009 C ++ 0x Treffen in Frankfurt wurde beschlossen, Entfernen Sie Konzepte aus C ++ 0x. Persönlich bin ich enttäuscht, aber ich hätte lieber ein implementierbares C ++ 0x als kein C ++ 0x. Sie sagten, dass sie zu einem späteren Zeitpunkt hinzugefügt werden.
Was sind Ihre Meinungen zu dieser Entscheidung? Wie wird es dich beeinflussen?
Persönlich bin ich nicht unglücklich über die Entfernung, da der Zweck von Konzepten hauptsächlich darin bestand, Fehlermeldungen zur Kompilierungszeit zu verbessern, wie Jeremy Siek, einer der Mitautoren des Concepts-Vorschlags, schreibt ( Ссылка ):
Während der Concepts-Vorschlag nicht war Perfekt (kann jede Erweiterung auf C ++ wirklich immer perfekt?), würde es habe eine sehr brauchbare und hilfreiche Erweiterung der Sprache, ein Erweiterung, die drastisch wäre Reduziere die berüchtigten Fehlermeldungen das aktuelle Benutzer der Vorlage Bibliotheken werden geplagt.
Natürlich hatten Konzepte mehr Sinn, als den Compilern nur zu ermöglichen, kürzere Fehlermeldungen zu geben, aber momentan denke ich, dass wir alle ohne sie leben können.
EDIT: Herb Sutter schreibt auch auf seinen Blog :
F: War das nicht C ++ 0x ein großes? Funktion?
A: Nein. Konzepte wären großartig, aber für die meisten Benutzer die Anwesenheit oder Abwesenheit von Konzepten wird nein machen Unterschied zu ihrer Erfahrung mit C ++ 0x mit Ausnahme der Fehlerqualität Nachrichten.
F: Gibt es keine Konzepte zum Hinzufügen von Major? neue Ausdruckskraft der Sprache, und ermöglichen so wichtige neue Arten von Programme oder Programmierstile?
A: Nicht wirklich. Konzepte sind fast Es geht darum, einen besseren Fehler zu bekommen Nachrichten.
Ich freute mich auf sie. Meistens für bessere Fehlerberichte, wenn die Kompilierung fehlgeschlagen ist. Nichts wie das Lesen von 1000 Zeichenketten, um Ihre dummen Fehler herauszufinden.
Ich bin traurig, dass sie von der Liste fallen.
Persönlich mag ich die Typen, die ich verwende, um einer bekannten Schnittstelle zu gehorchen, seien es Primitive, Strukturen oder Klassen. Auf diese Weise weiß ich, wie ich den Typ verwenden kann und was ich implementieren muss, um den Typ bereitzustellen.
Dies ist mit der objektorientierten Standardprogrammierung einfach zu erreichen. Meiner Meinung nach, während technisch generische Programmierung stark typisiert ist, verliert es das Interface-Konzept, das OO bietet. In der Tat ist die generische Programmierung eine Art der dynamischen Typisierung, die aber vom Kompilierungstyp aus einer Schnittstellenperspektive aufgelöst wird.
Zum Beispiel gebe ich einen Iterator an einen Algorithmus weiter, der einige Operatoren bereitstellen muss, aber es gibt keine Schnittstelle, um anzugeben, was diese Operatoren tun sollen oder was ihre Verträge sind (nur Dokumentation). Wenn Sie operator++()
und operator*()
haben, wird es kompiliert, aber es gibt Ihnen nicht den gleichen Typ, den Ihnen Schnittstellen in OO geben.
Für mich bringen Konzepte Typen zur generischen Programmierung und die Sicherheitsschnittstellen bringen OO, die bessere Kompilierung ist nur ein Bonus.
Ich weiß, dass wir alle C ++ - Programmierer sind und wir sehr schlau sind. Wir lesen die Dokumentation und verstehen das Überladen von Operatoren und die Feinheiten der generischen Programmierung. Aber wenn die Sprachbereitstellung garantiert, dass ich mich darauf verlassen kann und der Compiler testen kann, kann ich mehr Hirnleistung aufwenden, um die Probleme zu lösen, die ich zu lösen habe.
Ich habe mich noch nicht sehr in Konzepte vertieft. Was ich jedoch bemerkte, war, dass sie im Allgemeinen recht ausführlich waren. Ich denke, ich würde sie nicht in der STL-Bibliothek haben wollen. Ich kenne die Bibliothek bereits, ich kann alle Kompilierungsfehler leicht analysieren. Keine Notwendigkeit für Konzepte. Konzepte wären jedoch nett, um meine eigenen Klassen zu beschreiben, so dass Mitarbeiter sie schneller lernen und Missbrauch vermeiden würden. Jedes Konzept ist, soweit ich eine Einschränkung verstehe, die Verwendung eines Typs begrenzt. Das wäre schön, wenn man neue Interfaces erstellt, die jemand anders lernen muss.
Ich mag Konzepte sehr! Die Möglichkeit, sehr unterschiedliche Typen zu erzeugen, verhält sich bei einer externen Definition gleich (das Concept-Mapping) ist ein sehr mächtiges und nützliches Feature (zumal es zur Kompilierzeit auftritt und somit die Laufzeit nicht beeinflusst).
Ich denke, es ist noch leistungsfähiger und besser als alle nützlichen Features direkt in den Typ zu implementieren und über Schnittstellen wie in .NET zu arbeiten. Dies erlaubt später die Erweiterbarkeit nicht. (Okay, .NET kennt Erweiterungsmethoden seit 3.0 (oder 3.5, nicht sicher), aber es ist nicht dasselbe).
Die Verbesserung von Fehlermeldungen ist eine weitere (und ursprüngliche) große Verbesserung, die Konzepte mit sich bringen.
Aber einer meiner ersten Gedanken beim Lesen von Konzepten war: Das wird eine LANGE Zeit brauchen, bis GCC und MSVC es unterstützen.
Also ich denke, es macht Sinn, es aus dem kommenden Standard zu entfernen. ABER, was ich wünschen würde, ist eine feste Vereinbarung von Features für Post C ++ 0x Standards, die Konzepte enthält. Dies würde es den Compiler-Herstellern ermöglichen, sich besser auf den C ++ 2x-Standard vorzubereiten.
Ich hoffe also wirklich, dass wir Konzepte in der nicht so fernen Zukunft sehen werden.
Ich denke, sie haben die richtige Entscheidung getroffen. Ich würde gerne eine qualitativ hochwertige Implementierung von Konzepten sehen, die der Sprache hinzugefügt werden, aber die Spezifikation wurde in die falsche Richtung geleitet, was den Benutzer zu sehr belastet, um Concept Maps explizit zu spezifizieren. Stroustrups Papier hat einige Korrekturen vorgeschlagen, aber das wäre eine ziemlich radikale Änderung, so spät in dem Prozess, denke ich. Und ohne Compiler, um es zu testen.
Zusammengefasst wären Konzepte, wie sie gegen Ende spezifiziert wurden, ein großer Rückschritt gewesen, der generische Programmierung behindert und möglicherweise die C ++ - Gemeinschaft zersplittert, wobei eine große Gruppe von Programmierern an C ++ 03 festhält.
>Die von Stroustrup vorgeschlagenen "festen" Konzepte wären, soweit ich sehen kann, in Ordnung, aber es wäre riskant, diese Änderungen so schnell zu übernehmen. (Und ich bin nicht überzeugt, dass es keine weiteren Verzögerungen verursacht hätte.)
Ehrlich gesagt bin ich froh zu sehen, dass sie auf Nummer sicher gegangen sind und sie vorerst entfernt haben. Wir haben bis jetzt ohne Konzepte überlebt, und ich kann für weitere 5 Jahre ohne sie leben.
Es ist sehr traurig. Die Einführung von Konzepten in C ++ würde das Typsystem fast auf das gleiche Leistungsniveau bringen wie die Haskell-Typklassen, und es wäre großartig gewesen - eine Sprache, die auf Geschwindigkeit optimiert ist und Ihnen erlaubt, alles zu tun, was Sie wollen (während immer noch schnell!). Es sollte auch das seit langem bestehende Problem von STL und Boost (und Template-Bibliotheken im Allgemeinen) beheben, das wegen laxer "kompilierbarer Duck-Typ" -Natur von C ++ 03-Templates und den daraus resultierenden Problemen mit dem Compiler schwierig zu verwenden ist Fehlermeldung.
Ich dachte auch, dass dies ein schlechter Ruf war und dass C++0x
für die Entfernung schlechter sein wird, aber ich habe gerade Stroustrups Einfachere Verwendung von Konzepten Ich habe meine Meinung geändert. Ich hatte keine Ahnung, dass der Konzeptvorschlag so kompliziert war und ich denke, es ist gut, dass er gut durchdacht ist, bevor er der Sprache hinzugefügt wird. Stroustrup predigt zwar, Konzepte zu behalten, doch sein Artikel überzeugte mich davon, dass Konzepte mehr schaden als nützen würden, und obwohl BS eine Lösung vorschlägt, befürchte ich, dass sie überstürzt wird und noch nicht alle Implikationen verstanden sind.
Ich bin traurig.
Ich checke das ConceptGCC und es ist großartig! Ich schreibe bereits eine einfache Bibliothek, und ich sehe einige Nachteile wie mehr Code zum Schreiben oder einige Gedanken über die Macht der Abstraktion der Konzepte. Die std-Konzepte-Bibliothek macht wirklich Probleme, so dass auch solche in Standard nur Missverständnis ist. Ich denke, der kommende Standard sollte nur die Grammatik des Konzepts standardisieren und einige Hinweise zur Verwendung geben.
Tags und Links c++ c++11 c++-concepts