JavaScript ma wiele ciekawych elementów, co do których nie jest pewne, czy były by design czy by bug. Nie mniej jednak działają i mają swoje smaczki.
Dla przykładu, realizacja dziedziczenia za pomocą prototypu ( pole proto), różne konwersje przy porównywaniu, no i inne takie które z pewnością znacie z tematów na StackOverflow i 4p.
Moje pytanie jest takie, czy to zawsze takie pozostanie czy kolejne wersje ES mogą to zmienić? Bo np klasy z ES6 dalej pod spodem działają tak, jak osiągało się dziedziczenie za pomocą różnych "hacków" że tak to nazwę.
Czy więc można się spodziewać w kilkuletnim obszarze czasu jakiś sporych, rewolucyjnych, niszczących zmian w JS czy dalej będzie to "nadbudówka" na to co jest obecnie?
Dla przykładu porównam to do Scali, której wszystkie featury tak naprawdę to cukier składniowy a bytecode Scali i Javy będzie podobny.
Dla przykładu porównam to do Scali, której wszystkie featury tak naprawdę to cukier składniowy a bytecode Scali i Javy będzie podobny.
Scala kompiluje się do:
- Javy (standardowo): http://scala-lang.org/
- JavaScriptu: http://www.scala-js.org/
- LLVM IR: http://www.scala-native.org/
Każda implementacja Scali ma nieco inną semantykę. Z drugiej strony zarówno w Scali.js jak i Scali-Native implementuje się trochę zamienników dla standardowych Javowych klas po to, by móc łatwiej pisać przenośny kod, tzn kod który jednocześnie kompiluje się pod Scalą, Scalą.JS i Scalą-Native.
Nie powiedziałbym więc, że Scala jest cukrem składniowym dla Javy. Jest to trochę zbyt naciągane. Mamy takie wynalazki jak https://github.com/Frege/frege który jest w zasadzie wierną implementacją standardu Haskella na JVMa. Czy to znaczy, że Haskell jest cukrem składniowym dla Javy?
Duże znaczenie ma to czy abstrakcje ciekną ( https://en.wikipedia.org/wiki/Leaky_abstraction ). Jeśli w JSie wszyscy przeniosą się na klasy, zabawa z prototypami będzie niepotrzebna, a same prototypy nie będą o sobie dawać znać to nie trzeba będzie sobie nimi głowy zaprzątać. Wydaje się to jednak mało prawdopodobne.
Wątpię, żeby zmienili coś mocno w samym środku JavaScript, bo by cały internet się rozwalił.
Nawet jakby wszyscy zaczęli używać tylko klas, to i tak spora część stron będzie zawierała kod operujący bezpośrednio na prototypach (już pomijając to, co jest lepsze, chodzi po prostu o to, że nie zlikwidujesz prototypów z języka, ponieważ ludzie od dawna z tego korzystają i ciężko byłoby zmieniać wszystkie strony jakie są w internecie).
Więc chyba wtedy by musiały jednocześnie dwie wersje JSa istnieć (coś jak Python 2 i Python 3).
jak osiągało się dziedziczenie za pomocą różnych "hacków" że tak to nazwę.
Dziedziczenie samo w sobie jest zwykle hakiem.
Swoją drogą dziedziczenie po prototypach wydaje się być bardziej czystszą formą dziedziczenia niż zabawa w klasy (tj. dziedziczenie po prototypach to po prostu delegacja do innego obiektu, a dziedziczenie klasowe, to w zasadzie 2 delegacje naraz - instancja odwołuje się do klasy, a klasa odwołuje się do klasy bazowej).