Direkt Python, der erst mal C++ lernen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

@EyDu: Wenn ich mich aktiv darum kümmern muss Smartpointer zu verwenden und mir Gedanken darüber machen muss ob so einer in der jeweiligen Situation funktioniert oder ich doch etwas anderes brauche, dann ist das für mich immer noch manuelle Speicherverwaltung.
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Die Überlegung nimmt Dir in Python auch keiner ab. Auch hier musst Du überlegen, wem die Objekte gehören und ggf. eine weak-reference verwenden.

Python verwendet so gesehen das Analog zu C++11 std::shared_ptr und std::weak_ptr. Lediglich der std::unique_ptr käme noch dazu.

Aber ja, C++* ist schon schwer komplex. Nun sind noch lambdas, move-semantics, for-each, etc. hinzugekommen mit dem Anspruch, dass die Compiler weiterhin mit dem alten Standard und noch mit altem Code zurecht kommen.

Wenn ich dann an eine templated pointer reference für ein Array denke ... hat man schon fast Perl-Code :-D
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
BlackJack

@bwbg: Natürlich nimmt mir diese Überlegungen in Python die automatische Speicherbereinigung ab. Wo muss ich denn da im allgemeinen über so Sachen wie „wer besitzt das Objekt” oder `weakref` nachdenken? Das ”musste” ich in all den Jahren nur ein einziges mal in reinem Python machen, aus Performancegründen, und sonst nur wenn ich externe C-Bibliotheken mit `ctypes` angebunden habe, also mir sowieso schon Gedanken über Speicherverwaltung machen musste wegen dem C-Code. Beides sind keine alltäglichen Fälle. Jedenfalls nicht für die Mehrzahl der Python-Programmierer und schon gar nicht für Programmieranfänger.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

bwbg hat geschrieben:Die Überlegung nimmt Dir in Python auch keiner ab.
Nö, denn ich habe in Python quasi keine Wahl ;-) Und das ist auch gut so!
bwbg hat geschrieben: Auch hier musst Du überlegen, wem die Objekte gehören und ggf. eine weak-reference verwenden.
Das ist ein absoluter Spezialfall; dies ist alleine daran kenntlich, dass das ganze in einem separaten Modul verpackt ist und mithin kein Konstrukt auf Sprachebene dazu existiert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@BlackJack: Es ist jetzt wirklich nicht so schwer sich daran zu erinnern, dass man bei einem new-Aufruf alles in einen Smart-Pointer packt. ;-) Ich kann mich nicht daran erinnern, dass ich das jemals vergessen hätte.

Prinzipiell bleiben auch nur zwei Möglichkeiten übrigen, wenn manuelle Speicherverwaltung zugelassen werden soll: 1) Default ist, dass das Objekt vom GC/automatisch über Smart-Pointer verwaltet wird und manuelle Speicherverwaltung explizit angegeben werden muss oder 2) eben genau anders herum. Was in einer Sprache gewählt wird, dass hängt vom Einsatzgebiet der Sprache ab. Mir ist eben der zweite Punkt wichtig, da ich im Normalfall die Kontrolle brauche.
Das Leben ist wie ein Tennisball.
BlackJack

@EyDu: Der Weg dahin ist aber schwer. Denn das hat mir kein Anfängertutorial erklärt. Die haben mich alle mit den subtilen Unterschieden belästigt und worauf man so alles achten muss wenn man einen copy constructor hat oder nicht, wenn Zuweisungen überschrieben sind und was da passiert und so weiter. Man muss C++ halt trotzdem in seiner ganzen schönen Komplexität verstehen um zu verstehen welche halbwegs sichere Untermenge man verwenden muss und welche best practices man folgen muss. Und dann bleibt noch das Problem das man ja nicht nur selber Klassen schreibt, sondern vielleicht auch die eine oder andere Bibliothek verwenden will/muss, und *die* können dann wieder eine andere Untermenge der Sprache und andere best practices verwenden.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@BlackJack: Deshalb ist C++ auch nur etwas für Profis :lol: Ok, ernsthaft: Klar, die Sprache hat relativ hohe Einstiegshürden, das liegt sicherlich daran, dass tatsächlich jeder Kleinkram selbst festgelegt werden kann. Daraus ergeben sich dann auch Folgen für alle möglichen Konstrukte. Copy Constructor und überladene Zuweisungen hast du schon genannt, einen ganzen Rattenschwanz von Beschränkungen für Konstruktoren gibt es natürlich auch noch; mit Templates will ich gar nicht erst anfangen. Immerhin sind die Eigenschaften alle begründet, sei es nun aus historischen oder meist subtileren technischen Gründen. Manchmal braucht man eben die Feinheiten in der Anwendung, dann muss man mit den Folgen leben. Wenn man sie nicht benötigt, dann sollte man doch bitte die Finger von C++ lassen; außer Masochisten, die sind natürlich herzlich willkommen.

Das Problem mit Bibliotheken kann ich so nur unterschreiben, dass ist in C++ schlimmer als in anderen Sprachen.
Das Leben ist wie ein Tennisball.
Antworten