Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
MooTools: nový sexy javascriptový framework

calavera.info
calavera.info (neregistrovaný)
6. 8. 2008 11:09

Problem Javascript

Javascript je velké zlo počítačového světa. Na tohle téma je ale spousta úvah jinde. Mě přijde na tomhle článku vtipné vyjádření "dělat z Javascriptu něco, co není". Vždyť na tom jsou postaveny všechny JS frameworky a MooTools zvlášť. Jeho základem je dodání syntaxe pro vytváření "opravdových" tříd, ve smyslu typovosti, dědičnosti aj. Je to celé na hlavu postavené: jazyk, jehož podstatou je pouze převádění identifikátorů na hodnoty, dostává dodatečné syntaktické prvky run-time. Nic proti MooTools, používal jsem ho a jsem s ním spokojen, ale nedávejme Javascriptu větší úlohu, než kterou zvládne, to za něj žádný framework nevyřeší. Je to dobré na nějaké pozlátko a odesílání Ajaxových requestů, s byznys logikou ale pryč z prohlížeče. GMail je hezký, ale zkuste si prohlédnout kód, na to mám své duševní zdraví moc rád.
Jakub Šťastný aura:97
6. 8. 2008 11:25

Re: Problem Javascript

Ano, obvykle jsou to uvahy od lidi, kteri nevi o co bezi. JS je skvely jazyk, podle me jeden z nejlepsich mainstreamovych jazyku. Co se tyce meho vyjadreni, samozrejme vim, ze MooTools vyrazne meni objektovy model JS, to ostatne zminuji. Myslim to tak, ze jQuery je spis takove nejake DSL, ktere si vsechno dela po svem, podle me divne ...

Chapu, ze se Ti byznys logika v prohlizeci nelibi, podle me je ale mozna budoucnost prave takova. Slysel jsi nekdy o SproutCore? Tak to je presne o tom. Rozdhodne JS, byt drive zatracovany, je jazykem (pritomnosti) a hlavne budoucnosti webu.

Kod Gmailu se mi nelibil, to ale neznamena, ze se to neda napsat hezky
anonymouse
anonymouse (neregistrovaný)
6. 8. 2008 14:03

Re: Problem Javascript

ze je Javascript "skvely jazyk" tvrdi predevsim lide, kteri se jim profesne zabyvaji (treba az tak, ze je to jejich "jediny" jazyk) a IMHO neni moc moudre toto jejich tvrzeni nekriticky prejimat a takto o Javascriptu basnit

protoze pokud znas Ruby, nemuzes toto s vaznou tvari tvrdit - hlavne kdyz porovnas objektove modely obou techto jazyku. A i kdybys neporovnaval s Ruby..., co treba zpusob, jakym je v javascriptu implementovana dedicnost (ona tedy implementovana neni, takze se resi pomoci vice ci mene osklivych hacku)?
Jakub Šťastný aura:97
6. 8. 2008 14:27

Re: Problem Javascript

Ja si ale vazne myslim, ze je JS skvely, to neni prejaty nazor. Samozrejme JS ma sve problemy nektere i velmi zavazne. Ale to ma kazdy jazyk vcetne Ruby (rikam to dost nerad, ale je to tak)
Mazarik
Mazarik (neregistrovaný)
6. 8. 2008 14:31

Re: Problem Javascript

V Javascripte dedicnost implementovana je. Nie je to vsak class-based dedicnost(ruby..), ale prototype-based http://en.wikipedia.org/wiki/Prototype-based_programming Rozne frameworky sa snazia simulovat class-based dedicnost, na ktoru je zvyknutych viac programatorov.

Vasu odpoved je mozne v prvom odseku obratit a prehodit slovicka Javascript a Ruby;)

Kazdemu vyhovuje nieco ine, mna tiez Javascript zo zaciatku pekne stval, ale zvykol som si. Ma totiz oproti inym jazykom, ktore pouzivam, niekolko zvlastnosti.
anonymouse
anonymouse (neregistrovaný)
6. 8. 2008 15:55

Re: Problem Javascript

ano, mel jsem napsat, ze k l a s i c k a (tj. class-based) dedicnost neni implementovana. Nicmene s prototypal dedicnosti je tolik problemu (viz treba D. Crockford a jeho Javascript - The Good Parts; hlavne nepritomnost private properties a metod v objektovem modelu) plus implementace dedicnosti berouci v potaz 'private access' je tak oskliva a 'neergonomicka' (nemluve o dalsich implementacich), ze IMHO neni mozne javascriptovou prototypal a 'klasickou' class-based dedicnost stavit na roven. Ta javascriptova je proste osklivy hack a prave kvuli tomu se nektere frameworky snazi implementovat klasicky objektovy model, a prave kvuli tomu klasicky objektovy model implementuje i ECMAScript 4.

ja byl nejdrive javascriptem zhnusem, druha faze byla nadseni (po precteni Javascript - The Definitive Guide), a ted mam spise rekneme pragmaticky vztah k tomuto jazyku. Tzn. inklinuju k pouziti frameworku, ktery za me resi vsechny problemy javascriptu, vcetne nekompatibilnich implementaci v jednotlivych prohlizecich (presneji receno, problem se sabotovanim javascriptu Internet Explorerem).

na stranu druhou, i diky javascriptu jsem pochopil, jak funguji closures, ze funkce mohou byt 'first class objects' a jak je to uzitecne (a take jake problemy to zpusobuje, viz treba binding), a za to jsem mu docela vdecny...
Rejpal
Rejpal (neregistrovaný)
6. 8. 2008 17:26

Re: Problem Javascript

"ano, mel jsem napsat, ze k l a s i c k a (tj. class-based) dedicnost neni implementovana. Nicmene s prototypal dedicnosti je tolik problemu (viz treba D. Crockford a jeho Javascript - The Good Parts; hlavne nepritomnost private properties a metod v objektovem modelu) plus implementace dedicnosti berouci v potaz 'private access' je tak oskliva a 'neergonomicka' (nemluve o dalsich implementacich), ze IMHO neni mozne javascriptovou prototypal a 'klasickou' class-based dedicnost stavit na roven. Ta javascriptova je proste osklivy hack a prave kvuli tomu se nektere frameworky snazi implementovat klasicky objektovy model, a prave kvuli tomu klasicky objektovy model implementuje i ECMAScript 4."

Žvaníte hovadiny. Podívejte se na Self-93, řekněte, že to je "ošklivý hack" a "neergonomické" a já se urazím. Ten model je geniálně jednoduchý a přitom nesmírně flexibilní. (JavaScript má ale bohužel Cčkoidní syntaxi, která toho hodně kazí.) Proto se možná taky v mainstreamu neujal, pojídači kávových koláčů by se cítili ztracení a to by se managorům nelíbilo. Jestli potřebujete vodit za ručičku, držte se maminky Javy.
anonymouse
anonymouse (neregistrovaný)
6. 8. 2008 18:27

Re: Problem Javascript

celou dobu je rec o javascriptu - kontext je snad jasny kazdemu. Navic pisu o 'dedicnosti berouci v potaz private access' (a jak Self resi privatni 'sloty', jestli vubec, si ted bohuzel nevzpominam). Ovsem jestli chcete rypat, tak prosim :)

pojidaci kavovych kolacku jsou ze skoly 'odkojeni' ceckem a c++, takze pak prirozene sahaji po jave, ktera jim prijde 'intuitivnejsi' (pripadne jim rovnou zacinaji cpat javu).
Rejpal
Rejpal (neregistrovaný)
6. 8. 2008 18:56

Re: Problem Javascript

"a jak Self resi privatni 'sloty', jestli vubec, si ted bohuzel nevzpominam"

Neřeší, protože v plně reflexivním systému nic takového jako "privátní" ve skutečnosti neexistuje (ani v Javě), takže nemá smysl si na to hrát. A co by to vůbec technicky přineslo? To už mi přijdou užitečnější packages ve stylu Common Lispu, těmi se aspoň dají řešit třeba konflikty identifikátorů, a metody a funkce neurčené k "veřejné spotřebě" mohou ukrýt celkem citlivě, aniž by tak činily násilně (a přesto neúčinně, jak názorně ukazuje Java). A ještě v něčem si rejpnu:

"' a jak je to uzitecne (a take jake problemy to zpusobuje, viz treba binding), "

...a jaké problémy konkrétně? S closures a lexikálním scopingem žádné problémy nejsou už nějakých třicet let, od doby, co Guy Steele a Gerald Sussman publikovali Lambda Papers, kde celé téma systematicky rozpitvali kousek po kousku. Leda že by JavaScript měl ohledně těchto věcí nějaká specifika, která ale můžou být způsobena nanejvýš špatnou implementací nebo snahou o "invenci" (ostudným příkladem snahy o "invenci" je třeba paskvil jménem newLISP), ale se samotnými koncepty asi těžko. S těmi mohou mít problémy nanejvýš programátoři-lidé.
anonymouse
anonymouse (neregistrovaný)
6. 8. 2008 19:21

Re: Problem Javascript

tim bindingem je mysleno na co 'this' ukazuje za behu programu - tedy this uvnitr definice funkce, a ten problem nastava, pokud takovou funkci predavam jako argument jinemu kodu (resp. referenci na ni), tak na co pak to 'this' ukazuje - takovou funkci je nejdrive nutno navazat na ten spravny objekt, na ktery pak 'this' ukazuje (takze z funkce je stava metoda, ktera ma pres 'this' pristup k ostatnim metodam a instance promennym objektu). Jinak 'this' ukazuje na globalni objekt, kterym je window. (ukazuje nikoliv ve smyslu ceckovskeho pointeru, ale reference)

to je problem, ktery prave resi javascritove frameworky, ktere rozsiruji prototype

cili nebyl myslen binding ve smyslu lexikalniho scope, tak jak je pouzivan treba v Ruby (kdy je napriklad treba, aby si promenne pouzite v sablone udrzely binding na scope, ve kterem byly inicializovany)

doufam, ze jsem to napsal srozumitelne (cesky to moc neumim)

Self moc neznam, ale s tou reflexivnosti to dava docela smysl (viz treba i metoda instance_variable_set v Ruby)
sNop
9. 8. 2008 20:29

Re: Problem Javascript

Konecne neco chytreho a pravdiveho o JS
Mazarik
Mazarik (neregistrovaný)
6. 8. 2008 12:07

Re: Problem Javascript

Kod gmailu je tak spraseny z dovodu generovania z javovskeho kodu prevodnikom, ktory je dielom googlu. JS frameworky a smer vyvoju jazyka pridavaju vacsinou iba metody pre lepsiu a efektivnejsiu pracu s gui(DOM, atd.), ktore je aj pre tenkeho klienta rozhodujuce. V diskusii uz spomenute Array.each je jednoriadkova zalezitost, ktora pokial je to nativna funkcia je rozhodne rychlejsie spracovana ako funkcia s rovnakou funkcnostou v JS alebo v najekom frameworku, kde je aj tak implementovana v JS.
isnotgood
isnotgood (neregistrovaný)
6. 8. 2008 12:16

Re: Problem Javascript

tak gmail je zrovna spatnej priklad - je napsanej v jave a pak se z toho teprve vygeneruje javascript + html (GWT), tudiz ten hnusnej psycho kod je chtenej vysledek ;)
isnotgood
isnotgood (neregistrovaný)
6. 8. 2008 12:28

Re: Problem JavascriptRe: Problem Javascript

tak krom toho ze me s tim gwt predstihl Mazarik tak jeste musim dodat ze pekne kecam, google GWT nepouziva na gmail atd. viz http://ajax.phpmagazine.net/2007/03/why_can_google_not_eat_its_dog.html, takze ten kod je opravdu prasecina generovana clovekem :)
...
... (neregistrovaný)
6. 8. 2008 17:31

Re: Problem Javascript

Problem javascript-u su ludia, ktori to nadrbu vsade a bez JS stranka proste nepojde, ani sa len neukaze homepage. Ano existuju pripady, ked JS ma odpostatnenie, ale ako sem-tam narazim na niektore stranky, tak mi to skor pripde, ze autor bol rad ze to nejako splacal v JS a bol rad, ze sa mu ta stranka nejak preloadne, alebo sa nacita nejaky frame.
...
... (neregistrovaný)
6. 8. 2008 17:35

Re: Problem Javascript

typicky priklad je livelink
http://www.greggriffiths.org/livelink/

ktory nam s hrdostou nasadali v praci, ale ked sa do toho systemu prihlasim, tak to vygeneruje asi 10 (slovom desat) redirectov, kym to konecne kdesi skonci na homepage..
mam skor pocit ze JS skor zlaka ludi robit skarede veci
Radovan
Radovan (neregistrovaný)
6. 8. 2008 18:22

Re: Problem Javascript

a ja mam pocit, ze o javascriptu vies tak malo, ze rad ukazujes len jeho nepopularnu stranku
Pavel Tišnovský aura:98
7. 8. 2008 11:08

Re: Problem Javascript

Ale když se to vezme kolem a kolem, není to vlastně jedno? JS je turingovsky kompletní programovací jazyk a pokud v něčem nevyhovuje (každý projekt má jiné požadavky a lidé rádi pro konkrétní problémy vybírají konkrétní tooly), není problém v něm napsat interpreter nebo i překladač (do rozumného bytekódu) něčeho lepšího.

Sice to povede ke zpomalení běhu, na druhou stranu to může zmenšit množství přenášeného kódu. Prostě JS je v oblasti prohlížečů základ, na kterém se dá stavět více způsoby: buď ho používat přímo, nechat si ulehčit práci pomocí nějakého "sexy" frameworku :-), nebo použít další vrstvu ve formě jiného programovacího jazyka.
Jakub Šťastný aura:97
14. 8. 2008 10:19

Re: Problem Javascript

Musim rict, ze na argument "turingovsky kompletni" jsem docela alergicky. Taky bychom mohli programovat v assemlberu, taky je turingovsky kompletni, ale kdo to dneska dela ;) ? Jinak JS mi prijde jako velmi prijemny jazyk, ale to uz jsem tady rikal ...
sNop
14. 8. 2008 10:56

Re: Problem Javascript

on taky i prijemny je :) kazdy dobry programator musi vedet ze js je na skriptovani ve webrobseri jak delany. az na ten divny objektovy model(dedeni od prototypu), ale proto ze je tak zvlastny tak je zaujimavy :)
Zasílat nově přidané příspěvky e-mailem