welche vorteile bietet c++ gegenüber c



  • freigeist3 schrieb:

    ...Normalerweise unterhalte ich mich ja auch mit meinen Berkeley Freunden über's
    Programmieren...
    ...Dämliches Amateur-Niveau hier ... und sofort wird man angeflammt ...

    Was erwartest Du denn? Wenn ihr Euch hier gegenseitig Kompetenzen absprecht und jeder mit irgendwelchen provokanten bzw eventuell leicht übertriebenen Behauptungen daherkommt, ist das doch zu erwarten. Du kommst ja auch gleich mit einem hohen Ross daher geritten. "Ich hab schon ein tolles Schachprogramm in C geschrieben, was besser als das C++ Prog von meinem Kumpel war" - "Ich unterhalte mich sonst mit meinen Berkely Freunden" - etc. Du willst wahrscheinlich auch noch, dass man Dich für Deine Leistungen und Bekanntschaften beglückwünscht, wie?
    Das strotzt ja nur so vor Arroganz. Was erwartest Du denn wirklich? Sei mal ehrlich. Du hattest nur grad mal Langeweile und wolltest Dich ein bissel beschäftigen...

    Mindestens 10 Seiten Zeitverschwendung in diesem Thread.



  • GPC schrieb:

    Ich kann es nur nicht mehr hören, wenn so getan wird, als wäre RAII und Resourcenrelease im Dtor der Weg zum perfekten Glück.

    Ich kenne nichts was auch nur annaehernd so gut ist. Perfekt ist was anderes - keine Frage. Aber bei weitem das beste was es gibt.



  • Shade Of Mine schrieb:

    Ich kenne nichts was auch nur annaehernd so gut ist. Perfekt ist was anderes - keine Frage. Aber bei weitem das beste was es gibt.

    +1



  • dot schrieb:

    Shade Of Mine schrieb:

    Ich kenne nichts was auch nur annaehernd so gut ist. Perfekt ist was anderes - keine Frage. Aber bei weitem das beste was es gibt.

    +1

    +1



  • Das tut er. Und sein Rat ist: Kritische Funktionen zur Ressourcenfreigabe in eine extra Funktion auslagern, diese im Dtor aufrufen und ein try-catch um diesen Funktionsaufruf herum, der die Exception verschluckt.

    Na, damit ist doch auch niemandem geholfen. Das Problem ist immer noch exakt das selbe, man hat es nur in eine weitere Funktion ausgelagert.

    volkard schrieb:

    dot schrieb:

    Shade Of Mine schrieb:

    Ich kenne nichts was auch nur annaehernd so gut ist. Perfekt ist was anderes - keine Frage. Aber bei weitem das beste was es gibt.

    +1

    +1

    +1



  • Irgendwer schrieb:

    Das tut er. Und sein Rat ist: Kritische Funktionen zur Ressourcenfreigabe in eine extra Funktion auslagern, diese im Dtor aufrufen und ein try-catch um diesen Funktionsaufruf herum, der die Exception verschluckt.

    Na, damit ist doch auch niemandem geholfen. Das Problem ist immer noch exakt das selbe, man hat es nur in eine weitere Funktion ausgelagert.

    Genau so ist es.
    Aber mit der ausgelagerten Funktion kann man doch gelegentlich arbeiten, um dem Benutzer einen hilfreichen Hinweis zu geben, sogar ihm eine zweite Chance zu geben.
    Er kann zum Beispiel den "Speichern"-Knopf drücken, worauf flushAndClose() nicht funktioniert und eine Exception wirft, und er bekommt die Meldung und darf es (nach Einbau einer neuen Festplatte, hahah, nee, nach Einstecken eines besseren USB-Sticks) nochmal versuchen.
    Naja, eigentlich ist close() außen vor und es geht nur um flush().

    Es ändert nichts daran, daß die Anwendung nicht gescheit reagieren kann, wenn was kritisches nicht klappt. Vermutlich hat man in jeder Programmiersprache das selbe Problem, nur hat man in vielen anderen Sprachen so heftige Zusatzprobleme, daß man sich gar nicht auf das Hauptproblem besinnen kann. In Java zum Beispiel ist zeitnahes Aufräumen nicht sinnvoll denkbar, zeitlich geordnetes Aufräumen gar nicht eingebaut, Überhaupt-Aufräumen nicht definiert, und es klappt trotzdem! Dafür gibt es doch Backups, Logfiles und atomische Transaktionen. C++ macht es sau-angenehm und für meine Begriffe sogar sau-einfach. Und wirksam.
    Will man in Java-Spachen überleben, muß man lustige Saqchen wie http://www.devx.com/dotnet/Article/33167
    machen. Alles nur, weil eine künstliche Trennung zwischen Speicher-Ressource und Andere-Ressource gemacht wurde, ganz ohne Not. Das ist kompliziert, langsam und unsicher. Wozu? Historisch läßt es sich leicht erklären, wenn man sich an Oak erinnert.



  • freigeist3 schrieb:

    Fang mal mit nem simplen Spielbäumchen an und wenn sich Dein vertrolltes Hirn sowas bis in 5 Jahren zusammengedacht hat (Es gibt fast keinen Algo, den man dazu nicht benötigt!!), kannst ja nochmal Leuten die Kompetenz
    absprechen versuchen, die Du nicht kennst.

    Als ob sich jeder seine Zeit mit so simplen Dingen wie gelösten Problemen verschwenden muss. Bevor du andere zurechtweißt, soltlest du dein Können mal an richtigen Problemen zeigen. Wie wärs zum Beispiel mit reellwertigen Zustandsräumen und reellwertigen Funktionen? Oder Problemen die die Markov-Eigenschaft verletzen? Alles andere ist doch nur Kinderkram und eine Beleidigung der Intelligenz der Forennutzer hier.



  • Shade Of Mine schrieb:

    GPC schrieb:

    Ich kann es nur nicht mehr hören, wenn so getan wird, als wäre RAII und Resourcenrelease im Dtor der Weg zum perfekten Glück.

    Ich kenne nichts was auch nur annaehernd so gut ist. Perfekt ist was anderes - keine Frage. Aber bei weitem das beste was es gibt.

    Wenn du geschrieben hättest "Ich kenne nichts [in C++] was auch nur annaehernd so gut ist", dann würde ich zustimmen.. ich bin nur vom Gesamtkonzept an der Stelle nicht übermäßig begeistert.

    volkard schrieb:

    Irgendwer schrieb:

    Das tut er. Und sein Rat ist: Kritische Funktionen zur Ressourcenfreigabe in eine extra Funktion auslagern, diese im Dtor aufrufen und ein try-catch um diesen Funktionsaufruf herum, der die Exception verschluckt.

    Na, damit ist doch auch niemandem geholfen. Das Problem ist immer noch exakt das selbe, man hat es nur in eine weitere Funktion ausgelagert.

    Genau so ist es.
    Aber mit der ausgelagerten Funktion kann man doch gelegentlich arbeiten, um dem Benutzer einen hilfreichen Hinweis zu geben, sogar ihm eine zweite Chance zu geben.

    Erst kürzlich hast du noch gesagt, die "ReleaseResources"-Funktion heilt nichts 🙂



  • Wenn du geschrieben hättest "Ich kenne nichts [in C++] was auch nur annaehernd so gut ist", dann würde ich zustimmen.. ich bin nur vom Gesamtkonzept an der Stelle nicht übermäßig begeistert.

    Wie würdest du es denn gerne gelöst wissen? Oder in welcher Sprache hat man bessere Werkzeuge, die solche (seltenen) Probleme lösen (Garbage Collection hat natürlich die gleichen Probleme, nur das sie nicht auftreten, wenn es der Programmierer will, sondern wenn der GC meint das Objekt zerstören zu können).



  • GPC schrieb:

    Wenn du geschrieben hättest "Ich kenne nichts [in C++] was auch nur annaehernd so gut ist", dann würde ich zustimmen.. ich bin nur vom Gesamtkonzept an der Stelle nicht übermäßig begeistert.

    Ich kenne keine Sprache wo ich mich nicht immer mal wieder nach RAII sehne.

    Kein Konzept dass ich kenne kommt an RAII ran. Welche Sprache bzw. welche Konzepte würdest du besser finden?



  • Irgendwer schrieb:

    Wie würdest du es denn gerne gelöst wissen? Oder in welcher Sprache hat man bessere Werkzeuge, die solche (seltenen) Probleme lösen (Garbage Collection hat natürlich die gleichen Probleme, nur das sie nicht auftreten, wenn es der Programmierer will, sondern wenn der GC meint das Objekt zerstören zu können).

    Ja, würd mich auch interessieren in welcher Sprache du das besser gelöst siehst.
    Garbage Collection ist jedenfalls keine Lösung, im Gegenteil. Zwar brauchst du dich dort um Speicher nichtmehr zu kümmern aber alles andere wird ungemein umständlicher. Darum braucht man dann in C# und Java so Zeug wie finally Blöcke und den Dispose Pattern. Beides ist, wenn du mich fragst, RAII weit unterlegen. Ich mag C#, aber trotzdem wünsch ich mir dort sehr oft ich könnte RAII verwenden...



  • Ein GC hat ja auch das Problem. Nehmen wir an, aus irgendeinem Grund könnte das Freigeben von Speicher fehlschlagen. Banalere Variante: der Finalizer eines Objekts wirft eine Exception.
    Zumindest beim Java-GC wird diese einfach ignoriert...



  • Um die letzten vier Posts also zusammenzufassen:
    - RAII ist nicht perfekt, aber am Besten. Was schlägst Du Besseres vor?
    - Um Dir das Argument vorwegzunehmen: GC bringt auch nix.



  • dot schrieb:

    Ich mag C#, aber trotzdem wünsch ich mir dort sehr oft ich könnte RAII verwenden...

    Du hast in C# using() Blöcke. Die helfen oft. Python bietet das auch an (with). Ist ganz OK, halt eine light Variante von RAII.



  • Shade Of Mine schrieb:

    Du hast in C# using() Blöcke. Die helfen oft. Python bietet das auch an (with). Ist ganz OK, halt eine light Variante von RAII.

    using Blöcke zählen für mich zum Dispose Pattern. Und ja, ist in einigen Fällen ganz brauchbar, aber eben bei weitem nicht so mächtig wie RAII...



  • Shade Of Mine schrieb:

    Kein Konzept dass ich kenne kommt an RAII ran. Welche Sprache bzw. welche Konzepte würdest du besser finden?

    Leider ist das Problem in keiner mir bekannten Sprache richtig gut gelöst 😕 Ich habe ja auch keine Sprache als Referenz bzw. Vergleich genannt, sondern mich auf die Problematik des Konzepts beschränkt (von der auch andere Sprachen betroffen sind).
    Ich fand aber das Konzept der Conditions in Lisp sehr interessant, habe aber zu wenig Ahnung von Lisp im Detail, um hier die Nachteile im Gesamtzusammenhang der Sprachfeatures aufzudecken.

    dot schrieb:

    Shade Of Mine schrieb:

    Du hast in C# using() Blöcke. Die helfen oft. Python bietet das auch an (with). Ist ganz OK, halt eine light Variante von RAII.

    using Blöcke zählen für mich zum Dispose Pattern. Und ja, ist in einigen Fällen ganz brauchbar, aber eben bei weitem nicht so mächtig wie RAII...

    Das using-Statement ist RAII in .NET, da using genauso wie RAII auf dem Prinzip von "scoped usage" basiert. Der Unterschied ist, dass es sich auf unmanaged resources wie Datenbankhandles, Session IDs, Dongleverbindungen etc. beschränkt, denn managed resources verwaltet ja die CLR. Allerdings ist das Dispose-Pattern nicht besonders intuitiv. Der einzige Vorteil gegenüber RAII in C++ ist, dass man die Exceptions, die ein vom Finalizer aufgerufenes Dispose wirft, über den Finalizer der Klasse weiter nach oben geben kann, was ja in C++ nicht möglich ist. Ansonsten ist C++ RAII an der Stelle aber einfacher, weil man nicht extra an das using-Statement denken muss.



  • GPC schrieb:

    Leider ist das Problem in keiner mir bekannten Sprache richtig gut gelöst 😕 Ich habe ja auch keine Sprache als Referenz bzw. Vergleich genannt, sondern mich auf die Problematik des Konzepts beschränkt (von der auch andere Sprachen betroffen sind).

    Ich würde sogar soweit gehen zu sagen, dass es abgesehen von RAII keine aktzeptable Lösung gibt. Und ich habe schon sehr viele Sprachen durch. Alles ist schlechter als RAII.

    Ich fand aber das Konzept der Conditions in Lisp sehr interessant, habe aber zu wenig Ahnung von Lisp im Detail, um hier die Nachteile im Gesamtzusammenhang der Sprachfeatures aufzudecken.

    Ja aber ich habe keine praktische Erfahrung damit. Das ist aber das einzige Konzept dass uU an RAII ran kommt. uU ist es sogar besser.



  • Noch einmal im Thema nachgekakt: was wollt ihr denn? 😕 Eine für alle Zeit perfekte Programmiersprache? Die hat es nie gegeben und wird es auch wohl nie geben! Oder wollt ihr einfach nur stabile lauffähige Programme schreiben, die ihr selbst odere andere morgen noch verstehen und bei Bedarf an geänderte Anforderungen anpassen könnt? Nichts ist schlimmer als ein Programm, das nach kurzem Einsatz auf den Müll geschmissen werden muss, weil niemand die neuen Wünschen realisiesen kann! 😃



  • berniebutt schrieb:

    Noch einmal im Thema nachgekakt: was wollt ihr denn? 😕 Eine für alle Zeit perfekte Programmiersprache?

    Es geht hier um Konzepte. Nicht um Sprachen.

    Im idealfall will ich aber die perfekte Sprache. Klar. Wer nicht?
    Wichtiger sind aber Konzepte. Die sind unabhängig von den jeweiligen Tools die man verwendet.



  • @berniebutt

    Kannst du nicht einmal irgendetwas schreiben, was zum Thema passt, anstatt immer mit Allgemeinplätzen wie "Es gibt keine perfekte Programmiersprache" um dich zu werfen?


Anmelden zum Antworten