Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »dot« (12.05.2016, 13:52)
Community-Fossil
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Dito. In C++ wären entweder sofort durch korrekte Unique-Verwendung schlimme Design-Probleme aufgefallen, weil es sich damit nicht implementieren lässt oder es wären lauter tote Referenzen verwendet worden, bei denen das Programm schon während der Entwicklung viel öfter gecrasht wäre. Referenz-Sprachen mit Garbage-Collection verleiten Entwickler immer wieder zu Referenz-Zyklen und ähnlichem Mist, wo am Ende gar nichts mehr oder nur in übelartig großen Blöcken freigegeben wird. In Rust/Swift z.B. gibt es kein GC, sondern knallhartes Reference-Counting, was mit absoluter Präzision alles dann freigibt, wann es der Programmierer beabsichtigt, mit einem dazu sehr passendem und wichtigen weak-Reference-Konzept, was nicht "unpassend" obendraufgestülpt und für die meisten Entwickler total unbekannt ist - wie etwa in C# oder Java, wer bitte benutzt da schon weak references? Nur mit denen lassen sich Referenz-Zyklen aufbrechen und ein sauberes und deterministisches Speicherverhalten in einer Referenz-Sprache mit RefCounting sinnvoll umsetzen. In einer Referenz-Sprache mit GC geht aber auch nur eins davon - der Freigabezeitpunkt ist noch immer undefiniert.wenn ich nur die Stunden zählen würde, die ich schon damit verbracht hab, irgendwelche obskuren Bugs zu suchen, die mit RAII niemals zustande gekommen wären...
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Zitat von »Dot«
Rust hat da imo wesentlich mehr, was man mögen kann. Am Ende haben alle diese Sprachen aber keinen überwiegenden Vorteil gegenüber C++
C-/C++-Quelltext |
|
1 2 3 4 |
const auto Iter = std::find_if(ThisIsMyVectorObj.cbegin(), ThisIsMyGreatVectorObj.cend(), [&](const auto& Item) { return ...; }); if (Iter != ThisIsMyVectorObj.cend()) ... |
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Spiele Programmierer« (12.05.2016, 15:47)
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Sagte ich doch schon, es setzt auf Reference-Counting auf. Ohne gewissenhafte Verwendung von weak/unowned references baut man sich in Rust allerdings sehr schnell den Speicher voll. Die Mittel sind da und sind zum Glück einfach zu verwenden, nur ist es gewöhnungsbedürftig, wenn auch wesentlich weniger gewöhnungsbedürftig (weil gefühlt unnötig [das Gefühl trügt aber eben]) als in C# oder Java. Reference-Count auf 0 heißt auch automatisch Freigabe des Objekts zu diesem Zeitpunkt und nicht erst irgendwann. In C++ ist eine Ownership bei einer Referenz wesentlich schwerer "versehentlich" zu übertragen als dass man bei Rust das weak/unowned vergisst und dann plötzlich eine ungewollte Ownership bekommt. Da ist C++ schon deutlich ausdrucksstärker, wenn auch ulkigerweise impliziter zur gleichen Zeit.Einen GC gibt es in Rust übrigens nicht mehr.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (12.05.2016, 15:14)
Die Wahrheit ist eher, dass es sich für die meisten Unternehmen nie lohnen würde C++ zu verwenden. In Java oder C# entwickelt man auf Kosten der Performance wesentlich schneller.
Werbeanzeige