V poslední době jsme zažili záplavu nových jazyků. Hodně vývojářů má k podivným novotám jako JavaFX přirozenou nedůvěru, často hraničící s odporem. Do stejné kategorie spadají Ceylon od Red Hatu, Go od Googlu nebo CoffeeScript.
Google právě představil další nový jazyk, Dart. Zatímco jejich Go má nahradit C(++), Dart se zaměřuje na web a má být nástupcem Javascriptu (i když je plánována i podpora pro běh na serveru). Přes a priori nedůvěru má však tento jazyk hlavně pozitiva. V čem spočívají?
Jazyk je dynamicky typovaný, ale typy lze používat volitelně. To je velké výhoda, někdy se bez dynamického typování neobejdeme, ale pro většinu kódu chceme kontrolu překladače. Obsahuje (jako všechny moderní jazyky) uzávěry. Je objektový a založený na třídách (včetně podpory super). Umožňuje dynamické vyhodnocování výrazů. A protože zatím kromě experimentálního překladače Googlu neumí s Dartem nic pracovat, lze jej přeložit do Javascriptu.
Z pohledu tvůrce kompilátorů je Dart velice zajímavým a užitečným počinem. Mnoho jazyků lze kompilovat do Javascriptu, ale emulovat třídní dědičnost v JS je docela peklo. Protože překlad z Dartu do JS má Google vyřešen velmi dobře (což není překvapením, mají spoustu zkušeností s GWT), mají teď vývojáři „transpilátorů“ (transpilers, z trans-compiler) k dispozici jednodušší cílový jazyk. Jako příklad lze uvést CoffeeScript. Převod do JS není triviální, s Dartem to je hračka (oba jazyky si jsou vlastně koncepčně velmi podobné).
No nevim jak moc dobre maji ten preklad vyreseny :-D
https://gist.github.com/1277224
Mrkněte třeba sem:
https://github.com/jashkenas/coffee-script/wiki/List-of-languages-that-compile-to-JS
Je řada jazyků, které lze kompilovat do JavaScriptu. Ale vývoj v nich není příliš rozšířený ani u větších projektů, kde nějaká režie na zaučení, nastavení infrastuktury pro překlad apod. tvoří malou část celkového času. Já vidím dva důvody:
a) špatně se to debuguje (debuguje se ten JavaScriptový generovaný kód, který pokud není hezký, tak se ladí dost špatně ... a i když je hezký, tak to není ono)
b) výsledek je velký a pomalý
Jako příklad můžete kouknout třeba na jazyk podobný C#, který používá celkem čitelný a transparentní překlad do JavaScriptu (přitom také má dědičnost, generika, ...):
http://www.toptensoftware.com/prefix/code
Jako ideální mi přijde do prohlížečů nacpat univerzální virtuální stroj (něco jako třeba .NET Runtime) s tím, že by prohlížeč požíral bytecode. Překladačů z různých jazyků do tohoto bytecodu by jistě vzniklo plno (stejně jako u překladačů do .NETu (IL) nebo do JavaScriptu). Vývoj jazyků by nebyl omezen na standardizaci, implementaci v prohlížečích a aktualizace prohlížečů na koncových zařízení. A tedy by šel jistě rychle kupředu.
Webové programování by se tak výrazně přiblížilo možnostem desktopovému programování - různé jazyky a nástroje, rychlost, ..
Ladění by pak mohlo být řešení buď doplňky do prohlížečů nebo externí debuggerem, který by se napojil na (ideálně trochu standardizované) rozhraní prohlížeče (resp. virtuálního stroje).
Tento princip není nic nového a myslím, že pro web by se vyloženě hodil. Ano - pro menší aplikace je to zesložitění (ale tam JavaScript není problém). Pro větší (a postupem času na webu jsou a budou čím dál tím více komplexnější aplikace) mi pak tohle přijde ideální řešení.
DART je sice celkem pěkný jazyk, ale rozhodně ne vyzrálý. A se změnami bude problém, protože prohlížeče jej nebudou podporovat. Překlad do JavaScriptu není dobré řešení (viz výše). Také je otázka, zda se DART vůbec podaří protlačit do všech prohlížečů. Není to úplně systémová věc a Google asi nemá chuť procházet nějakou širokou diskusí a standardizací (z časových důvodů při každé změně). Programovací jazyk je do značné míry subjektivní věc - někomu se líbí to, někomu něco jiného. Také na řešení určitých problémů se hodí více něco jiného než na řešení jiných problémů. Virtuálního stroj je mnohem méně subjektivní věc a tedy dosáhnout nějakou ovšeobecnou shodu mi přijde mnohem snazší.
[4] Ano - překladem se ztratí možnost dívání na zdrojový kód. Otázka je, zda je to výhoda nebo nevýhoda.
Navíc nějaká forma obfuskace nebo ztrátové minimalizace se u JS často používá (zvláště u větších projektů, kde by se tohle asi nejvíce používalo). Náhrada významových identifikátorů, ztráta komentářů ... to jsou automaticky neobnovitelné ztráty, které stejně téměř znemožňují čtení kódu.
A zveřejnit zdroják, pokud má na tom autor zájem, není problém v žádném případě.
Nakonec je to případě všech kompilovaných jazyků (i když třeba u Java, C# apod. existují celkem účinné dekompilátory) a nepůsobí to nějaké problémy.
> Čím exotičtější jazyk, tím hůře se shání noví programátoři, kteří budou projekt třeba udržovat.
To jistě - každý bude muset přemýšlet, jaký jazyk je vhodný pro daný projekt. Postupem času stejně bude několik málo používaných (osvědčí se při vývoji, budou mít širokou podporu, vývoj, ...) a ostatní okrajové. Nicméně na webu volný vývoj jazyků nikdy nebyl, takže v případě "otevření trhu" by se jistě našlo dost zajímavých projektů, myšlenek, ...
GWT je jeden z mála, kde nějaké možnost ladění na úrovni zdrojového kódu jsou - většina zmíněných překladačů (resp. doprovodných nástrojů) takové možnosti nemá. A když už nějaké nástroje jsou, tak typicky ne pro všechny prohlížeče nebo velmi omezené.
Zkoušel jsem před pár měsíci několik takových projektů a nebyl to žádný zázrak po stránce rychlosti (zejména první inicializace). Zvláště patrné to bylo u starších prohlížečů, které jsou na tom s výkonem řádově hůře než moderní prohlížeče.
U kódu je třeba jej celý na počátku parsovat (lexikální analýza, syntaktický analýza, ...). U bytecode je sice třeba před spuštěním provést validaci, ale ta se dá typicky provádět postupně (validovat vždy jen to, co je třeba spustit), což u kódu provést typicky nelze, protože nikdo neví, ve které části je co.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 203×
Přečteno 25 362×
Přečteno 23 796×
Přečteno 20 178×
Přečteno 17 875×