Objekte und String

  • Zitat von sauzachn

    C/C++: hat keine Garbage Collection.

    Es gibt genuegend Garbage Collectoren fuer C/C++, und GC macht eine C++ Implementierung nicht non-conforming. GC ist ein C++-Implementierungsdetail, das vorhanden sein kann und oft auch vorhanden ist. Man kann das so daher nicht sagen - der ISO Standard schlieszt es jedenfalls nicht aus, und es gibt im Gegenteil immer wieder Bestrebungen, GC in den Standard zu nehmen. Es scheitert meist daran, dass die exakte Formulierung zu schwierig ist. De facto verwendet ohnehin jeder einen GC zumindest als Leak Detector.

    Zitat von sauzachn


    Java: hat Garbage Collection.

    So kann man das nicht sagen. Erstens gibt es mal keinen ISO-Standard, also koennen wir uns nur an die Referenz-Implementierung einer einzigen Firma, und ein paar mehr oder weniger obskure Papers halten. Zweitens: Es gibt (noch?) keine Sprachelemente zur expliziten Deallokation in Java, also wird eine brauchbare Implementierung wohl GC haben. Du kannst Dich aber nicht darauf verlassen. Aus der JVM Specification:

    Zitat

    The Java virtual machine assumes no particular type of automatic storage management system, and the storage management technique may be chosen according to the implementor's system requirements.

    Zitat von sauzachn


    Natürlich gibt es GC schon sehr lange, aber eben nicht in C++, und nur auf diese Sprache habe ich mich in meiner Aussage bezogen.

    Wie gesagt, es gibt GC schon sehr lange, und auch in C++.

  • Zitat von Spockman

    Es gibt genuegend Garbage Collectoren fuer C/C++, und GC macht eine C++ Implementierung nicht non-conforming. GC ist ein C++-Implementierungsdetail, das vorhanden sein kann und oft auch vorhanden ist. Man kann das so daher nicht sagen - der ISO Standard schlieszt es jedenfalls nicht aus, und es gibt im Gegenteil immer wieder Bestrebungen, GC in den Standard zu nehmen. Es scheitert meist daran, dass die exakte Formulierung zu schwierig ist. De facto verwendet ohnehin jeder einen GC zumindest als Leak Detector.


    So jetzt muss ich auch mal meinen Senf zu C++ und Garbage Collection dazugeben:

    Die Tatsache, dass C++ keine Garbage Collection im Sprachstandard enthält ist meines Wissens auf folgende Umstände zurückzuführen:

    1. Bjarne Stroustrup ist (soweit ich mal irgendwo gelesen hab) der Meinung dass Speicherverwaltung nicht unbedingt in den Sprachstandard gehört. Es sei jedem freigestellt, die Speicherverwaltung zu verwenden, die er für richtig hält.

    2. Eine sichere allgemeine Garbage Collection ist in C++ nicht möglich, da der Programmierer vollen Zugriff auf die Zeiger hat. Es hindert ihn z.B nichts daran einen Zeiger in Form seines Einerkomplements abzuspeichern und so die Garbage Collection mit falschen Zeigerwerten zu täuschen und zur Freigabe eigentlich noch benötigten Speichers zu veranlassen.

    Prinzipiell stimm ich dir zu, dass Garbage Collection für C/C++ eine sinnvolle Erweiterung ist. Ich selbst habe aber noch nie eine GC bei C++ verwendet (zumindest wenn man Reference Counting nicht dazuzählt).
    Mir ist im Moment nicht ganz klar, wie derartige GCs funktionieren. Übernehmen die dann die gesamte Verwaltung des herkömmlichen Heaps oder laufen die parallel zu dem new/delete Allokationsschema auf einen separaten Heap, sodass herkömmlich allokierte Objekte und von der GC verwaltete Objekte gleichzeitg existieren können?

  • Zitat von sauzachn

    Funktioniert das außerhalb von DOS noch? So was habe ich schon lange nicht mehr gesehen :)



    nur in der eingabeaufforderung, unter linux glaube ich nur mit dos-emulation.:D

  • Zitat von volatile_void

    Mir ist im Moment nicht ganz klar, wie derartige GCs funktionieren. Übernehmen die dann die gesamte Verwaltung des herkömmlichen Heaps oder laufen die parallel zu dem new/delete Allokationsschema auf einen separaten Heap, sodass herkömmlich allokierte Objekte und von der GC verwaltete Objekte gleichzeitg existieren können?

    Hier werden deine Fragen beantwortet:

    http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcdescr.html

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • > Es gibt genuegend Garbage Collectoren fuer C/C++, und GC macht
    > eine C++ Implementierung nicht non-conforming.

    Natürlich gibt es verschiedene Ansätze für GC in C++, aber nicht im ISO-Standard. Also: C++ (das C++, das durch ISO definiert wird) besitzt keine GC. Ist ja nicht so schwer zu verstehen, oder? Und volatile_void hat ja schon Gründe genannt, warum GC in C++ prinzipiell nicht so "sauber" sein kann wie in anderen Sprachen.

    > So kann man das nicht sagen. Erstens gibt es mal keinen
    > ISO-Standard, also koennen wir uns nur an die
    > Referenz-Implementierung einer einzigen Firma, und ein paar mehr
    > oder weniger obskure Papers halten.

    Dass Java nicht standardisiert ist, ist ein Problem für sich. Die Referenzimplementierung, die gleichzeitig (derzeit) die Definition der Sprache ist, enthält aber GC.

    "The Java virtual machine assumes no particular type of automatic storage management system" -> Ich interpretiere das so, dass das "automatic" sicher benötigt wird, aber du dir den Typ aussuchen kannst (Mark and sweep, ... ). Also hat laut diesem Paper jede Java-Runtime GC zu haben.

    Dipper dipper dii dipper dii dipper dii duuu

  • Zitat von sauzachn


    Ist ja nicht so schwer zu verstehen, oder?

    Ich weisz nicht, was daran so schwer zu verstehen ist. Wir haben in Java genau dieselbe Situation wie in C++: In beiden Faellen gibt es Implementierungen mit GC, und in beiden Faellen ist GC nicht notwendig, um als "konform" bzgl. ISO oder eigener Suppe zu gelten, und C++ Implementierungen mit GC gab es eher. Worin besteht jetzt die Neuerung "gegenueber C++"?

    Zitat


    Die Referenzimplementierung, die gleichzeitig (derzeit) die Definition der Sprache ist, enthält aber GC.

    Ja, genauso wie es C++-Implementierungen mit GC gibt. Und? Das ist keine Garantie fuer GC.

    Zitat

    Ich interpretiere das so, dass das "automatic" sicher benötigt wird, aber du dir den Typ aussuchen kannst (Mark and sweep, ... ).

    Das enthaelt auch Typ = none.

    Zitat

    Also hat laut diesem Paper jede Java-Runtime GC zu haben.

    Nur falls Du "keine GC" zu GC-Algorithmen zaehlst. Es gibt auch keine sinnvolle Moeglichkeit, das Implementierungs-unabhaengig zu formulieren. Die meisten ISO-standardisierten Sprachen machen darum auch einen Bogen um GC. Es ist, extrapolierend, daher damit zu rechnen, dass in einem ISO Standard fuer Java, sollte es je einen geben, GC entweder gar nicht erwaehnt wird oder so formuliert wird, dass sie nicht erforderlich ist, um als konform zu gelten (etwa: "an implementation is free to reclaim any ...").

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!