Я много думал о дизайне языка и о том, какие элементы были бы необходимы для «идеального» языка программирования, и изучение Google Go привело меня к сомнению во многих других общеизвестных знаниях.
В частности, Go, похоже, обладает всеми интересными преимуществами объектно-ориентированного программирования, фактически не имея структуры объектно-ориентированного языка. Там нет классов, только структуры; нет наследования класса / структуры - только встраивание структуры. Здесь нет ни иерархий, ни родительских классов, ни явных реализаций интерфейса. Вместо этого правила приведения типов основаны на свободной системе, похожей на типизацию утки, так что если структура реализует необходимые элементы «Reader», «Request» или «Encoding», вы можете привести ее и использовать как один.
Есть ли что-то в ООП, реализованном в C ++ и Java и C #, которое по своей природе более способно, более легко обслуживаемо и каким-то более мощным, от чего вам придется отказаться при переходе на язык, такой как Go? От какой выгоды вы должны отказаться, чтобы получить простоту, которую представляет эта новая парадигма?
РЕДАКТИРОВАТЬ
Удалил «устаревший» вопрос, который читатели, казалось, были чрезмерно одержимы и рассержены.
Вопрос состоит в том, что может предложить традиционная объектно-ориентированная парадигма (с иерархиями и тому подобным), которую часто можно увидеть в реализациях на общем языке, которую нельзя сделать так легко в этой более простой модели? Или, другими словами, если бы вы разрабатывали язык сегодня, есть ли причина, по которой вы хотели бы включить концепцию иерархии классов?