C# oder C++?

Stuffz schrieb:
Die Tatsache, dass man unter Umständen einen smarten Zeiger in "falsche" Hände gibt.
Sollte eigentlich nicht passieren, da Smart Pointer Besitz ausdrücken /ownership semantik haben.
Wenn es also zu einem Problem damit kommen sollte, müsste das selbe Problem auch mit z.B. C# auftreten… hat man das Prinzip hinter dem Einsatz von SP nicht beherzigt.

Du kannst gerne ein konkretes Beispiel zeigen. Ich steige bei deiner Erklärung schon aus, wenn ein ctor unter ungünstigen Bedingungen ausgeführt wird und Destruktoren auslöst.
 
Zuletzt bearbeitet:
new Account() schrieb:
Sollte eigentlich nicht passieren, da Smart Pointer Besitz ausdrücken /ownership semantik haben.
Nicht wirklich, jedenfalls nicht pauschal. Nicht alle Smart Pointer sind gleich. auto_ptr/unique_ptr drücken den Besitz aus. shared_ptr drückt die Teilnahme am Besitz aus, und zwar mit der Verpflichtung, später ggf. aktiv zu werden.
Wenn es also zu einem Problem damit kommen sollte, müsste das selbe Problem auch mit z.B. C# auftreten…
Ist auch so, wird nur auf Umwegen gelöst. Schaue dir mal das Verhalten an, wenn es gelegentlich größere Blöcke abräumt.
Du kannst gerne ein konkretes Beispiel zeigen. Ich steige bei deiner Erklärung schon aus, wenn ein ctor unter ungünstigen Bedingungen ausgeführt wird und Destruktoren auslöst.

Was ist daran unverständlich? Einfachstes Beispiel:
Der letzte shared_ptr-Besitzer löst den Destructor der Ressource aus, aber auf seinem eigenen Thread, nicht dem des Erstellers. Manchmal kann man das beim Design schon berücksichtigen, manchmal hat man aber Code im Spiel, den man nicht kontrollieren kann. Und jetzt kommt bitte nicht mit "die Regeln beherzigen, alles autark und reentrant machen" - wenn man einfache Brötchen backt, geht das durchaus, bei komplexeren Problemen (wenn man selbst ein Framework für heterogene Projekte baut) wird es entsprechend komplexer.
 
new Account() schrieb:
Wenn man was über die Materie darunter lernen möchte (sprich: c, assembler) sollte man auch C und assembler verwenden und nicht C++ missbrauchen. In C++ wird einem auch der Müll weggeräumt, wenn man C++ programmiert wie es gedacht ist (sh. z.B. Herb Sutter oder Bjarne Stroustrup, RAII und smart pointers ftw).
Imho führen solche Ratschläge nur zu schlechtem C++ Code.

Zumal das Disasembling, auf welches in der Videoserie von @The Ripper sogar eingegangen wird, auch einen gewissen Einblick in das Prinzip des Assembler gibt.


.NET Core ist Cross Platform, und ich glaube die GUI Frameworks wie WPF sind in .NET Core 3 integriert, daher gehört das wohl der Vergangenheit an.
Windows Froms und WPF laufen aber nur auf Windows, trotz .net Core!

greetz
hroessler
 
Stuffz schrieb:
shared_ptr drückt die Teilnahme am Besitz aus, und zwar mit der Verpflichtung, später ggf. aktiv zu werden.
Bzgl. Deallokierung? ja, übernimmt aber der PTR.

Stuffz schrieb:
Der letzte shared_ptr-Besitzer löst den Destructor der Ressource aus, aber auf seinem eigenen Thread, nicht dem des Erstellers.
Okay verstanden.
Aber das ist noch kein Problem, oder? Zumindest mit den Informationen, die du mir bisher gegeben hast:
Alle Threads außer einer, der nicht der erste Thread war, sind tot, und der letzte deallokiert nun die Ressource.
Hört sich für mich so an, als würde genau das passieren was passieren soll.


hroessler schrieb:
Windows Froms und WPF laufen aber nur auf Windows, trotz .net Core!

greetz
hroessler
Ah stimmt, sorry. Danke für die Korrektur.
Aber es könnte nun ohne Probleme von jemanden auf z.B. Linux portiert werden, da es Open Source wird, oder?
 
  • Gefällt mir
Reaktionen: hroessler
new Account() schrieb:
Bzgl. Deallokierung? ja, übernimmt aber der PTR.
Bzgl. der impliziten Ausführung vom beliebigen Code im Dtor. Wenn man noch sowas wie ein Framework für andere baut, wird es richtig lustig.
Aber das ist noch kein Problem, oder? Zumindest mit den Informationen, die du mir bisher gegeben hast:
Alle Threads außer einer, der nicht der erste Thread war, sind tot, und der letzte deallokiert nun die Ressource.
Nö, das ist nur ein Spezialfall, den du aus dem vorhanden Beispiel heraus pickst, und bei dem es noch überschaubar ist. Anderer Fall: ganz normale Operation, keine terminienden Threads. Ein Objekt wird an verschiedenen Stellen über weak_ptr referenziert, und muss sich im dtor bei diesen Referenz-Haltern abmelden. Da wir MTed laufen, muss es hier und da Strukturen locken. Und schon musst du höllisch aufpassen, wie sich das ganze verhält; evtl. haben die Referenz-Halter weitere Trigger, und die lösen weiß Gott was aus, was am Ende zu einem Deadlock führt, weil da vielleicht eine Bedingung verwendet wird, die aber nicht mehr greift, weil du mitten im Abbau des ursprünglichen Objekts bist. Solche Situationen kann man fast immer lösen, aber man entdeckt sie oft nur, wenn man absurden Design-Aufwand betreibt oder beim Codifizieren oder, wenn es ganz dumm läuft, im Feldtest.
 
Jein Xamarin ist nicht WPF direkt portiert/inkompatibel zu .NET Core+WPF. MaW es wäre eine Portierung zu Xamarin nötig.
Ergänzung ()

Stuffz schrieb:
Nö, das ist nur ein Spezialfall, den du aus dem vorhanden Beispiel heraus pickst, und bei dem es noch überschaubar ist.
Ich habe nur deinen Text bzw. dein Beispiel mit anderen Worten übernommen und mich gefragt, wo das Problem ist.

Stuffz schrieb:
Anderer Fall: ganz normale Operation, keine terminienden Threads.
Okay dann anderes Beispiel. Eine normale Operation, die auf mehreren Threads läuft oder auf einem? Und die Operation macht genau was?
Und das Objekt, das mit mehreren Weak_ptr referenziert wird, ist dann in mehreren Zyklen enthalten?
Und warum muss das Objekt, das referenziert wird, sich bei den Weakptrn, welche ja eigentlich das Objekt referenzieren, "abmelden"?

Ich glaube es ist sinnvoller, wenn du mir das Problem an Hand des ersten Beispiels noch komplett aufzeigst, letzteres scheint ja eine kompliziertere Sache zu sein.
 
Zuletzt bearbeitet:
new Account() schrieb:
Und warum muss das Objekt, das referenziert wird, sich bei den Weakptrn, welche ja eigentlich das Objekt referenzieren, "abmelden"?

Ich glaube es ist sinnvoller, wenn du mir das Problem an Hand des ersten Beispiels noch komplett aufzeigst, letzteres scheint ja eine kompliziertere Sache zu sein.

Vielleicht, aber ich habe gar nicht vor, "das Problem" in einem öffentlichen Forum mit dir durchzukauen. Zumal das nur ein Beispiel für eine Klasse von Problemen ist, die man so vorfindet.
Wenn ich noch ein Beispiel raus hole, werden wir das wieder durchkauen, ja?

Mir ist schon klar, dass jetzt ein "also-ist-das-doch-kein-Problem" hinterher kommt, aber sorry, ob es dir gefällt oder nicht, diese Sachzwänge existieren in der Realität, und auch wenn sie lösbar sind, so verursachen sie dennoch Aufwände.
 
Stuffz schrieb:
Vielleicht, aber ich habe gar nicht vor, "das Problem" in einem öffentlichen Forum mit dir durchzukauen.
Dann halt nicht :D
Stuffz schrieb:
Wenn ich noch ein Beispiel raus hole, werden wir das wieder durchkauen, ja?
Mir würds schon reichen, wenn du mir das erste mal so erklären würdest, dass man es nachvollziehen kann, so bleibt es bei dir bei nicht mehr als einer Behauptung.

@Stuffz unter mir:
D.h. du bist nicht in der Lage ein konkretes Beispiel nachvollziehbar wiederzugeben und musst mich deshalb mit aus den Fingern gezogenen Gründen als Troll deklassifizieren? Klasse ;)
 
Zuletzt bearbeitet:
Ich würde sagen, dass sich die Debatte denkbar weit vom Anliegen des TO entfernt hat... 🤔

Gruß Jens
 
  • Gefällt mir
Reaktionen: Grimba, abcddcba und Nur_Momo
Ich denke auch dass seine Fragen beantwortet wurden, und die letzten 20 Beitraege off-topic sind. Ihr koennt euch ja per PN oder anderweitig austauschen und fachsimpeln.

Mal abgesehen davon ist auch zu bezweifeln, dass der Fragesteller hier jemals das Ziel hat zum Hardcore Programmierer zu werden, und ein Minimum an Speicher/Ressourcen etc. durch fancy C++ Code wie in der Demo-Szene zu nutzen. Lasst ihn einfach erstmal anfangen, Fragen kann er spaeter immer noch stellen. Der Weg ist so schon lang genug.

Viel Erfolg!
 
  • Gefällt mir
Reaktionen: Nur_Momo
new Account() schrieb:
Mir würds schon reichen, wenn du mir das erste mal so erklären würdest, dass man es nachvollziehen kann, so bleibt es bei dir bei nicht mehr als einer Behauptung.
Man könnte auch fragen, woher der erhöhte Erklärbedarf kommt (hint: es liegt nicht immer nur am Sender). Oder warum klassische Trolltechniken zum Einsatz kommen (sinnentstellend zitieren, Fragen mit Fragen beantworten, bei Widerstand alten Kram aufgreifen a-la "da war am Anfang noch was zu klären"...). So oder so, ich bin hier raus.
uburoi schrieb:
Ich würde sagen, dass sich die Debatte denkbar weit vom Anliegen des TO entfernt hat... 🤔
Sehe ich auch so. @Nur_Momo empfehle ich noch eine gute IDE mit Autocompletion. Es macht wenig Spaß, sich am Anfangs ganz ohne vorherige Kenntnis der System-APIs durchzubeissen. Wenn's nichts kosten soll -> es gibt Tutorials, wie man mingw (vereinfacht: C++-Compiler und dazugehörige Tools) mit Eclipse einrichtet (achtung, das CDT-Paket, nicht die Java-optimierte Version). Alternativ: QtCreator nehmen (bei Qt den Community-Installer holen, da kann man auch eine mingw-Toolchain bei der Installation auswählen).

Ansonsten: Visual Studio ab 2013.
 
  • Gefällt mir
Reaktionen: Nur_Momo
TopperHarley87 schrieb:
Sehe ich auch so. Es gibt nichts schlimmeres als externe Methoden einer Bibliothek zu verwenden und nicht erkennen zu können wie diese die Parameter erwartet...

es gibt nichts schlimmeres als Programmierer, die nicht vernünftig dokumentieren. Ein paar Buchstaben der Argumente in einer Methode sind keine ausreichende Dokumentation! Und wenn es eine Dokumentation gibt, dann schaut man eben in dieser rein von welchem Typ Wert etwas erwartet wird.
 
DubZ schrieb:
Und wenn es eine Dokumentation gibt, dann schaut man eben in dieser rein von welchem Typ Wert etwas erwartet wird.
Aber gerade dafür braucht man ja keine Dokumentation. Der Typ wird ja deklariert.
 
DubZ schrieb:
es gibt nichts schlimmeres als Programmierer, die nicht vernünftig dokumentieren. Ein paar Buchstaben der Argumente in einer Methode sind keine ausreichende Dokumentation! Und wenn es eine Dokumentation gibt, dann schaut man eben in dieser rein von welchem Typ Wert etwas erwartet wird.
Klar das hasse ich auch... Im Optimalfall macht man natürlich beides ;)
 
  • Gefällt mir
Reaktionen: DubZ
Ich hatte damals auch C# mit JavaScript zusammen gelernt. Ich fand es sogar hilfreicher, weil man durch den Vergleich sich Sachverhalte besser einprägen kann.
 
Zurück
Oben