Ho riflettuto molto sul design del linguaggio e su quali elementi sarebbero necessari per un linguaggio di programmazione "ideale", e studiare Go di Google mi ha portato a mettere in discussione molte conoscenze altrimenti comuni.
In particolare, Go sembra avere tutti i vantaggi interessanti della programmazione orientata agli oggetti senza avere effettivamente la struttura di un linguaggio orientato agli oggetti. Non ci sono classi, solo strutture; non esiste eredità di classe / struttura, ma solo incorporamento della struttura. Non ci sono gerarchie, nessuna classe genitore, nessuna implementazione esplicita dell'interfaccia. Invece, le regole di cast del tipo si basano su un sistema libero simile alla "duck-typing", in modo tale che se una struttura implementa gli elementi necessari di un "Reader" o una "Richiesta" o una "Codifica", allora puoi lanciarla e usarla come una.
C'è qualcosa in OOP implementato in C ++ e Java e C # che è intrinsecamente più capace, più gestibile, in qualche modo più potente che devi rinunciare quando ti sposti in un linguaggio come Go? Che vantaggio hai a rinunciare per ottenere la semplicità che questo nuovo paradigma rappresenta?
EDIT
Rimossa la domanda "obsoleta" su cui i lettori sembravano eccessivamente aggrappati e infuriati.
La domanda è: che cosa offre il tradizionale paradigma orientato agli oggetti (con gerarchie e simili) come spesso visto nelle implementazioni del linguaggio comune che non può essere fatto così facilmente in questo modello più semplice? O, in altre parole, se dovessi progettare una lingua oggi, c'è un motivo per cui vorresti includere il concetto di gerarchie di classi?