Sto lavorando su un linguaggio di programmazione, e sono giunto al dilemma se supportare o meno l'ereditarietà virtuale.
Come designer e implementatore del linguaggio, inclusa quella funzionalità rappresenta una maggiore complessità.
Come sviluppatore di software indipendente dal linguaggio, sembra che l'unico vantaggio derivante dall'inclearlo sia quello di facilitare e consentire la progettazione di software scadente.
I casi in cui ho riscontrato l'utilizzo dell'ereditarietà virtuale sembrano tutti candidati migliori per le interfacce "add-on".
Naturalmente, riconosco che lavorare con il codice di terze parti esistente su cui non si ha il controllo è sicuramente qualcosa che potrebbe richiedere il supporto per l'ereditarietà virtuale.
Ma per me questo non è il caso, ho una lavagna chiara e piena libertà di definire i paradigmi e gli idiomi del linguaggio di programmazione. Pertanto, la soluzione più elegante ed efficiente sembra essere quella di eliminare semplicemente la possibilità che possa sorgere la necessità dell'ereditarietà virtuale e omettere del tutto la funzionalità.
Ho anche notato che è una caratteristica piuttosto di nicchia, delle varie lingue che ho studiato, il C ++ è l'unico a supportarlo. Portandomi a presumere che non è tutto ciò che è essenziale.
Naturalmente, potrei anche trascurare qualcosa, che mi ha spinto a sondare la comunità degli sviluppatori per l'input sull'argomento.
EDIT: per chiarire come richiesto, le prestazioni e l'efficienza della memoria sono alcuni degli obiettivi principali della lingua. Il virtualismo, il dinamismo e qualsiasi funzionalità di programmazione di alto livello sono facoltativi e inclusi solo se necessario. Non è una lingua in cui tutto è riferimento e chiamate virtuali.
Invece di
class WingedAnimal : extend Animal {}
il mio piano attuale è di evitare la necessità di affrontare la duplicazione dei membri per mezzo di
class WingedAnimal : require Animal {}
che essenzialmente consente a WingedAnimal
di utilizzare Animal
senza ereditarlo, garantendo che tutti gli utenti di WingedAnimal
siano compatibili.