>>155146Oke kühl.
>>155150>Wo da das Problem sein soll, hast du immer noch nicht erklärt. Dein Blabla ist übrigens in der Tat ziemlich ermüdend.
Naja, eigentlich ging es Felix zuletzt hauptsächlich um das:
>Vererbung hat immer noch nichts mit Arrays zu tun.
Felix denkt/hofft, er hat seinen Kram (Inkompatibilität von Werte-Arrays und Vererbung im OOP-Stil) im Faden jetzt erklärt.
>Du hast mit C oder C++ als Erstsprache programmieren gelernt?
Tatsächlich nicht, es war zuerst eine Art von Shell-Skript und dann BASIC.
>>155151>Entweder Pedal ans Metall
>Oder polymorphe Rube-Goldberg-Klassen
Felix stimmt zu. Felix ist noch einmal in sich gegangen und findet eher merkwürdig, dass _alle_ Sprachen so ab Mitte der 80er/Anfang der 90er lieber die Entscheidung pro "Erweiterbarkeit zur Laufzeit" getroffen haben, vielleicht auch, weil es die hippe Sache damals war. Das ist dann noch einmal Anfang-Mitte der 2000er mit "Plugin-Systemen" aufgewärmt worden.
>>155207Wenn man mit dem Referenze-Wald leben kann, wäre der Hauptgrund dann wohl Performanz (wie sie es im Java JEP auch geschrieben haben), weswegen auch Unity in den letzten Jahren mit ihrem C#-Kompiler auf den DOD-Zug mit ihrem NativeContainer/NativeArray gesprungen ist, und ihr Entity-Component-System (statt Vererbung) damit gebastelt haben:
https://www.youtube.com/watch?v=EGKmNQL9CcM&t=321s
https://docs.unity3d.com/6000.0/Documentation/Manual/job-system-native-container.html
https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Unity.Collections.NativeArray_1.html
https://www.youtube.com/watch?v=p65Yt20pw0g&t=2603s
Zum Abschluss will Felix nicht vorenthalten, was er über die Nacht gebastelt hat ... nämlich wie man den Krams mit Werte-Arrays + Vererbung zur Kompilierzeit in einer Sprachimplementierung implementieren könnte ...
written exclusively in C:
#include <stdio.h>
typedef struct
{
int member1;
} Base;
// Kompiler-generiert
#define BASE_MEMBERS \
int member1;
// Derived1 erbt von Base
typedef struct
{
BASE_MEMBERS // Kompiler-generiert
int member2;
int member3;
} Derived1;
// Kompiler-generiert, ein einziges Mal für die gesamte Hierarchie (da _zur Kompilierzeit_ bekannt)
typedef union
{
Base Base;
Derived1 Derived1;
} Polymorph_Base_Derived1;
// Kompiler-generiert
#define CONCAT_IMPL(a, b) a ## b
#define CONCAT(a, b) CONCAT_IMPL(a, b)
#define Polymorph_Base Polymorph_Base_Derived1
#define Polymorph_Derived1 Polymorph_Base_Derived1