Dart je mrtev… nebo není?

Zajímalo by mě, jestli programovací jazyky můžou mít něco jako “near death experience”. Před kompilátorem vám proběhnou všechny vaše commity, už vidíte světlo na konci repozitáře, když tu náhle vás někdo chytne za středník a stáhne zpátky.
Nálepky:
V posledním půl roce jsem se do Dartu hodně opřel. AngularDart jsem si vybral jako optimální nástroj pro tvorbu UI administrací k našim cloudovým backendům (představujte si CMS). Většině vývojářů, kteří se mnou o Dartu mluví, se ten jazyk líbí. Ale vždy padá v podstatě stejný dotaz (cituji doslovně):
Dart je tu už nějaký pátek, proč není více známý/rozšířený… je tu nějaký háček, nebo přímo hák? Nějak jsem nic moc nenašel, kromě toho, že nemá velkou komunitu, což je ale následek a nějak mi uniká ta příčina.
Tak si skočte pro popcorn, já vám to všechno povím. Je to taková sada PR přehmatů a nešťastných okolností. Berte to jako těžce subjektivní pohled, nejsou to data, která by bylo v mé moci obstarat a žádné insider informace nemám :-)
Dart VM do každého prohlížeče
Nevím jestli si vzpomínáte, ale úplně v počátcích Google hlásal, že Dart VM bude v každém prohlížeči. Já tedy nevím, jestli tomu opravdu věřili, ale kdo by donutil Microsoft nebo Apple, aby to udělali? Tomu se přece ani věřit nedalo. Ale když se v tom směru nic nedělo a samotný Chrome nad tím mávl rukou, pro spoustu vývojářů to znamenalo: “Aha, tak to je po Dartu”. Že má fenomenální compiler do JS, to už v tom šumu zaniklo.
Angular 2 – TypeScript
Další rána přišla také přímo z Google. Angular tým se rozhodl Angular 2 vyvíjet primárně v TypeScriptu. Nás Dartisty chlácholili, že je to proto, že z TypeScriptu se jim bude lépe generovat Dart verze než opačným směrem. Ale když ani sám Google na Dart nesází, pak logicky: “Aha, tak to je po Dartu”.
Rostoucí popularita JavaScriptu
Když v roce 2009 vyšel Node.js a rozvířil zatuchlé server side programování, nakopnul i popularitu JavaScriptu. Nakonec, proč byste se měli učit víc jazyků, když vám stačí jeden a ještě dostanete izomorfní aplikaci v ceně? Připočtěte k tomu nulovou vstupní bariéru (nemusíte si instalovat vůbec nic) a už to jede.
Nakonec se i ti nejzarytější staticky typovaní Javisti zlomí a začnou v JavaScriptu psát, protože nemají alternativu. Dart je mrtvý, to ví každý. (A pak skřípou zuby, že this není this, ale spíš whatever).
Funkcionální programování
Nejde ani o funkcionální programování, ale spíš o to, že se rozšířil takový… názor, že JavaScript je dobrý funkcionální jazyk, takže pokud jsem in, píšu v JavaScriptu. Dart je objektový – takže mrtvý. Ale to už jsou opravdu jablka a hrušky… Dart je funkcionální stejně jako JavaScript. Můžete napsat komplexní aplikaci bez toho, že byste napsali jediný objekt, ale Clojure to není. Ale to není ani JavaScript.
Na jazyku nezáleží
“Hele mladej, pokud seš dobrej, můžeš psát v čemkoliv. Na jazyku nezáleží. Óóóómmmmm …” Nevím, který guru to řekl první, ale není to pravda. Tady máte hřebík, tady kleště a teď ho sem zatlučte. Óóóómmmmm… Na nástroji záleží, ne že ne.
Takže… je Dart mrtvý?
Neo: Am I dead?
Morpheus: Far from it.
(Matrix)
Přiznám se bez mučení, že na přelomu 2015 a 2016 jsem už měl docela nahnáno. Angular 2 v TypeScriptu, o Polymer Dart se staral jeden člověk a že bych si chtěl všechno psát sám od píky jen pro Dartovy modrý letky, to asi ne. Naštěstí byl rok 2016 natřískaný pozitivními zprávami.
Angular 2 pro Dart se oddělil a jako AngularDart se vydal po vlastní ose. Teď mám k dispozici mainstreamový frontend framework – nativně, v Dartu. O JavaScript nemusím zavadit (ano, jsem zarytý, staticky typovaný Javista).
Vedle toho začal Google intenzivně vyvíjet platformově nezávislý framework pro tvorbu mobilních aplikací. A není to nějaký okrajový projekt, dělá na tom dost lidí. To nevypadá jako “předsmrtná křeč”. Mimochodem – co je tohle za potvůrku? A proč má UI v Dartu?
Hodně se zlepšila interoperabilita s JavaScriptem. Pokud má vaše vytoužená JS knihovna TypeScript definici, můžete si snadno vygenerovat adaptér pro Dart. A pokud nemá, nebo není definice dostatečně přesná, můžete si adaptér napsat v ruce (jako to udělala Jana Moudrá pro Firebase).
Ale především – Google přepsal AdWords a AdSense. Zahodil (většinu) GWT a nahradil to AngularDartem. Teď tečou Dartem miliardy dolarů a Dart aplikace v podstatě dotují (skoro) všechno ostatní co Google dělá. A taková aplikace není něco, s čím se dá bezhlavě experimentovat.
Takže nakonec – jestli Dart “žije” nebo ne, na tom už vlastně nezáleží. Jasně, že bych byl rád, kdyby byla v ČR větší komunita a měl jsem to s kým probrat u piva. Ale o budoucnost Dartu se už neobávám. Vypadá to, že ještě chvíli žít bude.
A vy – zarytí, staticky typovaní Javisti, ano vy, se svými Wickety, Vaadiny a GWTčky – pořád ještě můžete naskočit, použitelná alternativa JavaScriptu existuje, nenechte si namluvit, že ne. Zdart!
Bohužel, prvotní nadšení -> zabiják bastlsktiptu vystřídalo vystřízlivění. To že ho používá autor, tedy google, bych viděl jako základ. Ale tam to asi tak skončilo nebo se nějaké pozitivní zprávy, v tomto smyslu, ztratily v éteru.
A proč vystřízlivění? Neumí něco? Nebo dělá něco blbě?
Tak nebylo myšleno. Napsal jsem to nedobře. Naopak, jako jazyk se mi Dart líbí velmi. Nicméně jsem čekal že se strhne lavina projektů. Firmy budou Dartaře hledat, požadovat. Velké a zajímavé frameworky se začnou reimplementovat v Dartu apod.
Čekal jsem, že google začne Dart citelněji tlačit a Dart začně bastlkript vytlačovat. Byl jsem lehce naivní, zázrak se nestal.
Naděje umírá poslední.
Tak vytlačení JavaScritu se čekat nedá. A JavaScript má svoje nezastupitelné místo … vznikl jako jednoduchý jazyk pro skriptování webu a to taky je. Když budu dělat malý web a budu potřebovat rozhýbat menu, no tak tam strčím třeba jQuery. A když bude trochu větší a bude tam pár formulářů, tak to možná bude Angular JS.
Ale když to bude projekt, na kterým pracujeme ve více lidech, každou chvíli se bude refaktorovat, zpřehledňovat a čistit a budou to desítky obrazovek – tak to bude v Dartu a v ničem jiném.
Co dělá většina je irelevatní. Většina například zvolila prezidenta.
Když jsem viděl možnosti typovaného psaní, z mého pohledu čitelnější a pevnější syntaxe, zaradoval jsem se.
Bohužel můj pokus o použití skončil špatně, asi jsem někde něco přehlédl, ale jednoduchý testovací prográmek (funkčně odpovídající použití JQuery – manipulace s DOM) běžel v dartiu skvěle, ale po překladu (všechny nástroje ve výchozí konfiguraci) do JS a spuštění v chrome na mne vychlil chyby a nefungoval. Zkoumat chyby v přeloženém JS se mi opravdu nechtělo a po několika stejně dopadnuvších pokusech jsem se pokorně vrátil k netypovanému JS…
Bohužel…
Možná někdy v dřívějších dobách? Bylo by škoda přijít o načatou dušičku! Pošlete mi to, podívám se kde je zakopaný pes. Hrníček už mám připravený … t@fnx.io
Bohužel, přes prvopočáteční nadšení – zabiják bastlskriptu – se zázrak nekoná. Veliká škoda. Uvidíme jak dopadne webassembly.
takze ak niekto zatlka hrebik spravne kladivom tak potrebuje dalsieho typka ktory to vie s kliestami?
inak povedane, na nastroji naozaj zalezi, je vzdy na skodu veci ako clovek vie jeden jediny jazyk a snazi sa ho aplikovat univerzalne na kazdu ulohu…
Aha, tak takhle jsem to nemyslel. Například na serveru mám Javu a Dart tam v dohledné době cpát nebudu. Taky by mi to nic nepřineslo. Pokud umíte ovládat kladivo, kleště a ještě i nůžky na papír, je to pochopitelně lepší.
Tady jsme podle mě v situaci, kdy je člověk co má kladivo a guru mu řekne: „Hezký kladivo, ale měl bys to zvládnout čímkoliv.“.
Takovéto články mi vždy připomenou všechny ty projekty napsané v ruby, protože vznikaly na podzim 2005 a to bylo zrovna ruby on rails strašně in. Dneska je ovšem ta výhoda, že když ústřední evangelista se zbylými dvěma členy místní komunity odlétne budovat nový hype, tak se dá projekt transpilovat do javascriptu :-)
Toto je doba která masochistům přeje.
Dart podle me podkopava Javascriptova revoluce z roku 2015.
Javascript se z bastlu stal skvelym jazykem.
A React je dalsi revoluce – par genialnich napadu a razem je zabava psat frontend.
A diky Flow a modularite ty typy uz taky moc nechybi.
Je fakt, ze v Dartu jsem (krome helloworldu) nic nenapsal.., ale ono uz me prave ani nic nenuti…
Kdy že se stal z bastlu skvělým jazykem? Já jestli mi něco neuniko.
Asi uniklo – EcmaScript 2015
https://babeljs.io/learn-es2015/
Tak zrovna reactu jsem vůbec na chuť nepřišel…
Pochybuju, ze by v pripade Angularu 2 o neco Dart prisel. Google se totiz v tomto pripade nepoucil z konkurence a nezvladl vyrobit neco snadno pouzitelneho. A vlna nabozenstvi jako u Angular.js uz neprijde.
Já Dart sleduji už dlouhou, ale ačkoli určitě neumře jak se zdálo okolo roku 2015, proti Javascript světu nemá moc co nabídnout. Argument o Javistech zvyklých na statické typování přecházejících z GWT pro velké projekty neobstojí, od toho je tu Typescript, případně Flow od Facebooku a pak spoustu dalších (Kotlin, Ceylon, Haxe), které cílí také na velké projekty ale navíc ještě umožňují full stack vývoj včetně backendu na serveru. Dart VM bohužel v oblasti server side jednoznačně nestíhá a server side Dartu není pro Google priorita, nedávno to jasně řekli, takže Dart je v podstatě opravdu jen pro frontend.
Na frontendu existuje v podstatě jen AngularDart což je proti tomu co máme k dispozici v JS/TS je dost málo.
Uvidíme jak to dopadne s tím novým mobilním OS, to by mohlo být jediné, co by mohlo Dart trochu nakopnout, Flutter vypadá dobře. Ale bude to určitě ještě trvat, už takhle jim to trvá okolo 2 let a zatím je to pořád ve stadiu alfa.
Musím se ohradit proti tomu TypeScriptu – to je pořád JavaScript. Řekněme nalakovaný na růžovo, ale pořád má stejné neduhy.
A k AngularDart – to je řekněme oficiální frontend framework od G, ale to neznamená, že jiné nejsou: https://pub.dartlang.org/packages/over_react
Ad Typescript, ano, ale ta vrstva „přelakování“ je tak dostatečná že to povětšinou postačuje k tomu aby to vyhovělo těm, co jim chybí typová kontrola a další vlastnosti, které compiler Typescriptu zajistí. Ostatně právě ten Angular je v napsaný v Typescriptu, což je tedy opravdu paradox, jak jste sám zmínil.
Ad. jiné frameworky pro Dart – ano pár jich je, zrovna ten react vypadá pěkně, ale je to pořád žalostně málo proti tomu, co je k dispozici v JS potažmo v TS a nepřímo z toho plyne další věc. Dělat wrappery pro nativní JS knihovny pro Dart není nic extra pohodlného ve srovnání třeba s tím Typescriptem, viz. třeba ta zmíněná firebase. Pro Typescript stačí napsat typové definice, aby jste to měl s pohodlím typové kontroly, ale obejdete se i bez nich.
Dart je fajn, ale jak jsem řekl – na full stack nestačí – slabá podpora od Google, na frontend kromě Angularu také žádná sláva. Takže za mě Dart pokud chci Angular, nebo pokud jsem dobrý i v JS a budu si psát různé wrappery. Pak také pokud jsem fanda Google a pokud věřím budoucnosti Flutteru pro mobilní aplikace, potažmo tomu jejich mikrokernel OS.
… a nebo pokud jsem zarytý, staticky typovaný javista :-)
Ale v podstatě máte pravdu, nechci tu něco lámat přes koleno. Takže pokud:
… měl bych se nad Dartem zamyslet. Naopak:
… no tak pochopitelně, co bych dělal v Dartu, že jo.
Mam rad striktne typove funkcionalne jazyky… ale prave na frontende mi to pride ako zbytocna komplikacia navyse. Pouzival som nejaky cas aj TS, ale nakoniec som sa vratil k babelu… Tie typy su tam ajtak dolepene len tak aby sa nepovedalo. Keby to malo normalnu type inference a nemusel som tam tie typy pisat rucne tak budiz, ale takto mi to pride len ako obmedzovanie slobody. Dart som neskusal, mozno sa nan niekedy pozriem, ale ak sa to paci javistom tak to asi nebude moja salka kavy :D
Zarytej Javista nikdy nemůže psát dobrý JavaScript kód. A nepomůžou tomu ani přelakované jazyky typu Dart nebo TypeScript. A nazývat JS bastlskript je další způsob, jak se zaseknout a neporozumět totuto velmi specifickému jazyku ;)
Pro začátek vám tedy doporučuji shlédnout video „Zen of JavaScript“, které u mě navždy změnilo přístup k tomuto jazyku: https://www.youtube.com/watch?v=QHs55-5FzgA
Nemá smysl spekulovat, jestli je doopravdy už mrtvý, nebo se daří jej stále ještě resuscitovat. Pro mne jako potencionálního uživatele je rozhodující, co mi to přinese. A ať se koukám kamkoliv, moc toho nevidím.
Pro typický frontend jazyk je důležitá podpora knihoven a velikost komunity. Že v tom Google napsal Adwords mne zas tolik nezajímá. Takže asi začnu hledat nějaký awesome list. Pohled na tento je dost žalostný. A to tam ještě nejvíc položek má sekce server. Navíc ve mně okamžitě vzklíčí podezření, že se na něj dostalo všechno, co splnilo alespoň elementární požadavky.
Z obecného hlediska je zajímavé porovnat Dart a Go. Oba vznikly v Google zhruba v podobnou dobu. Oba vznikly primárně pro vnitřní potřebu. Dá se říci, že pro rozšíření Dartu má Google větší páky (podíl Chrome na trhu), přesto se Dart mimo Google moc nerozšířil a v současnosti živoří. Paradoxně Go se v určitém segmentu významně ujalo a dnešním marketingovým nástrojem Go jsou z velké většiny projekty nemající s Googlem nic společného. Dokud Dart nezíská nějakého velkého propagátora mimo Google, tak se podle mne situace nezlepší. A od Androidu bych moc neočekával, pro Android lze dnes vyvíjet v čemkoliv. A pokud by to Google chtěl omezit jen na Dart, tak by se to rovnalo sebevraždě.
Uz jsem se tu nakecal dost, ale ještě tedy čistě ze zájmu … Píšete o podpoře knihoven – řekněte 3 knihovny, které byste potřeboval. Skutečně, upřímně, 3 knihovny které víte že byste chtěl použít, když byste nějaký větší frontend vyvíjel. (A chápu, že to není pointa vašeho komentáře.)
Díky!
Pro upřesnění, proti Dartu nic nemám a nemám rád komentáře typu v jazyku X mi chybí vlastnosti Y a Z z jazyka W. Tak ať používá jazyk W a je spokojený. :)
Takže pokud bych měl zmínit nějaké knihovny, tak by mi určitě chyběly věci pro grafy, explicitně pak D3. V databázi jsem našel několik pokusů (jednotky), zpravidla 1-2 roky staré a typicky ve verzích 0.0.1. Jediné, co asi stojí za řeč je googlovský adaptér pro charted, ale i tam je napsáno, že je spravován jen lehce. Pokud se proti tomu podívám na tu linkovanou kolekci TypeScript definic, pro D3 a její submoduly je tam 43 balíků definic a nic staršího než 2 měsíce.
Jestli si můžu na závěr zaspekulovat :), jak už někdo zmínil přede mnou, ES2015 a následující rozšíření značně změnily svět Javascriptu. Potřeba hledat něco jiného dramaticky klesla (kde je dnes CoffeeScript). Javascript (případně TypeScript) je svébytný jazyk a tak je k němu potřeba přistupovat. Chápu, že to ne každému vyhovuje, zvláště s faktickým monopolem Javascriptu na frontendu. Ale dokud tady nebude rozumně použitelné a podporované Webassembly, není podle mne moc prostoru pro nějakou další revoluci.
Mě Dart svět přinesl produktivitu a radost z vývoje v porovnání se světem Javascriptu, Javy (hlavně 7-) a dokonce i Scaly. Většina věcí mi v Dartu funguje na první dobrou, nemusím skoro nic konfigurovat, knihovny se mi dobře používají, dependency management pěkný, development cyklus ok…a padesát dalších dobrých věcí co jsem zapomněl, Nedělal jsem v Dartu zatím nic velkého, ale na co jsem šáhl na frontend nebo i backend straně tak prostě fičelo a používalo se hezky – snad s výjimkou Isolates (paralelismus), ty drhly.
Možná bude autora zajímat, že podle tohoto průzkumu uživatelů SO Dart skoro nikdo nepoužívá, skoro nikdo nechce a z těch co v tom píší, tak ho většina nemá ráda. Vypadá to, že je s ním něco špatně.
http://stackoverflow.com/insights/survey/2017/#most-loved-dreaded-and-wanted