Du bist nicht angemeldet.

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

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

1

11.05.2016, 20:29

GC - Fluch oder Segen

Verschoben von:
https://www.spieleprogrammierer.de/17-ga…eleentwicklung/

In Java kann dir der Garbage Collector, wenn man nicht aufpasst, die Performance schnell herunterziehen, dafür kann es bei C++ passieren, dass man immer mehr Memory Leaks öffnet, da der Speicher nicht richtig verwaltet bzw. wieder freigegeben wird. Und gerade im Multi Threading Bereich weiß man ohne Reference Counting manchmal gar nicht, ob eine Variable noch in Benutzung ist, oder nicht.

Meiner Erfahrung nach ist es wesentlich einfacher, Ressourcen in C++ richtig zu verwalten als in einer Sprache mit Garbage Collector. Das Problem ist, dass der Garbage Collector zwar Objekte aufräumt (vielleicht, unter Umständen, wenn ihm danach ist) die Verwaltung jeder anderen Form von Ressource aufgrund des Fehlens jeglicher Garantien über die Lebensdauer konkreter Objekte dafür aber zur Hölle wird (weil es zwangsweise darauf hinauslauft, dass man per Dispose Pattern all das per Hand macht (und dabei 10000 Bugs einbaut, weil man alle möglichen Randfälle übersieht), was der C++ Compiler sowieso machen würde). Ich würde niemals freiwillig in einer Sprache mit Garbage Collector programmieren, insbesondere keine Grafikanwendung, den Fehler hab ich schon einmal zu oft gemacht... ;)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Schorsch« (12.05.2016, 12:42)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

11.05.2016, 22:00

Es lebe Rust. :love:
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

11.05.2016, 22:01

dot du bist echt ein C++ Fanboy :)

C++ is einfach zu gut um ignoriert zu werden... ;)

4

11.05.2016, 22:12

Da brauch ich nichts hinzufügen.
Das Forum spackt btw. wieder herum, es werden nur 4 Seiten angezeigt.

5

12.05.2016, 00:37

Du spakst rum, ist alles ok. Der Chat geht auch.

Zitat von »Architekt«

Es lebe Rust. :love:

Und D?

MfG
Check

6

12.05.2016, 01:30

"In seiner letzten Keynote auf der JAX 2008 hatte Johnson schon prophezeit, dass Java weiter gedeihen werde. Damit hatte er Recht. Denn wenn man dem TIOBE-Index und den Google-Suchanfragen Glauben schenken darf, ist Java die Programmiersprache Nummer Eins. Den Erfolg von Java in den vergangenen Jahren – trotz großer Umbrüche bei Browser-basierten Anwendungen, der Cloud und Microservices – führte Johnson auf die Adaptionsfähigkeit von Java zurück."
Quelle: https://jaxenter.de/10-take-aways-von-de…ntwickler-39369

Das geht auch "richtig schön" in C++. Zumindest seit C++11.


Da muss ich dir zustimmen, mit C++11 und C++14 hat sich einiges getan.


Meiner Erfahrung nach ist es wesentlich einfacher, Ressourcen in C++ richtig zu verwalten als in einer Sprache mit Garbage Collector. Das Problem ist, dass der Garbage Collector zwar Objekte aufräumt (vielleicht, unter Umständen, wenn ihm danach ist) die Verwaltung jeder anderen Form von Ressource aufgrund des Fehlens jeglicher Garantien über die Lebensdauer konkreter Objekte dafür aber zur Hölle wird (weil es zwangsweise darauf hinauslauft, dass man per Dispose Pattern all das per Hand macht (und dabei 10000 Bugs einbaut, weil man alle möglichen Randfälle übersieht), was der C++ Compiler sowieso machen würde).


Wozu brauchst du das Dispose Design Pattern?
Java schaut, welche Klassen noch Instanzen auf das jeweilige Objekt haben und wenn die Anzahl der Instanzen 0 ist, wird das Objekt aus dem Speicher entfernt. Desweiteren erkennt der Garbage Collector auch sogenannte Inseln, also wenn sich Objekte gegenseitig referenzieren, aber nicht mehr benötigt werden.

Und wie gesagt:
Man kann auch in Java den Speicher native allozieren und freigeben - dann umgeht man den Garbage Collector direkt und genau das machen die Grafik libraries normalerweise (fast) alle, wenn man selbst OpenGL nutzt, kann und sollte man es ja auch so machen.
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

dot

Supermoderator

  • »dot« ist der Autor dieses Themas

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

12.05.2016, 02:26

Hast du dir schonmal angeschaut, wie der TIOBE Index errechnet wird? Ich hab jedenfalls keine Ahnung, was genau dieser Index aussagen soll. Ich hab aber auch keine Ahnung, woran man festmachen will, was genau die "Programmiersprache Nummer Eins" sein soll...

Ich prophezeie dir hier und heute jedenfalls, dass sowohl Java als auch .Net zurecht im Sterben liegen. Die Zukunft dieser Plattformen liegt rein in der Maintenance vorhandener Anwendungen, eine Zukunft an der ich für meinen Teil garantiert nicht interessiert wäre. Free Lunch is over (war es auch 2008 schon längst, nur damals wollten das nur die Wenigsten wahrhaben, mittlerweile wird's ja eine immer schwerer zu ignorierende Tatsache) und Garbage Collection war vermutlich die dümmste Idee seit Anbeginn der Informatik. Zum Glück haben die Menschen das langsam kapiert, darum gibt es auch keine nennenswerten, neuen Sprachen mehr, die ernsthaft darauf aufbauen...


Wozu brauchst du das Dispose Design Pattern?

Um in Sprachen mit Garbage Collection Ressourcen zu verwalten. Der Garbage Collector kann das nämlich nicht...

Java schaut, welche Klassen noch Instanzen auf das jeweilige Objekt haben und wenn die Anzahl der Instanzen 0 ist, wird das Objekt aus dem Speicher entfernt. Desweiteren erkennt der Garbage Collector auch sogenannte Inseln, also wenn sich Objekte gegenseitig referenzieren, aber nicht mehr benötigt werden.

Garbage Collection hat nichts mit Reference Counting zu tun. Ob und wann genau welche Objekte aufgeräumt werden, ist undefiniert; Java garantiert dir nichtmal, dass überhaupt jemals ein Finalizer aufgerufen wird...

Und wie gesagt:
Man kann auch in Java den Speicher native allozieren und freigeben - dann umgeht man den Garbage Collector direkt und genau das machen die Grafik libraries normalerweise (fast) alle, wenn man selbst OpenGL nutzt, kann und sollte man es ja auch so machen.

Kann man, ist im Vergleich zu RAII aber extrem schwer fehlerfrei hinzubekommen. Du hast offenbar noch nie wirklich versucht, eine komplexere OpenGL Anwendung in einer Sprache mit Garbage Collection zu entwickeln, sonst wüsstest du, wovon ich rede... ;)

Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von »dot« (12.05.2016, 02:55)


Tobiking

1x Rätselkönig

  • Private Nachricht senden

8

12.05.2016, 08:51

Hast du dir schonmal angeschaut, wie der TIOBE Index errechnet wird? Ich hab jedenfalls keine Ahnung, was genau dieser Index aussagen soll. Ich hab aber auch keine Ahnung, woran man festmachen will, was genau die "Programmiersprache Nummer Eins" sein soll...

Ich prophezeie dir hier und heute jedenfalls, dass sowohl Java als auch .Net zurecht im Sterben liegen. Die Zukunft dieser Plattformen liegt rein in der Maintenance vorhandener Anwendungen, eine Zukunft an der ich für meinen Teil garantiert nicht interessiert wäre.

Das klingt für mich wie eine ziemlich eingeschränkte Sicht. Dem TIOBE Index vertraue ich auch nicht blind, aber hast du mal im Bereich der Web und Cloud Dienste geguckt was alles in Java (bzw. anderen JVM Sprachen) entwickelt ist? Hadoop und Lucene/Solr/Elasticsearch allein sind in so ziemlich jedem Backend größerer Anbieter zu finden. Und entsprechend arbeiten dort auch Entwickler an Weiterentwicklungen etc. Ob Java jetzt auf 1 oder auf 10 ist, ist da egal. Sterben wird es aber wohl so schnell nicht. Außer Facebook etc. möchten ihre Exabyte an Daten auf ein neues System migrieren.

Ansonsten gibt es sogar im Bereich der allgemeinen Softwareentwicklung massig Java Software: Jenkins, TeamCity, Jira und sonstiges Atlassian Zeug, Gradle (Unity stellt gerade ihr Buildsystem darauf um) etc.


Garbage Collection war vermutlich die dümmste Idee seit Anbeginn der Informatik. Zum Glück haben die Menschen das langsam kapiert, darum gibt es auch keine nennenswerten, neuen Sprachen mehr, die ernsthaft darauf aufbauen...

So wie Go? ;) (https://golang.org/doc/faq#garbage_collection)

Letztendlich kommt es doch wie immer darauf was und wie man entwickelt. Wenn man eine hohe Entwicklungsgeschwindigkeit will und dabei das Risiko für Mem Leaks gering halten will, nimmt man halt eine Sprache mit GC.

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

9

12.05.2016, 09:11

Wie du auf das Sterben von Java und .Net kommst ist mir ein Rätsel...
Gerade im Businessbereich wo stark auf Microsoft gesetzt wird ist .Net ganz vorne dabei.

Aktuelles Ranking:
http://spectrum.ieee.org/computing/softw…mming-languages

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

12.05.2016, 09:11

Meine Nase sagt mir, dass es hier stark nach Offtopic riecht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige