Was gefällt euch an C++?



  • Hallo,

    ich liebäugel damit mir C++ beizubringen und mich würde interessieren warum ihr euch für C++ entschieden habt bzw. was euch an der Sprache fasziniert.



  • Neugieriger schrieb:

    ich liebäugel damit mir C++ beizubringen und mich würde interessieren warum ihr euch für C++ entschieden habt bzw. was euch an der Sprache fasziniert.

    Ich könnte ein paar Sprachen aufzählen, wo mir was nicht paßt, und immer wieder sagen "In C++ ist das netter". Aber ein Vergleich wäre in "Rund um die Programmierung" wohl besser aufgehoben.

    Was finde ich an C++ besonders cool? Ich versuche es mal.

    - C++ paßt sehr gut zu RAII. http://de.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization oder wie bei Computerthemen oft auf Englisch besser http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization

    - Abstraktion kostet nichts. So muß ich als performance-orientierter Programmierer nicht dauernd Kompromisse eingehen, zum Beispiel dem Proxy verraten, wie das Speicherlayout der Matrix aussieht http://www.c-plusplus.net/forum/277573



  • Naja, man kann sowohl ultra-lowlevel als auch sehr abstrakt programmieren.

    Und du kannst wirklich fast programmieren wie du möchtest, es gibt fast immer mehrere Wege für ein Problem.

    Zu guter Letzt ist es relativ einfach fiese, schwer auffindbare Bugs zu erzeugen ...die zu suchen macht Spaß wie ein Sudoku 😛



  • volkard schrieb:

    - C++ paßt sehr gut zu RAII.

    Oder umgekehrt.

    Ich finde an C++ gut, dass es sowohl Low- als auch High-Level-Programmierung unterstützt, und dass ich es besser kann als meine furchterregend ahnungslosen Dozenten.

    Schlecht finde ich die weitgehende Kompatibilität zu C, die viele Anfänger in die Irre führt und für Massen an furchtbaren "C++"-Programmierern verantwortlich ist.

    ethon schrieb:

    Zu guter Letzt ist es relativ einfach fiese, schwer auffindbare Bugs zu erzeugen ...die zu suchen macht Spaß wie ein Sudoku 😛

    ...oh ja, das gefällt mir auch. Fiese Bugs sind ja auch ein nicht zu unterschätzender Vorteil.



  • An C++ gefällt mir, dass die Sprache für sehr viele Situationen mächtige Sprachmittel zur Verfügung stellt und dem Programmierer sehr viel Freiheit lässt. Beachtlich finde ich auch, was für Bibliotheken inzwischen entstanden sind.



  • Eigentlich ist C++ furchtbar langsam. Wenn der C++-Code eins zu eins in Maschinencode umgewandelt würde, dann ist die von volkard verlinkte Matrix unbrauchbar, da viel zu langsam.
    Hier liegt der Vorteil von C++: Bspw. in Java müssen die Klassenstrukturen vom Compiler erhalten bleiben und es wird auch nicht in Maschinencode sondern in irgend eine Zwischensprache übersetzt. In C++ hingegen kann der Compiler optimieren bis zum geht nicht mehr, so dass selbst langsamste Abstraktion in schnellstmögliche Prozessorbefehle umgewandelt werden. Das ist reiner Goodwill des Compilers und hat nur insofern mit C++ zu tun, als dass es so etwas zulässt.

    Mit der RAII hat es sich allerdings in sich:

    std::string s; // zwei Member werden auf 0 gesetzt
    std::cin >> s; // und gleich nochmal initialisiert
    
    std::vector<int> v(); // size wird auf 0 gesetzt
    v.reserve(1000); // und gleich nochmal initialisiert
    

    Mag sein, dass ein guter Compiler das wieder rausoptimiert, aber bei RAII muss man vorsichtig sein.



  • feuerundflamme schrieb:

    Das ist reiner Goodwill des Compilers und hat nur insofern mit C++ zu tun, als dass es so etwas zulässt.

    Gäbe es keine guten Compiler, würde ich auch kein C++ benutzen. Das gehört schon auch dazu.


  • Mod

    feuerundflamme schrieb:

    Eigentlich ist C++ furchtbar langsam. Wenn der C++-Code eins zu eins in Maschinencode umgewandelt würde, dann ist die von volkard verlinkte Matrix unbrauchbar, da viel zu langsam.
    Hier liegt der Vorteil von C++: Bspw. in Java müssen die Klassenstrukturen vom Compiler erhalten bleiben und es wird auch nicht in Maschinencode sondern in irgend eine Zwischensprache übersetzt. In C++ hingegen kann der Compiler optimieren bis zum geht nicht mehr, so dass selbst langsamste Abstraktion in schnellstmögliche Prozessorbefehle umgewandelt werden. Das ist reiner Goodwill des Compilers und hat nur insofern mit C++ zu tun, als dass es so etwas zulässt.

    😕 Erklär doch mal wie eine Klasse in Maschinensprache aussehen soll.



  • Die Mächtigkeit sowie die Geschwindigkeit des kompilierten Codes. Außerdem hat C++ für mich aufgrund der komplexen Syntax eine gewisse philosophische Ästhetik.



  • ganz klar:
    Perfomance, die möglichkeit sowohl low-level wie high-level zu programmierenund das breite einsatzspektrum. (versuch mal mit java eine tolle Graphik-Engine zu Programmieren 😉 ).



  • täusch ich mich oder spicken exceptions den code mit 5byte farjumps auf x86'er systemen? für richtig kleine chips ist c++ zu wuchtig!



  • _-- schrieb:

    täusch ich mich oder spicken exceptions den code mit 5byte farjumps auf x86'er systemen? für richtig kleine chips ist c++ zu wuchtig!

    Den Spruch kannst du noch ein paar Jährchen bringen und dann sind auch Billighandy von den Resourcen dazu in der Lage in C++ programmiert zu werden. Es ist also keine Frage wann C++ auch auf dem letzten Mikrocontroller/Handy/PDA/GPU etc. ankommt, sondern wann.



  • Ganz klar RAII & Destruktoren.
    Ich programmiere zu Hause auch ganz gerne mal C#-Sachen, aber da stört mich immer,
    dass ich nie so genau weiss (auswendig), wann da was 'disposed' werden muss.
    Also wann ich da umständlich einen using-Block/Dispose-Aufruf/try-finally(java) einbauen sollte.



  • nichtsoeinfach schrieb:

    _-- schrieb:

    täusch ich mich oder spicken exceptions den code mit 5byte farjumps auf x86'er systemen? für richtig kleine chips ist c++ zu wuchtig!

    Den Spruch kannst du noch ein paar Jährchen bringen und dann sind auch Billighandy von den Resourcen dazu in der Lage in C++ programmiert zu werden. Es ist also keine Frage wann C++ auch auf dem letzten Mikrocontroller/Handy/PDA/GPU etc. ankommt, sondern wann.

    das os einer ec-karte wird so schnell nicht in c++ entwickelt, da bin ich mir relativ sicher :p



  • Was mir gut gefällt, ist der Teil der "C++-Denke": "Programmiere so, dass der Compiler möglichst alle Fehler finden kann."

    Dieses "Code-Raushusten und dann auf das Testen hoffen", das sich in einigen anderen Programmiersprachen etabliert hat, macht zwar bisweilen Spaß (und macht es Einsteigern erstmal leicher), kostet aber letztlich Zeit und Stabilität (es wird IMMER am Testen gespart - spätestens, wenn es im Projekt eng wird).

    BTW: Das Performanceargument halte ich für überstrapaziert. Ich programmiere nun seit viele Jahren beruflich und die bislang aufgetretenen Performanceprobleme waren marginal im Vergleich zu den Problemen durch schlechtem Projektmanagement und Programmdesign (bisweilen waren sie sogar eine Folge davon). Und wenn Performance ein Problem war, dann lag es nicht an der Sprache, sondern viel eher an schlechter Konfiguration.
    Mir ist lediglich eine Fall bekannt, in dem bei einer ganz speziellen kleinen Komponenten durch den (lokalen) Einsatz von C++ deutliches Tuningpotential gehoben werden konnte.
    Nicht mißverstehen: Natürlich gibt es Situationen, in denen Performance wirklich wichtig ist - aber ich glaube, dass diese sehr viel seltener sind als die Diskussionen/Gedanken/Problematisierungen, die darum gemacht werden.

    Gruß,

    Simon2.



  • _-- schrieb:

    täusch ich mich oder spicken exceptions den code mit 5byte farjumps auf x86'er systemen? für richtig kleine chips ist c++ zu wuchtig!

    Dann nutze doch einfach keine Exceptions. Deswegen musst du doch nicht auf all die anderen tollen Vorteile von C++ verzichten.
    - Referenzen
    - Templates
    - Sichtbarkeit von Bezeichnern
    - Typsicherheit
    - Konstruktoren/Destruktoren

    Bis auf die Konstruktoren und Destruktoren bin ich mir ziemlich sicher, dass dadurch nicht mehr Code entsteht.



  • C++ hat für mich Vorteile und Nachteile. Wobei die Vorteile überwiegen, so das C++ bisher das beste "Paket" ist.

    C++ ist erstmal auf vielen Plattformen verfügbar, auch auf exotischen Systemen, wie Amiga, RISC OS usw. Auch ist es für aktuelle und alte Spielekonsolen verfügbar. Auch auf einem IBM z Mainframe ist ein C++ Compiler verfügbar. Andere Sprachen behaupten Plattformneutral zu sein, aber was nützt mir das, wenn deren Compiler/Interpreter/VM nur auf den Mainstream-Plattformen verfügbar ist?

    Weiterhin kann ich mit C++ nativen Code erzeugen. Ich weiß einfach nicht, warum ich Performance verschenken soll, wenn ich eine Bytecode-Sprache nutze.

    Die Sprache selbst gefällt mir auch sehr gut, auch wenn ich die C-Altlasten in C++ in neuen Projekten für sinnlos halte. Da sie manche Coder zu C-Coding verleiten. Hier würde ich mir einen C-Off-Schalter wünschen. 😉

    C++ ist komplex, sehr komplex! Aber nicht kompliziert! Es hat "Tools" über Spracheigenschaften eingebaut, wo ich in anderen Sprachen erst externe Tools und Libs ran ziehen muß. Weil die anderen Sprachen doch nicht alle Anforderungen in großen Projekten erfüllen können. Wenn ich aber in anderen Sprachen mich mit zus. Tools und Libs und Extensions zudecken muß, macht es diese doch wieder komplex?! Obwohl deren Anspruch immer war, gegen das angeblich zu komplexe C++ anzustinken.

    "Templates in C++ zu komplex? Lassen wir in Java weg!" Was ist in Java 1.5 passiert? "Oh, irgendwie müssen wir so ein Template-Feature einbringen. OK, wir machen so was ähnliches und nennen es Generics. Dann haben wir unsere Ruhe."

    C++ ist einfach nur "ehrlich". Und wenn ich wirklich C++ für das falsche Werkzeug für eine bestimmte Aufgabe halte, kann ich trotzdem eine andere Sprache nutzen.



  • das os einer ec-karte wird so schnell nicht in c++ entwickelt, da bin ich mir relativ sicher

    EC-Karten haben ein OS?

    Was mir gut gefällt, ist der Teil der "C++-Denke": "Programmiere so, dass der Compiler möglichst alle Fehler finden kann."

    In dieser Hinsicht gibt es bessere Sprachen. Haskell, Caml, ...

    C++ ist erstmal auf vielen Plattformen verfügbar, auch auf exotischen Systemen

    Andere Sprachen auch. Solche z.B. die C-Code erzeugen und dann erst in Maschinensprache.

    Weiterhin kann ich mit C++ nativen Code erzeugen. Ich weiß einfach nicht, warum ich Performance verschenken soll, wenn ich eine Bytecode-Sprache nutze.

    Kommt drauf an, welche Bytecodesprache. Meist denken die meisten dabei an Java. Aber es gibt auch andere ...

    Da sie manche Coder zu C-Coding verleiten.

    Ich begruesse die Kompatibilitaet zu C, egal wie viele Anfaenger damit Mist produzieren.

    Also die meisten Argumente sind Scheinargumente. Warum ich dennoch gern in C++ programmiere: Es enthaelt den Ansatz von Klassen und Objekte fuer intuitive Programmgestaltung, zwingt einen aber nicht dazu. Neben Templates steht ein weiterer maechtiger Mechanismus zur Verfuegung. Die Organisation ueber Header- und cpp-Dateien finde ich ansprechend. Der erzeugte Code ist sehr schnell.



  • knivil schrieb:

    das os einer ec-karte wird so schnell nicht in c++ entwickelt, da bin ich mir relativ sicher

    EC-Karten haben ein OS?

    nee, da läuft ein hamster im laufrad 🙄



  • _-- schrieb:

    nee, da läuft ein hamster im laufrad 🙄

    So weit ich das überblicke, ist auf dem EMV-Chip nur ein Prozessor, der rechnet. Ein eigenes OS läuft auf diesen Karten nicht.


Log in to reply