Jak bez této technologie, která podle tebe patří na smetiště dějin, přehraji akcelerovaně HTML5 video na Linuxu? Mám grafický čip intel sandy bridge.
Odpovím si sám: V Chromu vůbec. Ve Firefoxu ano, ale pouze H264/MP4.
Slavné VP8,9/WEBM, výchozí např. na YouTube, nebo na Stream.cz, akcelerovaně neumí zatím nikdo na žádné desktopové platformě. Vskutku pokrok.
Ale např. takové internetové bankovnictví by se ve Flashi už dělat nemuselo.
Miluju, když na sebe lidi v arogantně sebevědomém příspěvku prásknou, že o problému vlastně nic netuší :D Říct o Javascriptu že je "dobrý jazyk" nemůže nikdo, kdo v něm napsal víc jak "hello world". Jeho autoři měli extrémní talent na pouštění se slepými uličkami.
Naopak, jeho použití v prohlížečích je super, umožňuje vytvářet multiplatformní vzdáleně ovládané aplikace. Jasně, jde s ním prasit, ale to jde s každým jazykem.
Jazyk jako takový je docela dobrý (věci se v něm zapisují snadno (pole, asociativní pole/objekty), lze v něm dobře psát objektově, ale přitom to jazyk nevyžaduje. Lambda se dá uložit do proměnné a dokonce si nese sebou kontext (closures). Přitom má celkem "přirozenou" (C-style) syntaxi (na rozdíl třeba od Lispu.)
Naproti tomu knihovní funkce a hlavně jehich (h)různá implementace v prohlížečích, obzvlášť pokud jde o práci s DOMem, je to s čím raději nechci mít nic společného. Ve chvíli kdy je to obalené nějakým frameworkem, který odstíní různou implementaci, tak už se v tom jakž takž psát dá. Ve chvíli kdy se to nepoužívá pro web, tak už se v tom píše docela dobře.
Ne, jazyk je to příšerný, vhodný maximálně tak na drobné skriptovací bastlení:
- je slabě typovaný (neodhalí statickou analýzou chyby + to prakticky znemožňuje rozumné našeptávání v IDE)
- v defaultním módu dokonce dovoluje používat nedefinované proměnné!!!
- objekt se definuje programátorským ekvivalentem rituálního tance okolo ohně a podříznutím kozy
- nemá žádné zapouzdření (pro prasení výhoda, taky to občas použiju, ale ve větších projektech musíte lidi neustále mlátit přes ruce, aby neprasili)
- je netriviální napsat volání implementace přetížené metody v rodičovské třídě - ekvivalent:
@Override
public void funkce() {
super.funkce();
(můj kus)
}
- do closures se nepřenáší automaticky ukazatel na objekt (this), pokud ho tam člověk potřebuje (jako že většinou ano), musí ho tam explicitně bindovat
- v jazyce není nahrávání dependences (potřebné soubory), musí se to řešit externě
A tak dál. Ostatně, když je tak dobrý, proč nad něj vzniklo tolik nadstaveb?
Funkce pro práci s DOMem se naopak už chovají docela konzistentně, viz zrovna nedávný článek na sesterském Zdrojáku: http://www.zdrojak.cz/clanky/javascript-restart-queryselector/
> - je slabě typovaný (neodhalí statickou analýzou chyby + to prakticky znemožňuje rozumné našeptávání v IDE)
To neni samo o sobe nevyhoda (neni to stejne jako v popularni Ruby?). Naseptavani neni tak spatne, napr. WebStorm to myslim umel celkem pouzitelne. Samozrejme context-aware naseptavani bude obtizne.
> - v defaultním módu dokonce dovoluje používat nedefinované proměnné!!!
Neni tohle celkem bezne u slabe typovanych dynamickych jazyku? Treba v PHP se vytvori promenna proste prirazenim, taky nebyla explicitne definovana/deklarovana.
> - objekt se definuje programátorským ekvivalentem rituálního tance okolo ohně a podříznutím kozy
Osobne mi to prijde taky zajimave, ale je to jen jiny pristup k OOP. Ze je jiny z nej ale nutne nedela spatny pristup.
> - nemá žádné zapouzdření (pro prasení výhoda, taky to občas použiju, ale ve větších projektech musíte lidi neustále mlátit přes ruce, aby neprasili)
Mozna ne na urovni jazyka, ale vim jiste, ze existuji pristupy jak to vynutit. Pri funkcionalnim pristupu k tvoreni objektu se to delalo tak, ze privatni fieldy byly vlastne parametry z funkce, ktera provadela vytvoreni instance (vice v posledni prednasce od Douglas Crockford, je dostupna i na YT). Firefox pouziva taky neco k tomuto ucelu, jmenuje se to myslim trait, ale netusim jak to funguje.
> - je netriviální napsat volání implementace přetížené metody v rodičovské třídě - ekvivalent: ...
Zrovna tohle je myslim pripad, kdy se nekdo snazi roubovat mysleni z Javy s klasickou dedicnosti na JavaScript s prototypovou dedicnosti. Ale mozna se pletu, v JS delam jen okrajove.
> A tak dál. Ostatně, když je tak dobrý, proč nad něj vzniklo tolik nadstaveb?
Takze cim vic nadstaveb, tim horsi jazyk? Predpokladam, ze za nadstavbu povazujete knihovny a frameworky. Tzn. ze takovy C# nebo Python jsou podle teto logiky ohavne jazyky, ktere mely skoncit v propadlisti dejit (spolu s PHP, ktere by si to IMO i zaslouzilo)...
A naopak, takovy BrainFuck je snad dokonalost sama, kdyz pro nej neexistuje skoro nic?
Ta logika mi neprijde spravna. IMO pocet, komplexita a kvalita knihoven odrazi pouze popularitu jazyka.
Slabé typování: Že Javascript není jediný, který má ty blbé vlastnosti neznamená, že nejsou blbé (bavím se v kontextu složitějších aplikací). Ono IntelliJ Idea co používám taky "nějak" napovídá, ale bez znalosti kontextu mi samozřejmě napoví milion možností a to je dost na "píp".
Prototypová dědičnost: Pokud je "jinost" jediné co o tom přístupu můžete říct dobrého, tak to evidentně _je_ špatný přístup. Opět, kdo v něm zkusil napsat něco složitějšího, kde potřeboval třeba právě to volání super-implementace, tak mi dá za pravdu. Jinak, to není žádné "roubování myšlení Javy", to je prostě design pattern. A jelikož co jsem viděl, tak všichni se to snaží nějak obcházet a nikdo nepřišel s nějakým elegantním JS řešením. To opravdu nebude myšlením programátorů, ale autorů jazyka.
Zapouzdření: No právě. Jazyk, u kterého musím dělat složité tanečky abych překonal jeho omezení je prostě špatný.
Nadstavby: Ne, nemyslel jsem knihovny a frameworky. Myslel jsem různé jiné jazyky, které se kompilují do Javascriptu a jejichž společným jmenovatelem je snaha pokrýt alespoň ty nejhorší problémy JS.
Asi vás baví mít nějakého virtuálního nepřítele, ale zkuste bojovat proti něčemu, o čem nemáte jenom silně mlhavé představy - nebudete se pak dobrovolně ztrapňovat v očích lidí, kteří místo představ mají konkrétní zkušenosti. Tvrdíte samé nesmysly a domněnky. Toť vše, virtuální bitvy se účastnit nehodlám.
Javascript ostatne nebyl minen na "neco vetsiho", a u skriptovacich jazyku je obecne silne typovani spise prekazkou pri psani. Ale daji se v tom psat "stredne" velke veci. A k tem objektum - javascript pokud vim se nesnazi pokryt u objektu vse. Pokud chcete od objektu neco navic musite si to napsat - a javascript to umoznuje, nebot do vseho lze priradit.
A kompilace jinych veci do javascriptu? Javascript je jednim ze scriptovacich jazyku (ja mam na skriptovani radeji asi jen Lua), bohuzel se stal ale i "kodem virtualni masiny" prakticky ve vsech prohlizecich (ty totiz nic jineho spolecne nepodporuji). Takze do nej (jako do kodu virtualni masiny) kompiluji progamatori z tech jazyku, ve kterych se jim pise dobre.
To jsem psal už na začátku, že na drobné bastlení je JS v pohodě. U středních věcí už začnete narážet na problémy a velké jsou peklo.
"Nesnaží se pokrýt u objektů vše" považuju dost za eufemismus. Spíš bych to viděl tak, že jakous takous podporu objektů má, ale že je hodně základní. To je ovšem v rozporu s tím co jste psal výše že "v něm jde dobře psát objektově", což bylo to, u čeho jsem nadskočil. Ne, v jazyku, ve kterém ve výchozím stavu ani pořádně nefunguje dědičnost a zapouzdření vůbec se mi objektově dobře nepíše.
Ano, do JS se kompilují jazyky, ve kterých se programátorům píše dobře. Ale proč si komplikují život a nepíšou to přímo v JS? No protože se jim v něm píše blbě, jelikož to není dobrý jazyk. To je ta pointa.
Jak říkám, jako skriptovací jazyk na drobné bastlení nemusí být špatný, ale pokud ho nechci provozovat v prohlížeči, tak nějak nevidím zásadní důvod, proč ho preferovat místo jiného skriptovacího jazyka (PHP / Python / Ruby / Lua, případně i Perl). O všech platí to, co jste psal jako výhody JS: "věci se v něm zapisují snadno (pole, asociativní pole/objekty), lze v něm dobře psát objektově, ale přitom to jazyk nevyžaduje". Implementaci closures takhle z hlavy nedokážu posoudit, ale nepřijdou mi pro menší projekty až tak podstatné.