Přejít k navigační liště

Zdroják » JavaScript » Dart – Čo? Prečo?

Dart – Čo? Prečo?

Články JavaScript

V poslednej dobe prudko narástla dôležitosť JavaScriptu na webe a vývojári čoraz bolestivejšie narážajú na jeho nedostatky. Riešením možno bude postupné obohacovanie JavaScriptu o chýbajúcu funkcionalitu a plátanie najväčších problémov. Možno nie. Možno to bude Dart.

Nálepky:

História

Keď pred osemnástimi rokmi JavaScript v Netscape vznikal, nik si nepredstavoval, že by v ňom niekto mohol vyvinúť textový procesor, tabuľkový kalkulátor alebo emailového klienta. JavaScript na projekty tohto rozsahu nebol stavaný a vývoj v ňom prináša viacero problémov.

Podivuhodná syntax. Dvojité a trojité porovnanie, zvláštne sa správajúce this, automatické vkladanie bodkočiarky a mnoho ďalších.

Nezvyklá dedičnosť. Väčšina používaných jazykov pozná koncept triedy a klasické dedenie. JavaScript má svoju vlastnú prototypovú dedičnosť. Väčšina vývojárov preferuje klasiku a mnoho JavaScriptových frameworkov pridáva svoj vlastný spôsob vytvárania tried a dedičnosti.

Chýbajúce knižnice. Takmer všetky používané jazyky poznajú v nejakej forme knižnice a umožňujú rozdeliť kód do viacerých nezávislých celkov. V JavaScripte si na tento účel treba napísať vlastný preprocesor.

Žiadna štandardná knižnica. Okrem Google Closure Library nepoznám žiadnu javascriptovú knižnicu, ktorá by vývojárovi poskytovala všetky štandardné využívané funkcionality ako napríklad matematiku, kódovanie, prácu s DOM, kryptografiu, dátové štruktúry. Miesto toho existuje tisícka knižníc, z ktorých každá rieši nejaký malý zlomok popísaného. Čaro JavaScriptového programovania je aj manažovanie pätnástich nezávislých knižníc.

Nekompatibilita medzi prehliadačmi. Buď nikdy nepoužívať natívne API prehliadačov a spoľahnúť sa na medzivrstvy ako jQuery, alebo mať sakramentsky dobrý prehľad v tom, čo ktorý prehliadač podporuje.

Nízky výkon. Napriek nedávnym pokrokom, JavaScript stále nie je tak výkonný, ako by si vývojári a užívatelia priali.

Dart homepage

Prichádza Dart

Odpoveďou Google na trápenia bežného vývojára je Dart – opensource platforma určená na vývoj HTML5 webových aplikácií. Dart nie je len nový jazyk, sú to tiež knižnice, editor, virtual machine (VM), prehliadač, ktorý dokáže spúšťať Dart natívne (Dartium) a kompilátor do javascriptu (dart2js).

Ako taký program v Darte vyzerá, ilustruje nasledovná ukážka.

import 'dart:html';

main() {
  var button = new ButtonElement();
  button..text = 'Stlač ma!'
        ..onClick.listen((e) => window.alert('Výborne!'));
  query('body').children.add(button);
}

Klasická céčková syntax príliš nezaujme, no pozrime sa, čo nám Dart prináša.

Už žiadne nekompatibility prehliadačov. Dart sa kompiluje do javascritpu a otázku nekompatibility rôznych verzií prehliadačov rieši za vás dart2js. Podporované sú však len dostatočne moderné prehliadače, pri IE to je verzia 9 a vyššie. V budúcnosti existujú plány na podporu Dart VM v Chrome, čo prinesie niekoľkonásobné zrýchlenie aplikácií.

Dart je konvenčný. Nájdeme v ňom triedy, dedičnosť a syntax, na ktoré sme zvyknutí z ostatných jazykov.

Znovupoužiteľnosť kódu. Knižnice je možné spravovať a šíriť pomocou vlastného package managera (pub). Pre mňa osobne jedna z kľúčových vecí, neznášam spravovanie zložitých závislostí.

Kvalitné štandardné knižnice. Dart – to sú aj knižnice na prácu s dátovými štruktúrami, matematika, kódovanie URL, kryptografia, práca s dátumami, DOM a množstvo ďalších.

Možnosť použiť existujúci JavaScriptový kód. Pomocou knižnice js.dart je možné používať už existujúci JavaScriptový kód. To je veľmi silná vlastnosť, nakoľko pre JavaScript dnes existuje oveľa viac knižníc, ako pre Dart.

Dart prichádza s IDE. Upravený Eclipse so všetkým potrebným, debugging, refactoring, dopĺňanie kódu, upozorňovanie na potenciálne chyby.

Dart je mix statického a dynamického jazyka. Nepodporuje pridávanie atribútov a metód objektom za behu, no je možné obísť to implementáciou metódy noSuchMethod. Podporuje typy, no nie sú povinné. Dôvodom takto navrhnutého jazyka je optimalizácia na rýchlosť. Statický kód sa dá lepšie optimalizovať na výkon, no je dobré mať možnosť využívať aj dynamické vlastnosti.

Dart má dobrú podporu pre asynchronicitu a multivláknovosť. Prichádza s futures, ktoré reprezentujú výsledok spočítaný v budúcnosti. Vďaka futures je možné silne asynchrónny kód zapísať prehľadne. Dartové isolates zas umožňujú písať bezpečný multivláknový kód.

Kritika

Na Dart sa znieslo aj množstvo kritiky. Výčitajú sa mu hlavne jeho polodynamickosť/polostatickosť, prílišná podobnosť s Javou, zavádzanie niektorých kontroverzných coding patterns priamo do jazyka (statické factories) a ďalšie. Záujemci si môžu prečítať (síce už trochu zastaralý, Dart sa odvtedy dosť vyvinul) článok od Rafaël Garcia-Suarez Why Dart is not the language of the future.

Dart pre mnohých nikdy nebude najobľúbenejší jazyk, no oproti JavaScriptu ho vnímam ako obrovský skok vpred.

V ďalšom dieli sa zoznámime s editorom, prostredím, Dartiom a napíšeme svoj prvý Hello world.

Komentáře

Subscribe
Upozornit na
guest
24 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
GM

Já vím, že bez podobných experimentů by spousta skvělých věcí vůbec nemohla vzniknout, stejně jsem skeptický spíš až nepřístupný uznat takovým projektům právo na existenci. Pokud jde o nativní implementaci v prohlížeči, tak myslím, že jedno selhání historii bohatě stačí a to už se jmenuje VBScript. Překlad do jiného jazyka se mi příčí úplně, je z toho spousta chyb, špatně se to debuguje, je k tomu potřeba gigantická infrastruktura a stejně to člověka nutí přemýšlet v konstrukcích cílového jazyka (tenhle aspekt je nejlépe vidět na ORM). A navíc je javascript podle mě jazyk naprosto skvělý a spíše by bylo lepší, kdyby se více jazyků podobalo jemu a ne naopak.

Já

Nesouhlasím s vámi. Prošel jsem si programováním od Pascalu, Cecka, Javy, Perlu, PHP a přesto jsem se nedokázal sžít s JS. Než jsem zkusil Dart tak jsem prasil v Jquery špagetovej kód a prototypy nikdy nepoužíval, nerozumím jim a ta rozplyzlost návrhu mě odpuzovala, takže nic než drobné „funkcionální“ věci jsem nedokázal udělat. Jo je to moje chyba, ale takto „konzervativně“ orientovaných programátorů nenávidějících javascript znám hodně.

Po týdnu v Dartu jsem dokázal napsat multiplayer webovou hru – to co bych v JS nedokázal a vlastně ani nechtěl dokázat. A abych pravdu řekl jazyk i standardní knihovny mě hodně uchvátili, je tam spousta skvělých nápadů – trochu mi mrzí, že vývojáři okolo browserů jsou spíše javascript-a-nikdy-jinak a tajně doufám, že se to zlomí když JS má k ideálu pro všechny opravdu daleko.

K tomu překladu, díkybohu k myšlení v konstrukcích JS nenutí, není třeba. Osobně to také nemám rád, stejně jako např cofeescript atd, pravdou je, že dart2js opravdu funguje a zatím jsem neobjevil něco kvůli čemu bych měl měnit svůj kód, ale nedělám si iluze, že se nějaké corner casy najdou. Lepší by to bylo samozřejmě nativně, ne že ne.

Vojtěch Semecký

Naprostý souhlas. Zřejmě jsem jeden z těch konzervativně orientovaných programátorů.

Když přišlo nodejs, hodně mě zaujalo a opět jsem se snažil najít k té „js mentalitě“ cestu. Ale musel jsem opět konstatovat, že něco tak zmateného a nepřehledného, jako je javascript, jsem ještě neviděl. A opravdu nechápu, jak se to někomu může líbit.

A fakt, že musí vznikat věci, jako TypeScript nebo CoffeeScript, jenom dokazuje, že JavaScript nic úžasného není. Naopak zmíněný Dart nebo třeba Golang, jsou fakt pěkně navržené jazyky.

Naith

Musím souhlasit, JS opravdu nemám rád.
Můžete dát odkaz na tu hru a případně napsat podrobnější informaci ohledně výkonu a velikosti?

vaclav.sir

To, že v minulosti existoval jiný jazyk, který byl horší než JS a neprosadil se, není žádný argument. Dart je lepší než JS. Stejně tak TypeScript je lepší než JS. Nebo taky JS poctivě okomentovatný a zkompilovaný Closure Compilerem je lepší než „čistý“ JS.

Žádná gigantická infrastruktura potřeba není. Na větších projektech je samozřejmostí používat nějaký build systém kvůli testům a minifikaci, přidat další task není nic gigantického. Debugování řeší buďto source mapping (jako u jiných transpilerů), nebo vestavěný debugger v tom jejich pluginu do Eclipse.

Dokud funguje Dart pouze jako transpiler, tak podle mě moc velkou budoucnost nemá, to už spíš ten TypeScript. Jakmile by ho ale začlo nativně podporovat Chromium, Safari a Firefox (a Google na to má, když bude chtít) a byl by oproti JavaScriptu výrazně výkonější, tak by mohl hodně zamíchat kartama.

Radek Miček

JavaScript je velmi špatně navržený jazyk ( http://www.abclinuxu.cz/poradna/programovani/show/365261#57 ), což se projeví zvláště, když píšete větší aplikaci. Některé chyby opraví nová verze Harmony, ale i tak v něm bude IMO těžké tvořit velké aplikace.

Kompilátor dart2js produkuje source map pro usnadnění ladění.

> stejně to člověka nutí přemýšlet v konstrukcích cílového jazyka

Pokud píšete celou aplikaci v Dartu, tak si to nemyslím.

Hmm

Dart urcite vyskusam. Uz len kvoli tomu, ze mi lezie na nervy vzajomna nekompatibilita roznych jQuery verzii a modulov napisanych v nich.

diverman

Skoda, ze se prohlizece nevydaly smerem „podporujme jakykoliv jazyk skrze APi virtualniho stroje“: python, perl, ruby apod. a namisto toho implementuji konkretni jazyk(y).

jirkakosek

Před 15 lety to oba majoritní prohlížeče uměly. Ale poptávka byla zřejmě malá.

Pavel Stehule

Kdyby tomu tak bylo, tak by client side scripting nikdy nerozšířil. Tyto technologie se jednoduše učí, protože je možné začínat od jednoduchých HTML stránek, do kterých se přidává kód přirozenou formou v čitelné podobě. Pro začátek stačí textový editor a HTML browser. Použití jakéhokoliv VM by už vyžadovala složitější nástroje a složitější postupy, což je podle mne primární důvod, proč se neujaly Java applets nebo Silverlight. Vždy tu bylo mnohem větší masa „neprogramátorů“, kteří posouvali těžiště mimo klasiku – kovaní programátoři by nějraději dělali formuláře a aplikaci ve flashi nebo v něčem podobném. Což by asi teď už slo – díky mnohem rychlejšímu internetu, ale před 15 roky to vedlo k zrůdně pomalým aplikacím. V podstatě musel přijít Google a ukázat, jak se píší internet „user friendly“ aplikace.

diverman

Pavle, tak, jako napises JavaScript kod do tagu , proc totez nelze pro Python, Perl, Ruby apod..?

diverman

Zdrojaku, proc tu neni nahled pred odeslanim? Zmizela mi pulka prispevku. Mel jsem na mysli

okbob

Abych mohl spustit kód v tagu, tak musím mít požadované prostředí na klientu. V 90letech a ještě těsně po roce 2000 byl ve win jednoduše dostupný pouze vbscript a javascript. Cokoliv dalšího se muselo stahovat z internetu a instalovat, což ani leckde není povolené – a jediné, co jakž takž fungovalo na všech platformách (win, macos, linux) byl javascript.

Navíc, univerzální klient s client side scripting šel proti zájmům MS, takže MS fakticky blokoval tyhle technologie (minimálně se je nesnažil rozvíjet). V původním MS pojetí internetu jste pro aktivního tenkého klienta potřebovali doplňky v COMu resp v DCOMu (pokud možno napsaných ve VB a běžících vůči NT serveru), což bylo nejdříve dost děravé a pak docela komplikované a samo rozbíjející se. Potom MS přišel s Silverlightem – cokoliv s čím přišel MS byl skrytý vendor lock (aplikací psaných pro IE 5.5 používající vlastní COM objekty se ve firmách ještě teď někde zbavují). Javascript už pak měl takovou penetraci, že ho MS nemohl nepodporovat.

tacoberu

Jak by sis to představoval?

blizz

Dart ani TypeScript ma nicim nezaujali C like syntax je odporne ukecana a neprehladna (oproti jazykom z rodiny ML, ktore su viac human readable). OOP model javy a C# mi je nesympaticky – javascript ma lepsi a syntax sa da poriesit transpilermi napriklad http://livescript.net/

zaujal ma este aj F# transpiler do JS https://github.com/ZachBray/FunScript ale ten je zatial v plienkach – dynamicke veci riesi cez TypeProviders a neoptimalizuje tail cally takze je to v praxi nepouzitelne zatial

Pavel Dvořák

Tak se mi zdá, že bude pro mě Dart to pravé ořechové. Nikdy jsem nepatřil mezi zastánce JavaScriptu. Největším mučením na vývoji čehokoliv od webových stránek až po účetní systém pro mě byl vždycky JavaScript. Když už jsem ho musel použít, tak jsem se s pár řádky kódu patlal příšerně dlouho a stejně mi to nefungovalo tak, jak bych si přál. Zkoušel jsem už všechno od jQuery přes TypeScript, probíral se neurčitými zprávami ohledně Harmony (protože jsem doposud nepotkal návrh její specifikace), ale i ta mi přišla, že v ní toho mnoho nezlepšili (i když zarytí zastánci JS ji oslavují jako příchod spasitele), zkoušel jsem se provrtat AJAXem nebo některými novými JS preprocessory (většinou za moc nestojí), ale pořád jsem nenacházel nic, co by bylo pro mě jednoduché a přitom účelné a chytré řešení, jak uživateli provést nějakou složitou operaci. Už se těším na druhý díl…

Michael Czolko

Na začátek bych se vás nechtěl dotknout, ale to že se vám nelíbí JavaScript může pramenit z neznalosti tohoto jazyka a stylem, jak se v něm aplikace píšou. Rád bych vám připoměl, že se jedná o event-driven development. Takže se na základě událostí dějí různé operace, jenž nejsou natolik svázány se zbytkem aplikace. jQuery udělalo z JS nástroj který pracuje z domem (např. schovává a rozbaluje obsahy elementů). AJAX? NodeJS? To jsou nástroje, ze kterých září potenciál. Osobně na JS nevidím nedostatky, dá se v něm psát pseudo-OOP, nepracuje se s ním jako request-response, ale stále čeká na událost, kterou vykoná. V neposlední řadě je jeho předností RYCHLOST a client-side procesování. Někdo mě tady pobavil s komentářem, že CoffeeScript a TypeScript jsou důkaz že se v JS nedá psát, bohužel se tyto ‚jazyky‘ kompilují z5 do JS, tak WTF :D . Ok, JS jako takovýmu chybí typovost, interfaces, private a protected metody atd. takže tento problém TS řeší. A pak tu je jeden mocný nástroj zvaný Google Closure Compiler, který nahradí metodu (proměnný, atd.) za pár znaků a statickou analýzou vám projede kód a na základě anotacích udělá za vás to samý co TS. S advanced compilation váš skript je mnohem menší a ke klientovi se přenese rychleji. A jinak je super, že se vám JS nelíbí, vystředí se aspoň lidi, kteří podstatu JS nechápají a programátorům (né kodérům :D ) JS zvyšujete platové ohodnocení :)

Ivan Nový

A to je ono, aby se aplikace dobře udržovaly, je třeba odstranit práci s domem. Html skrýt do objektů UI knihovny a vůbec s ním nepracovat. Pak se dá zajistit to, že při ladění se budou do generovaného HTML vkládat informace s odkazy na místa, kde se příslušný kód, který to HTML generoval, nachází. Není nic horšího, než když kvůli přidání jednoho slova do stránky jste nucen prohledávat desítky zdrojových souborů a hledat, kde se to vlastně generuje. Oddělení HTML od aplikace pomocí knihovny pak umožní, aby generovaný HTML byl multiplatformní. A právě toto lze udělat pomocí Dartu.

Mirek

To jsem si už taky všimnul, že čím horší jazyk nebo platforma, tím lepší sociální jistoty včetně jistoty dobrého platu za malé výsledky pro programátory. Je otázka, jestli je to přínos pro sw firmu jako takovou.

stanislav.vasko

Když se rodí nový jazyk, zvažuje se asi spousta věcí. Nad čím se opět nikdo nezamyslel, je jak „dobře“ se píší různé znaky. Opět peklo s přepínáním klávesnic, dostupností znaků atd… Snad jednou někdo bude mít sílu tupě neopisovat a nebude nutné vše dohánět editorem.

vaclav.sir

Právě naopak. Pokud někdo vyvíjí prakticky v kterémkoli současném jazyce, tak už má přístup ke všem těm znakům dávno vyřešený. Nejčastěji anglickou klávesnicí (globálně). Já osobně ale nedám dopustit na Czech Qwerty.

stanislav.vasko

Programovat na Czech Qwerty beru jako sebemrskačství a smekám nad Vaší trpelivostí si na to zvyknout a pak to používat.

vaclav.sir

Nechápu proč. Mám k dispozici všechny české znaky i všechny „programátorské“ znaky, aniž bych musel přepínat klávesnici.

Pokud jde o zvykání (to už je hodně dávno), dost pomáhá fakt, že všechny ty znaky najdu přesně tam, kde jsou na fyzické klávesnici namalované. Hledám třeba ampersand, kouknu na klávesnici, najdu ho u sedmičky a napíšu ho AltGr-7. A když někdy náhodou sedím u cizího stroje, tak na anglické klávesnici taky všechno najdu dost rychle, protože je to na stejném místě (jen s jinými modifikátory).

Naopak za sebemrskačství považuji používání standardní české klávesnice (qwertz) a vrchol je přepínání mezi touto a anglickou. I tím jsem si kdysi prošel, než jsem objevil Czech Qwerty a už bych se nevracel.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.