konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

Od zawsze wkurzało mnie pisanie function, return i bind(this) w JS, postanowiłem znaleźć OSTATECZNE ROZWIĄZANIE.

Napisałem dzisiaj od rana proof of concept komplikatora i dekomplikatora:
https://github.com/MLaszczewski/SuperJS

Polecam i zapraszam do dyskusji.

konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

To ja sie skusze i zadam pytanie jako pierwszy.... Po co?
Rozumiem ze to moze byc wkurzajace, ale nie widze jak dodanie dodatkowego "kompilowania" sprawia ze zycie bedzie latwiejsze i przyjemniejsze. Usuwasz jedna irytujaca rzecz, zastepujac ja druga. Dodatkowo wprowadza to utrudnienia pracy w teamie.

ps... spodobal mi sie komantarz "I think that CoffeScript users should eventualy go to hell and die." ;)

konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

a nie można tego rozwiązać na poziomie edytora?
piszesz w swoim edytorze tekstu:
()-> this.y,
i wtyczka/makro zamienia Ci to od razu na function() { return this.y }?

nie ma już czegoś podobnego w którymś edytorze?

konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

Andrzej W.:
Rozumiem ze to moze byc wkurzajace, ale nie widze jak dodanie dodatkowego "kompilowania" sprawia ze zycie bedzie latwiejsze i przyjemniejsze. Usuwasz jedna irytujaca rzecz, zastepujac ja druga. Dodatkowo wprowadza to utrudnienia pracy w teamie.
Łukasz L.:
a nie można tego rozwiązać na poziomie edytora?
To będzie zupełnie na poziomie edytora - edytor przy ładowaniu plików będzie zamieniał kod Javascriptowy na SJS, a przy zapisie będzie zamieniał spowrotem - taki jest cel tego projektu. Chodzi o czytelność dla użytkownika bez utrudniania życia innym i utrudniania debugowania.

Zastanawiam się czy najpierw zrobić wersje edytora scripted czy wtyczkę do WebStorma.
Łukasz L.:
nie ma już czegoś podobnego w którymś edytorze?
piszesz w swoim edytorze tekstu:
()-> this.y,
i wtyczka/makro zamienia Ci to od razu na function() { return this.y }?
Gdyby zamieniał od razu i w widoku pliku to nie poprawiało by to czytelności, to o czym piszesz mam aktualnie rozwiązane makrami w WebStormie - mam makro do function() {} i do (function() {}).bind(this). Szybciej się pisze dzięki temu ale czytelności to nie poprawia.Ten post został edytowany przez Autora dnia 08.06.13 o godzinie 21:06

konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

Cenie ludzi ktorzy chca cos zmienic i zmienic na lepsze (pewnie tak samo jak autorzy coffeescriptu), ale mam wrazenie ze to co probujesz zrobic, jest tylko i wylacznie adekwatne do Twoich preferencji.

Wtyczka do webstorma powiadasz, buuu a ja uzywam notepad++ i juz po ptakach... ;)

konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

Prawda. Chęci dobre ale efekt warty świeczki ? Po kiego mi coś takiego kiedy chyba każdy normalny edytor takie rzeczy jak function, return i metody odpowiada mniej i więcej już w tym momencie wpisania re lub fu, literka mniej lub więcej + tab.

Co do samego kompilatora to można. Np w phpStorm można sobie ustawić skrypty do przetwarzania plików które się odpalają przy ich zapisaniu. Mam tam podpięte np wszelakiego rodzaju kompresory, lessa i parę innych drobiazgów. Więc samo zastosowanie mogło by być transparentne.

Tylko że gra nie wydaje mi się warta zachodu.

konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

Andrzej W.:
Wtyczka do webstorma powiadasz, buuu a ja uzywam notepad++ i juz po ptakach... ;)
Myślę raczej w tej chwili nad przerobieniem edytora scripted albo Eclipse Orion. Ale projekt jest open source więc każdy może sobie napisać wtyczkę do własnego programu.
Dariusz P.:
Prawda. Chęci dobre ale efekt warty świeczki ? Po kiego mi coś takiego kiedy chyba każdy normalny edytor takie rzeczy jak function, return i metody odpowiada mniej i więcej już w tym momencie wpisania re lub fu, literka mniej lub więcej + tab.
Po to że zapis (x)=>{ this.print(x) } jest bardziej czytelny niż: (function(x) { this.print(x) }).bind(this) a jeśli programujesz funkcyjnie w JS to tworzą się takie krzaki że oczy bolą.
Jak pisałem wyżej, do szybszego pisania mam makra, ale one nie poprawiają czytelności kodu.
Co do samego kompilatora to można. Np w phpStorm można sobie ustawić skrypty do przetwarzania plików które się odpalają przy ich zapisaniu. Mam tam podpięte np wszelakiego rodzaju kompresory, lessa i parę innych drobiazgów. Więc samo zastosowanie mogło by być transparentne.
Można tak samo jak z Lessem, ale jest to średnio wygodne, o wiele wygodniej było by dekompilować JS przy wczytywaniu pliku JS, i kompilować przy zapisywaniu.

Na razie projekt się ogranicza do tych 4 ulepszeń:
(x)=>{ this.print(x) } (function(x) { this.print(x) }).bind(this)
(x)=>( x*2 ) (function(x) { return x*2 }).bind(this)
(x)->{ this.print(x) } function(x) { this.print(x) }
(x)->( x*2 ) function(x) { return x*2 }
Myślałem nad kilkoma innymi, ale jestem mocno ograniczony z wprowadzaniem zmian, bo operacje dekompilacji i kompilacji nie mogą zmieniać za mocno kodu.
No i muszę zimplementować to od nowa na AST, bo aktualna implementacja na tokenach ma kilka problemów.
Wojciech Mazurek

Wojciech Mazurek właściciel, PPHU
Neuron

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

Michał Ł.:
Po to że zapis (x)=>{ this.print(x) } jest bardziej czytelny niż: (function(x) { this.print(x) }).bind(this) a jeśli programujesz funkcyjnie w JS to tworzą się takie krzaki że oczy bolą.
Jak pisałem wyżej, do szybszego pisania mam makra, ale one nie poprawiają czytelności kodu.

W zasadzie to nie powinienem się odzywać bo jestem w JS ciągle na etapie kursu dla początkujących ;)
Dla mnie to zaciemnienie kodu który i tak jest masakryczny - jestem przyzwyczajony do objectpascala, definiowania typów itp itd.
Przez lata byłem bałaganiarzem i na przykład stosowałem krótkie nazwy zmiennych np var lcm.
A po miesiącu - co to k***a jest lcm. Teraz pisze licznik_cykli_maszyny i wszystko jasne.
Człowiek to takie zwierze które przetwarza dane tak jak komputer kwantowy - słowa function się nie czyta - je się WIDZI. Być może koledze taki sposób kodowania ułatwia życie - innym będzie tylko zakłócało, często nieświadomą umiejętność całostronicowego czytania.

Ja bym poszedł w inną stronę jeśli kolega chce robić wtyczki. W delphi mam taki wynalazek który pozwala mi stworzyć komplet fraz.
Wtedy np piszę w edytorze $$F a pojawia się function(x){ }
itd ...

konto usunięte

Temat: SuperJS! Rewolucja w JavaScript! Nowy dialekt z...

Po to że zapis (x)=>{ this.print(x) } jest bardziej czytelny niż: (function(x) { this.print(x) }).bind(this) a jeśli
programujesz funkcyjnie w JS to tworzą się takie krzaki że oczy bolą.
wiem, wiem. W sumie mam myślałem całkiem niedawno czy by nie zrobić takiego kompilatorka. Ale... do wszystkiego można się przyzwyczaić. Albo uprościć kod. Np. to co napisałeś:
(function(x) { this.print(x) }).bind(this)
działa w zasadzie tak samo jak:
this.print.bind(this)

wiem, że dałeś tylko dla przykładu - ale fakt faktem... że sam zaciemniłeś sobie kod ;)

poza tym UnderscoreJS ma parę przydatnych rzeczy, np. funkcję bindAll, która ci binduje wszystkie metody. Albo możesz podać od razu kontekst :
_.each(list, iterator, [context])
w ten sposób potrzeba jawnego użycia bindu w ogóle znika.

nie zmienia to niestety faktu, że function i return dalej jest brzydkie, ale... nie jest najgorzej ;)



Wyślij zaproszenie do