Dużo myślałem o projektowaniu języka i o tym, jakie elementy byłyby konieczne dla „idealnego” języka programowania, a studiowanie Google Go skłoniło mnie do zakwestionowania wielu powszechnie znanej wiedzy.
W szczególności Go wydaje się mieć wszystkie interesujące korzyści z programowania obiektowego bez faktycznej struktury języka zorientowanego obiektowo. Nie ma klas, tylko struktury; nie ma dziedziczenia klas / struktur - tylko osadzanie struktur. Nie ma żadnych hierarchii, żadnych klas nadrzędnych, żadnych jawnych implementacji interfejsu. Zamiast tego reguły rzutowania oparte są na luźnym systemie podobnym do pisania kaczego, tak że jeśli struct implementuje niezbędne elementy „Czytnika” lub „Żądania” lub „Kodowania”, możesz go rzutować i używać jak jeden.
Czy jest coś w OOP zaimplementowanym w C ++ oraz Javie i C #, które jest z natury bardziej wydajne, łatwiejsze w utrzymaniu, w jakiś sposób potężniejsze, z którego musisz zrezygnować, przechodząc do języka takiego jak Go? Jakie korzyści musisz poświęcić, aby zyskać prostotę, jaką reprezentuje ten nowy paradygmat?
EDYCJA
Usunięto „przestarzałe” pytanie, na które czytelnicy wydawali się nadmiernie rozłączać i rozwścieczać.
Pytanie brzmi: co ma do zaoferowania tradycyjny paradygmat obiektowy (z hierarchiami itp.), Który często występuje w implementacjach języka wspólnego, czego nie da się zrobić tak łatwo w tym prostszym modelu? Innymi słowy, czy gdybyś dzisiaj zaprojektował język, czy istnieje powód, dla którego chciałbyś uwzględnić koncepcję hierarchii klas?