Welche Rolle spielt C ++ heute?

41

Derzeit bin ich ein IT-Student und frage mich, was heute noch in C ++ wichtig ist. Wofür wird es verwendet? Ich habe einen C ++ - Grundkurs an meiner Universität abgeschlossen, kann mir aber nicht vorstellen, wo ich mein Wissen einsetzen und in welche Richtung ich C ++ lernen soll.

Mit anderen Worten, was sollte ich lernen, um ein erfolgreicher C ++ - Programmierer zu werden?

Momentan lerne ich Java, nur weil ich nicht genau sehe, in welchem ​​Bereich C ++ heute nützlich sein könnte, aber ich weiß genau, welche Art von Arbeit ich als Java-Programmierer machen werde. Aber ich hoffe immer noch, dass C ++ nicht tot ist.

Hades
quelle
2
Das ist mein Standpunkt. C ++ ist in Echtzeitsituationen (und Videospielen) sehr nützlich. Ich benutze C ++ auch für Desktop-Anwendungen (Qt nicht vergessen) aus Performance-Gründen.
Hosomaki
1
@stign IMO es ist wahrscheinlich, dass es irgendwann sterben wird, da es wahrscheinlich eine Zeit geben wird, in der alle Sprachen heute veraltet sind (wahrscheinlich aufgrund massiver Änderungen in der verwendeten Hardware).
Kenneth
17
C ++ ist alles andere als tot (ich schreibe jeden Tag neuen Code hinein), und wenn COBOL ein Indiz dafür ist, werde ich noch viele, viele Jahre arbeiten müssen.
Michael Kohne
2
Schauen Sie sich The Programming Languages ​​Beacon an und ziehen Sie Ihr eigenes Fazit: lextrait.com/vincent/implementations.html
Nemanja Trifunovic
1
Kürzlich habe ich einige interessante Videos auf Microsofts Channel 9 gesehen . Microsoft hat Millionen für Marktforschung ausgegeben und spricht auf der Grundlage seiner Forschung von einer C ++ - Renaissance. Sehen Sie dieses Video .
Grokus

Antworten:

57

Das Killer-Feature von C ++ ist das bereichsgebundene Ressourcenmanagement SBRM (besser bekannt als " RAII "). Es ist die einzige industrielle Programmiersprache, die auf diesem Konzept aufbaut. In C ++ sind die Lebenszeiten aller Objekte genau bekannt, und (gut geschriebene) C ++ - Programme gewährleisten, dass Ressourcen vollständig deterministisch erfasst und freigegeben werden. Im Vergleich dazu bieten Sprachen, die vom Müll gesammelt oder auf andere Weise verwaltet werden, keine solchen Garantien. Tatsächlich können Objekte in diesen Sprachen nach dem Ende ihres Lebens bestehen bleiben.

Aus diesem Grund wird C ++ in den Bereichen Finanzen, Videospiele, eingebettete Hochleistungs- und Echtzeitsysteme, Transportwesen, Fertigung und in anderen Branchen eingesetzt, in denen Determinismus und Präzision wichtig sind. Es gibt keine Alternativen.

Zugegeben, es wurde für viel mehr Aufgaben als diese verwendet, und diese Aufgaben gehen C # und Python und anderen besser geeigneten Sprachen verloren, aber das hat keinen Einfluss auf die Kernnische.

Cubbi
quelle
20
Jeder, der malloc in C ++ benutzt, möchte sich mit einem harten Gegenstand den Kopf stoßen. Außerdem gibt es eine weniger bekannte Funktion des Operators newin C ++, die als Platzierung bezeichnet wird. Es ermöglicht die Wiederverwendung eines aktuell belegten Speicherplatzes. Wenn jemand also eine Fragmentierung vermeiden (oder minimieren) möchte, kann er dies theoretisch tun. Und vorhersehbar ist nicht dasselbe deterministisch.
Tamás Szelei
4
@Apalala C ++ verfügt auch über eine Referenzzählung, ist jedoch in Bezug auf die Verwaltung der Objektlebensdauer viel schlechter als SBRM. Ich spreche nicht nur über harten RT-Determinismus, sondern über deterministisches Verhalten des Objektmodells.
Cubbi
4
Als ich C ++ lernte, war RAII nicht besonders bekannt. Ich habe neues und lösch- und gehirnbasiertes Zeigermanagement gelernt. Ich glaube nicht, dass man es als "um das Konzept herum gebaut" charakterisieren kann. Die Bibliotheken und andere Unterstützungsstrukturen, die heute verwendet werden, haben möglicherweise, aber nicht die Hauptsprache oder -syntax.
Jprete
7
@jprete Es stimmt, dass viele der Stärken von C ++ entdeckt und nicht entworfen wurden. Dieser Beitrag handelt von der Sprache nach 2005.
Cubbi
5
RAII wurde in C ++ entwickelt. Aber die meisten C ++ - Programmierer schrieben einfach weiter C und ersetzten malloc durch new und free durch delete.
Kevin Cline
40

Es gibt einige Märkte für C und C ++ (nach meinem begrenzten Verständnis)

  1. Bestehender Code. C und C ++ haben einige der größten existierenden Codebasen. Code dieser Größe kann nicht einfach weggeworfen werden, nur weil die "nächste heiße neue Sprache" auf dem Vormarsch ist. C-Bindungen sind auf den meisten Plattformen so ziemlich der Standard für die Interlangauge-Interaktion. Daher ist es nützlich, Wrapper-Bibliotheken (zumindest) in C oder C ++ zu erstellen.
  2. Hochleistungsapplikationen (zB Hochfrequenzfinanzierung). C und C ++ erzielen immer noch eine bessere Gesamtleistung als die meisten anderen Programmiersprachen. Vor allem in C ++ werden Abstraktionen häufig mit reinen Compiler-Templates erstellt, wodurch die Berechnung von der Laufzeit auf die Kompilierungszeit verlagert wird (wodurch die gesamte App schneller wird).
  3. (Ähnlich zu 2) Anwendungen mit geringer Latenz. Sprachen, die z. B. auf der CLR oder der JVM ausgeführt werden, können je nach Anwendung fast so schnell sein wie C ++. Sie müssen jedoch die CLR oder die JVM selbst in den Speicher laden, bevor Ihr Programm ausgeführt werden kann. Wenn Sie harte Startanforderungen haben, ist dies wichtig. BEARBEITUNG AUS KOMMENTAR : In diesem Fall sind die Anforderungen an die harte Latenzzeit einer Beschreibung hier zu beachten. Sprachen, die auf virtuellen Maschinen ausgeführt werden, bieten selten harte Zeitlimits, da das Ausführen von z. B. Garbage Collection kein deterministischer Prozess ist.
  4. Eingebettete Systeme. Einige eingebettete Systeme haben die Hardware, um beispielsweise die JVM (Googles Android (Okay, es ist nicht wirklich die JVM, aber es ist naheliegend), RIMs Blackberry) oder die CLR (Windows Phone) auszuführen, aber die meisten eingebetteten Systeme haben nicht die Macht dazu Führen Sie Sprachen aus, die mehr Laufzeitunterstützung erfordern als für C oder C ++ (was so gut wie gar keine Laufzeitunterstützung bedeutet).
  5. Bereitstellungsbeschränkte Anwendungen. Manchmal ist die Installation der JVM oder der CLR ein gewaltiger Overkill, wenn Ihr gesamtes Programm nur wenige hundert KB umfasst. (ZB die meisten der Programme auf ich arbeiten muss als Einzel eingesetzt werden , .EXEohne jede Art von Installateur oder so etwas Datei, denn diese gibt es keine Alternativen)
Billy ONeal
quelle
2
Die Startlatenz ist nicht die einzige Art von Latenz, mit der man sich befassen muss: Harte Echtzeitanforderungen können ein viel größerer Dealbreaker sein.
greyfade
1
Fügen Sie alles hinzu, wo Sie nicht an einen bestimmten Hersteller gebunden sein möchten (C # oder Objective-C) oder Ihre Sprache nicht in einer Reihe von Rechtsstreitigkeiten verschwinden soll (Java)
Martin Beckett
@greyfade: Das habe ich mit (2) gemeint, aber ich stimme zu, das ist nicht klar. Bearbeitet @Martin: Während ich denke, dass dies eine gute Stärke für C ++ ist, glaube ich nicht, dass es die Frage beantwortet - in welchen Märkten wird C ++ häufig verwendet. Ich glaube auch nicht, dass ich C # für einen bestimmten Hersteller als gesperrt bezeichnen würde, wenn eine von <S> BSD </ S> (OOPS: It's LGPL) lizenzierte Version der CLR vorhanden ist (Mono).
Billy ONeal
1
Auch 5. Betriebssysteme und Core Framework. Sie können eine Menge in einer virtuellen Maschine tun, aber die virtuelle Maschine muss noch in C und / oder C ++ implementiert werden.
Jan Hudec
1
@Jan: Ja, das würde es. Dinge wie Besinnung und Freunde würden Probleme 2-4 auslösen. Die einzige Untergruppe, die Sie wirklich zum Schreiben des Garbage Collectors benötigen, ist ein Objekt, das den physischen Speicher darstellt.
Billy ONeal