Eu tenho pensado muito sobre design de linguagem e quais elementos seriam necessários para uma linguagem de programação "ideal", e o estudo do Google's Go me levou a questionar muitos conhecimentos comuns.
Especificamente, o Go parece ter todos os benefícios interessantes da programação orientada a objetos sem realmente ter a estrutura de uma linguagem orientada a objetos. Não há classes, apenas estruturas; não há herança de classe / estrutura - apenas incorporação de estrutura. Não há hierarquias, classes-pai ou implementações explícitas de interface. Em vez disso, as regras de conversão de tipo baseiam-se em um sistema flexível semelhante à digitação de pato, de modo que, se uma estrutura implementa os elementos necessários de um "Leitor" ou "Solicitação" ou "Codificação", é possível convertê-lo e usá-lo como um.
Existe algo sobre o OOP implementado em C ++ e Java e C # que é inerentemente mais capaz, mais sustentável, de alguma forma mais poderoso que você precisa desistir ao mudar para uma linguagem como Go? Que benefício você tem que desistir para ganhar a simplicidade que esse novo paradigma representa?
EDIT
Removida a pergunta "obsoleta" pela qual os leitores pareciam ficar excessivamente pendurados e enfurecidos.
A questão é: o que o paradigma tradicional orientado a objetos (com hierarquias e coisas semelhantes), como freqüentemente visto em implementações de linguagem comum, tem a oferecer, que não pode ser feito tão facilmente neste modelo mais simples? Ou, em outras palavras, se você fosse projetar uma linguagem hoje, existe algum motivo para incluir o conceito de hierarquias de classe?