Hi
Objekte "immutable" zu machen kann man, sofern ich das bisher richtig verstanden habe, als wichtigen Teilaspekt "sauberer" funktionaler Programmierung bezeichnen. Es hat in der funktionalen Welt einfach viele Vorteile und fügt sich besser in diesen eher mathematisch angehauchten Programmierstil ein.
Aber wie ist das in der Praxis? Macht der Immutable-Gedanke nicht eher (oder nur?) bei "kleinen" Objekten Sinn? Bei kleineren mathematischen Objekten, wie etwa einem 3D-Vector würde man wohl versuchen, sie immutable zu machen. Bei Sprachen mit Garbage Collection kann das auch Nachteile bringen, wie häufiges GC'en von kleinen Objekten, aber die GCs werden auch immer besser, und vielleicht ist das nur dann ein Nachteil wenn man wirklich viele Vector3D-Objekte anlegt und wieder löscht, und das ganze in einem zeitkritischen Anwendungsbereich (speziell 3D-Spiele).
Bei größeren Objekten würde das aber doch höchstens Sinn machen, wenn die nur selten verändert werden würden, oder an diesen Objekten immer relativ große Teile verändert werden würden. Wenn man sich aber z.B. vorstellt, dass man mit Graphen oder Matrizen rumhantieren will, die eben auch mal 10000x10000 Elemente oder 1 Million Knoten haben, kann es doch nicht mehr sinnvoll sein, für die Änderung EINES Eintrags der Matrix oder eines Knotens einige hundert MB Speicher zu allokieren und dort den Inhalt des "alten" Speichers reinzukopieren, dann 4 bytes zu ändern, und den "alten" Speicher in den Müll zu werfen?
Im Widerspruch dazu steht, dass man ja gerade die "großen" Objekte gerne mit mehreren Threads verarbeiten würde, und gerade dann würde die Immutabilität ja mit dem Vorteil ihrer impliziten Threadsicherheit glänzen.
Wie kann man dieses Dilemma auflösen? :bahnhof:
Objekte "immutable" zu machen kann man, sofern ich das bisher richtig verstanden habe, als wichtigen Teilaspekt "sauberer" funktionaler Programmierung bezeichnen. Es hat in der funktionalen Welt einfach viele Vorteile und fügt sich besser in diesen eher mathematisch angehauchten Programmierstil ein.
Aber wie ist das in der Praxis? Macht der Immutable-Gedanke nicht eher (oder nur?) bei "kleinen" Objekten Sinn? Bei kleineren mathematischen Objekten, wie etwa einem 3D-Vector würde man wohl versuchen, sie immutable zu machen. Bei Sprachen mit Garbage Collection kann das auch Nachteile bringen, wie häufiges GC'en von kleinen Objekten, aber die GCs werden auch immer besser, und vielleicht ist das nur dann ein Nachteil wenn man wirklich viele Vector3D-Objekte anlegt und wieder löscht, und das ganze in einem zeitkritischen Anwendungsbereich (speziell 3D-Spiele).
Bei größeren Objekten würde das aber doch höchstens Sinn machen, wenn die nur selten verändert werden würden, oder an diesen Objekten immer relativ große Teile verändert werden würden. Wenn man sich aber z.B. vorstellt, dass man mit Graphen oder Matrizen rumhantieren will, die eben auch mal 10000x10000 Elemente oder 1 Million Knoten haben, kann es doch nicht mehr sinnvoll sein, für die Änderung EINES Eintrags der Matrix oder eines Knotens einige hundert MB Speicher zu allokieren und dort den Inhalt des "alten" Speichers reinzukopieren, dann 4 bytes zu ändern, und den "alten" Speicher in den Müll zu werfen?
Im Widerspruch dazu steht, dass man ja gerade die "großen" Objekte gerne mit mehreren Threads verarbeiten würde, und gerade dann würde die Immutabilität ja mit dem Vorteil ihrer impliziten Threadsicherheit glänzen.
Wie kann man dieses Dilemma auflösen? :bahnhof: