Ho riflettuto molto sulla progettazione linguistica e su quali elementi sarebbero necessari per un linguaggio di programmazione "ideale", e studiare Google's Go 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 alcuna struttura di un linguaggio orientato agli oggetti. Non ci sono classi, solo strutture; non esiste un'eredità di classe / struttura - solo l'incorporamento della struttura. Non ci sono gerarchie, né classi genitore, né implementazioni esplicite dell'interfaccia. Invece, le regole di cast di tipo si basano su un sistema allentato simile alla digitazione anatra, tale che se una struct implementa gli elementi necessari di un "Reader" o di una "Request" o di una "Encoding", allora puoi lanciarlo e usarlo come uno.
C'è qualcosa di OOP implementato in C ++ e in Java e C # che è intrinsecamente più capace, più manutenibile, in qualche modo più potente che devi rinunciare quando ti trasferisci in una lingua come Go? Quale beneficio hai da rinunciare per ottenere la semplicità che questo nuovo paradigma rappresenta?
EDIT
Rimosso la domanda "obsoleto" che i lettori sembravano eccessivamente attaccati e infuriati da
La domanda è: che cosa offre il paradigma tradizionale orientato agli oggetti (con gerarchie e simili) visto frequentemente nelle implementazioni del linguaggio comune che non può essere fatto facilmente con questo modello più semplice? O, in altre parole, se dovessi progettare una lingua oggi, c'è una ragione per cui vorresti includere il concetto di gerarchia di classi?