Wie wichtig ist es, dass Sie den C ++ - Standard kennen?

10

Ich habe versucht zu suchen, aber ich habe keine ähnliche Frage gesehen (entweder diese oder meine Suchterminologie war falsch - wenn ja, können Sie sie gerne schließen).

Ich bin ein begeisterter Benutzer von SO, und ich stelle fest, dass es in Diskussionen und Antworten viele Verweise auf den C ++ - Standard gibt - und ich muss zugeben, ich habe dieses spezielle Dokument nie gelesen, die Sprache macht meine Augen weh ... Also Die Frage ist, kann ein C ++ - Entwickler wirklich seinen Lebensunterhalt mit Code verdienen, ohne dieses Dokument jemals gelesen zu haben? Ist es wirklich wichtig für uns Sterbliche, die nicht in der Lage sind, Compiler zu schreiben?

Nim
quelle
Das Fortbestehen der Fragen, die mit kurzen Zitaten aus dem Standard beantwortet werden, sollte ein ausreichender Beweis dafür sein, dass das Lesen keine Voraussetzung für die Verwendung der Sprache ist ... (vorausgesetzt, Sie haben eine
Möglichkeit

Antworten:

16

Nein - ohne kommt man gut zurecht

Sie werden jedoch ein viel tieferes Verständnis haben, wenn Sie sich die Zeit nehmen, es zu lernen. Folgen Sie vielleicht den Referenzen aus diesen Fragen, die Sie beunruhigen, und lernen Sie jeweils einen kleinen Teil.

Gary Rowe
quelle
8

Wenn Sie über die Sprachsemantik und das Standardese streiten möchten, ist der Standard sehr wichtig. (Ich meine das nicht völlig abfällig.) Wenn Sie nur in der Sprache arbeiten wollen ( im Vergleich zur Sprache), dann ist es viel weniger.

Der Standard kann einen anständigen Verweis auf die Standardbibliothek enthalten (nicht so sehr für die Sprache selbst), wenn Sie sich ein wenig damit vertraut gemacht haben, aber ich zögere, die Verwendung auf diese Weise zu empfehlen. Die meisten Menschen scheinen mit anderen Materialien besser zurechtzukommen. Trotzdem wende ich mich meistens dem Standard zu, wenn ich etwas über die stdlib nachschlagen muss.

Das Lesen der Ausschussentwürfe und -papiere ist jedoch eine Möglichkeit, mit C ++ 0x Schritt zu halten - tatsächlich eine der wenigen Möglichkeiten, die derzeit zur Verfügung stehen.

Für SO und andere Foren zögere ich, den Standard zu zitieren, es sei denn, das Poster würde eindeutig und definitiv davon profitieren - vielleicht haben sie darum gebeten, oder ich denke, sie erwarten dies implizit. In den meisten Fällen und insbesondere bei Programmierern, die neu in C ++ sind, scheint das Zitieren normalerweise nicht viel zu helfen.

Fred Nurk
quelle
Wenn jemand wissen möchte, was die Sprache tun soll, ist der Standard von unschätzbarem Wert. Wenn sie wissen wollen, warum der Compiler etwas tut, ist dies oft sehr nützlich. Für andere Fragen nicht so sehr.
David Thornley
1
@DavidThornley: Es ist schwer zu beurteilen, nachdem ich so lange daran gewöhnt war, den Standard selbst zu lesen, aber es scheint definitiv, dass die meisten Leute Texte wie TC ++ PL zugänglicher finden, selbst um herauszufinden, was die Sprache tun sollte.
Fred Nurk
1
@ Fred Nurk: Fast alles ist zugänglicher als der Standard. Ich wollte Fragen zu SO und dergleichen beantworten und war mir darüber nicht klar. Es fügt ein wenig Autorität hinzu, wenn Leute cplusplus.com und andere Quellen zitieren.
David Thornley
@DavidThornley: Ich werde solche Websites sehr selten zitieren (insbesondere cplusplus.com hat zu viele Probleme für meinen Geschmack), aber für die meisten Poster auf SO scheinen sie auch bei Fehlern nützlicher zu sein als der Standard - und sind einfach Online verfügbar ist leider ein großer Teil davon.
Fred Nurk
@Fred, das ist interessant zu wissen, ich habe immer gedacht, dass cplusplus eine gute Referenz ist (Nachteil ist ihre Werbequelle - was höchst unangemessen ist!), Jetzt muss ich daran denken, mit der sgi-Referenz zu verweisen.
Nim
6

Sie sollten es als Referenz zur Verfügung haben, aber ich glaube, niemand außer seinen Autoren hat das Ganze gelesen ... wenn sie es überhaupt getan haben (sie arbeiten in Gruppen, die sich auf Bereiche konzentrieren, also bezweifle ich es irgendwie).

Der Grund, warum Sie es zur Verfügung haben sollten, ist, dass eine Frage zur Codekorrektheit manchmal nur unter Bezugnahme auf den Standard beantwortet werden kann.

Edward Strange
quelle
3
In den meisten Situationen brauchen Sie es nicht. Was Sie brauchen, wird in anderen Büchern behandelt. Nur wenn Sie zu diesen Eckfällen gelangen oder nie Ecken der Sprache verwendet haben, müssen Sie die Definition im Standard überprüfen (und normalerweise gibt es eine Alternative zur Verwendung der Eckfälle in der Sprache). Überlassen Sie den Standard den Compiler-Entwicklern, und allgemeine Entwickler können mit anderen nicht formalen Texten auskommen.
Martin York
2

Es ist wahrscheinlich wichtiger, dass Sie wissen, wo sich der Standard befindet und wann Sie nachschlagen müssen.

Wenn nichts anderes, sollten Sie regelmäßig überprüfen, ob Sie die neueste Version einhalten und Ihren Code nicht driften lassen.

ChrisF
quelle
2

In einem großen Team sollten Sie im Allgemeinen eine (aber normalerweise nicht mehr) Person haben, die den Standard zumindest einigermaßen gut kennt, damit sie beispielsweise Argumente / Fragen dazu klären kann, ob ein bestimmter Code den Anforderungen des Standards entspricht.

Realistisch gesehen müssen diese Antworten jedoch durch Urteilsvermögen und Erfahrung gemildert werden. Der (aktuelle) Standard sagt, exportist ein Schlüsselwort und sagt, was es tut. In Wirklichkeit funktioniert das bei den meisten Compilern einfach nicht so. In vielen Fällen kann dies auch ein Zeichen dafür sein, dass der Code möglicherweise neu geschrieben werden muss, um einfacher zu sein , wenn Sie drei Personen haben, die sich über einen bestimmten Code nicht einig sind und was der Standard dazu sagen könnte .

Gleichzeitig werden die meisten Teams die meiste Arbeit auf einer Plattform erledigen, und ein Standard (und jemand, der zumindest einigermaßen damit vertraut ist) kann überprüfen, ob das, was Sie tun, nicht zu eng mit dieser Plattform verbunden ist nützlich sein.

Jerry Sarg
quelle
Das "nicht mehr" ist wahrscheinlich wichtig - es sei denn, Sie möchten Streit zwischen den Experten über die Interpretation des Standards <g>
Steve314
2

Insgesamt verdiene ich mein Brot als C ++ - Entwickler seit ungefähr 4 Jahren, ohne den Standard gelesen zu haben. Tatsächlich habe ich in den ersten zwei Jahren nicht viel anderes als C ++ Primer von Stan Lippman und MSDN-Artikel gelesen . Es ist also möglich - tatsächlich befürchte ich, dass die meisten Leute, die C ++ - Code produzieren, nicht einmal so grundlegende Werke wie Effective C ++ et al. Gelesen haben . was ich selbst erst später entdeckte.

IMHO, um ein guter C ++ - Entwickler zu sein, muss man die innere Logik der Sprache (n) (wie Scott Meyers bemerkt, C ++ besteht aus 4 verschiedenen Sprachen) und die gängigen Redewendungen und Fallstricke verstehen und bereit sein, immer mehr zu lernen. Das Lesen von Threads auf SO kann viel über Eckfälle lehren, in denen es sich wiederum lohnt, relevante Teile des Standards zu lesen, wenn jemand wirklich tiefer graben möchte. Aber das Ganze zu lesen ist für die meisten von uns wahrscheinlich selten notwendig.

Péter Török
quelle
Guter Punkt, dass es wichtige Bücher gibt, die viel wichtiger sind (für die meisten Programmierer, die keine Compiler schreiben) als der Standard. +1 - aber es gibt eine ganze Reihe von "wesentlichen" Büchern.
Steve314
@ Steve314, in der Tat - es würde jedoch nicht helfen, diese spezielle Frage zu beantworten, wenn man anfängt, sie aufzulisten. Aber ich habe jetzt einen Link zum entsprechenden Thread auf SO hinzugefügt.
Péter Török
@ Péter - nette Geste, aber mein unausgesprochener Punkt war, dass keines der "wesentlichen" Bücher wirklich wesentlich ist. Die meisten C ++ - Programmierer sollten mehrere Titel aus dieser Liste gelesen haben, aber alle ? Unwahrscheinlich. Selbst wenn Sie dies tun würden, bezweifle ich, dass Sie all dieses Wissen wirklich behalten könnten. "Effective C ++" steht auf meiner Liste, die ich noch nicht gelesen habe, daher zähle ich es offensichtlich als ein weniger als wesentliches Buch.
Steve314
@ Steve314, ich meinte nicht, dass man all diese lesen muss - ich habe es auch nicht und einige von ihnen habe ich gelesen, war aber nicht beeindruckt von :-) Es gibt auch einige Überschneidungen zwischen einigen von diesen, also ist es eine Frage des persönlichen Geschmacks und des Zufalls, welchen ein Entwickler zuerst trifft und / oder welchen er als "wesentlich" bezeichnet. Ich glaube, das Wichtigste ist, dass es einige gängige Redewendungen gibt, denen man gut folgen kann, und dass man die üblichen Fallstricke vermeiden sollte, und man sollte über die meisten davon Bescheid wissen, und der am wenigsten schmerzhafte Weg, diese zu lernen, ist aus (einigen) dieser Bücher .
Péter Török
Natürlich werde ich nicht wirklich wissen, wie wichtig es ist, bis ich es gelesen habe.
Steve314
1

"Den Standard kennen" ist eine Frage des Grades und bedeutet nicht unbedingt, das Originaldokument auswendig zu lernen.

Ein Standarddokument soll maßgeblich sein - nicht unbedingt zugänglich. Es gibt viele in einem Schritt entfernte Quellen, die viel leichter zugänglich sind. Es stimmt, es gibt ein bisschen chinesisches Flüstern, aber es ist selten ein großes Problem - sicherlich auf der Ebene, die nur einen Schritt entfernt ist.

Vollständige Offenlegung - das muss ich sagen - ich habe den Standard nie gelesen. Obwohl ich mich wahrscheinlich bemühen werde, das vollständige C ++ 0x-Dokument zu erhalten, wenn es fertiggestellt ist.

BEARBEITEN natürlich, wenn Stroustrup eine neue Ausgabe von "The C ++ Programming Language" veröffentlicht, kann ich mich wieder damit zufrieden geben.

Steve314
quelle
1

Bei der Programmierung in C ++ habe ich häufig auf den Sprachstandard verwiesen, um Informationen zu Standardbibliotheksfunktionen zu erhalten. Die C ++ - Standardbibliothek ist ziemlich groß, und ich fand, dass der Sprachstandard die bequemste Quelle ist.

Kevin Cline
quelle
1
Wow wirklich? Ich finde Online-Ressourcen wie cplusplus in diesem Sinne immer unverzichtbar ...
Nim
1

Ich hätte schwören können, dass ich diese Frage schon einmal beantwortet habe, aber ich kann sie nicht finden. Grundsätzlich unterscheidet sich C ++ von Java darin, dass es Lücken in der Spezifikation haben soll , die andere Plattformspezifikationen füllen können (z. B. POSIX, die ABI-Spezifikation Ihrer Architektur oder Ihr Compiler). Wenn Sie also Fragen auf Websites wie StackOverflow beantworten, wird häufig die Spezifikation aufgerufen, um anzuzeigen, dass nur, weil etwas auf einem Compiler funktioniert, dies nicht bedeutet, dass es überall funktioniert. Mit anderen Worten, ein großer Grund für die Bezugnahme auf bestimmte Spezifikationen bei der Arbeit mit C ++ besteht darin, genau zu klären, wie portabel eine bestimmte Verwendung der Sprache ist.

Ken Bloom
quelle