Czy wraz z kolejnymi standardami ECMAScript zmienią się bebechy JavaScriptu?

2017-10-14 14:03
Szalony Mleczarz
0

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.

Pozostało 580 znaków

2017-10-14 14:14
0

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:

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.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit, 2017-10-14 14:21

Pozostało 580 znaków

2017-10-14 15:01
0

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).


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 2x, ostatnio: LukeJL, 2017-10-14 15:09

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0