abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    31.5. 23:55 | Nová verze

    Byla vydána nová stabilní verze 24.05 linuxové distribuce NixOS (Wikipedie). Její kódové označení je Uakari. Podrobný přehled novinek v poznámkách k vydání. O balíčky se v NixOS stará správce balíčků Nix.

    Ladislav Hagara | Komentářů: 0
    31.5. 17:33 | Nová verze

    Byla vydána nová verze 1.48.0 sady nástrojů pro správu síťových připojení NetworkManager. Novinkám se v příspěvku na blogu NetworkManageru věnuje Fernando F. Mancera. Mimo jiné se v nastavení místo mac-address-blacklist nově používá mac-address-denylist.

    Ladislav Hagara | Komentářů: 16
    31.5. 17:11 | Komunita

    Před 25 lety, 31. května 1999, započal vývoj grafického editoru Krita (Wikipedie). Tenkrát ještě pod názvem KImageShop a později pod názvem Krayon.

    Ladislav Hagara | Komentářů: 3
    31.5. 12:55 | Nová verze

    Farid Abdelnour se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 24.05.0 editoru videa Kdenlive (Wikipedie). Ke stažení brzy také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    31.5. 11:22 | Zajímavý článek

    David Revoy, autor mj. komiksu Pepper&Carrot, se rozepsal o své aktuální grafické pracovní stanici: Debian 12 Bookworm, okenní systém X11, KDE Plasma 5.27, …

    Ladislav Hagara | Komentářů: 9
    30.5. 22:44 | Nová verze

    Wayland (Wikipedie) byl vydán ve verzi 1.23.0. Z novinek lze vypíchnout podporu OpenBSD.

    Ladislav Hagara | Komentářů: 0
    30.5. 21:22 | Zajímavý článek

    Craig Loewen na blogu Microsoftu představil novinky ve Windows Subsystému pro Linux (WSL). Vypíchnout lze GUI aplikaci pro nastavování WSL nebo správu WSL z Dev Home.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:44 | Pozvánky

    V sobotu 1. června lze navštívit Maker Faire Ostrava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    30.5. 12:22 | Nová verze

    Webový server Caddy (Wikipedie) s celou řadou zajímavých vlastností byl vydán ve verzi 2.8 (𝕏). Přehled novinek na GitHubu.

    Ladislav Hagara | Komentářů: 17
    29.5. 22:11 | Nová verze

    Byla vydána verze 3.0 (@, 𝕏) svobodného softwaru HAProxy (The Reliable, High Performance TCP/HTTP Load Balancer; Wikipedie) řešícího vysokou dostupnost, vyvažování zátěže a reverzní proxy. Detailní přehled novinek v příspěvku na blogu společnosti HAProxy Technologies.

    Ladislav Hagara | Komentářů: 7
    Rozcestník

    Proč JavaScript potřebuje kontinuace

    12.11.2010 02:06 | Přečteno: 1458×

    JavaScript si za dobu své existence nevydobyl zrovna nejlepší pověst a jen pozvolna se začíná prosazovat jako plnohodnotný samostatný programovací jazyk (viz projekty jako node.js). Existuje však celá řada důvodů, proč JavaScript začít brát vážně.

    Při pohledu na výsledky syntetických benchmarků (http://shootout.alioth.debian.org/u32/which-language-is-best.php#about) je zjevné, že válka mezi výrobci prohlížečů o co nejrychlejší engine pro JavaScript přináší konkrétní ovoce. Už dnes jsou implementace JavaScriptu rychlejší než u většiny nejpoužívanějších dynamicky typovaných jazyků a pokud se najdou ještě nějaké rezervy, což je při míře prostředků a energie, která se do tohoto výzkumu vynakládá, více než pravděpodobné, může se JavaScript začít používat i v oblastech, kde by to dříve bylo nemyslitelné.

    Už dnes existuje poměrně elegantní a jednoduchý způsob, jak s pomocí JavaScriptu docela snadno a rychle vytvořit multiplatformní desktopovou aplikaci s konvenčním vzhledem a chováním a přitom se nevzdát vymožeností, které přináší webový prohlížeč. Konkrétně například nechat zobrazit část aplikace pomocí HTML kódu či třeba pomocí SVG. Tou možností je použití XULRunneru od Mozilly, který v sobě integruje Gecko.

    Taková jednoduchá aplikace vypadá tak, že si vytvoříte základní adresářovou strukturu s metadaty, do ní vložte popis GUI pomocí značkovacího jazyka XUL a okořeníte nějakým tím JavaScriptem (https://developer.mozilla.org/en/getting_started_with_xulrunner). V kombinaci například s CouchDB, u které se díky použítí JSONu pro komunikaci s databází v podstatě můžete vyhnout nepříjemnostem s objektově-relačním mapováním, to tvoří lákavý základ pro řadu aplikací.

    Na rozdíl od běžných webových aplikací má lokální XULRunnerovská JavaScriptová aplikace řadu možností a bezpečnostních privilegií navíc. Může pomocí Ajaxu komunikovat s webovými servery v jiných doménách, spouštět lokální procesy (pomocí nsiProcess), pracovat s lokálními soubory, používat nativní souborové dialogy, otevírat nová samostatná okna, má bohatší možnosti v používání klávesových zkratek atd. Navíc XULRunner má v sobě integrován přímo Firefox, což znamená, že se můžete obejít bez jeho distribuce s prográmkem.

    Tahle varianta mě zaujala a řekl jsem si, že by nebylo špatné se zamyslet nad možností vytvořit si nějaký elegantní framework, který by tvorbu takových jednohubek usnadnil. Začal jsem tedy zvažovat, jaká architektura by se pro něj hodila. Hlavní potíž spočívá v tom, že stejně jako u webového prohlížeče je JavaScript zpracováván v jednom vlákně. To přijímá události od uživatele (např. stisknutí tlačítka), zpracuje kód, který je jim přidělen a poslouchá dále. Krom možnosti vyhodnotit daný kód po určitém čase (či asynchronního přijetí HTTP požadavku) programátor žádné možnosti nemá.

    To ale bohužel nestačí. Představte si situaci, kdy potřebujete vytvořit nějakého průvodce (wizzard), nějakou posloupnost formulářů. Teď trochu neférově pominame fakt, že XUL takovou komponentu definuje - zde mi jde o obecný problém.

    V elegantním frameworku byste předpokládali, že při otevření průvodce by byla definována metoda vypadající nějak takto:

    show(page1);
    show(page2);
    show(page3);

    Jenže to by předpokládalo, že metoda show() zobrazí nový formulář, ukončí provádění aktuálního kontextu, spustí nové přijímání a zpracovávání událostí a v případě, že jedna z nich by byla stisknutí tlačítka “next” na formuláři, předala by řízení zpět do této metody na místo, kde naposledy přestala.

    To by šlo provést tak, že při zavolání metody show() se zobrazí nový formulář, vytvoří se kontinuace a pomocí vyvolání výjimky se ukončí vykonávání tohoto úkolu a vlákno JavaScriptu přejde opět do režimu přijímání událostí. Při stisknutí tlačítka “next” by se obnovil aktuální kontext z uložené kontinuace a pokračuje se vesele dalším show().

    Bylo by to hezké, ale bohužel JavaScript kontinuace nemá a asi mít jen tak nebude. Přesněji řečeno, Rhino kontinuace má, jenže to je pro XULRunner aplikace jen pramalá útěcha. A autoři V8 o implementaci kontinuací vůbec neuvažují.

    Bohužel i ostatní možnosti, jak tento problém nějak vyřešit, Gecko úspěšně sabotuje. JavaScript není dostatečně reflektivní, aby měl tak bohatý přístup ke stacku, aby dokázal informace aktuálního stavu stacku uložit a zpětně rekonstruovat. I když se vzdáme přímo myšlenky použít kontinuace, které jsou pro tento případ stejně asi zbytečně komplexní, JavaScript nenabízí použitelné řešení. Nemá výjimky s návratem na místo vyvolání, nemá žádné uspání procesu atd. Mozilla sice umožňuje vytvářet nová vlákna (Worker), ale ta jsou silně oddělena a pro tento účel je nejde bohužel použít.

    Jediná zdánlivě použitelná varianta je použít uzávěr nad zbytkem metody po každém show, bohužel to selhává především na faktu, že takový uzávěr může ovlivnit pouze aktuální kontext a kontexty se tedy nesmí zanořovat.

    Bohužel nezbývá tedy než takovou aplikaci nechat plně řidit událostmi prostřednictvím nějakého MVC/MVP vzoru, kde se tok řízení aplikace ztrácí.

    Krom problémů s absencí kontinuací je ještě spousta jiných věcí, co by se daly JavaScriptu vytknout a většina z nich souvisí s tím, že pro tento jazyk byla zvolena C-like syntaxe. Oddělení výrazů od příkazů (a s tím např. související dvojí možnost zapsání alternativy), indexování od nuly u jazyka bez ukazatelů, naprosto příšerný základní cyklus for, poměrně ukecaný zápis uzávěrů atd.

    Navíc JavaScript trpí tím, že si v něm konkuruje několik přístupů, jak např. nahradit třídy, přičemž žádná z hlavních takto vzniklých knihoven není natolik obecná, že by předpokládala spouštění JavaScriptu bez vazby na prohlížeč. Samozřejmě nelze tvrdit, že taková konkurence je úplně špatná, ale život to komplikuje.

    Přes výhrady, které bych k JavaScriptu měl, nemyslím, že je to jazyk zavrženihodný. Ale i věkem je to puberťák kterému by neuškodilo dospět.

           

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    pavlix avatar 12.11.2010 04:50 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Proti javascriptovým aplikacím nic nemam (třeba nad Glib), ale XULu se snad radši vyhnu.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    mirec avatar 12.11.2010 07:47 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace

    Ja som kedysi na Javascript dosť nadával pretože som nerozumel ECMA-Script-u. S ECMA-Scriptom robím momentálne takmer denne a po tom, čo som začal chápať jeho filozofii sa mi zdá aj celkom fajn.

    Ćo sa týka samotného webového javascriptu ten pravdu povediac moc nemusím. Podľa mňa samotné prehliadače mali mať od začiatku niečo ako JS framework namiesto súčasných trápnych volaní ako insertHTML. V čistom JS bez frameworkov som istého času písal (a aj napísal) funkčného jabber klienta (ktorý bežal v Opere, IE >= 6, Gecko, Webkit, Konqueror >= 3.5). Ani si neviete predstaviť množstvo bugov v implementácii DOM.

    Ako užívateľ JS nemám rád, často surfujem z mobilu a 10s záseky na weboch používajúcich JS frameworky sa mi nepáčia. Hlavne keď väčšina vecí by sa dala poriešiť cez CSS. Zvyšok (dynamické prvky) cez JS, ale chcelo by to pridať do browserov niečo ako framework, aby nebolo potrebné linkovať obrovské na parsovanie náročné hrúzy.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    12.11.2010 09:42 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Podľa mňa samotné prehliadače mali mať od začiatku niečo ako JS framework
    IMHO by prohlížeče dneska měly povinně obsahovat posledních pár verzí jQuery, nějaký meta tag pro zvolení verze a nějaký fallback. Ale už za tuhle myšlenku mne místní XHTMListi nejspíš sežerou :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    pavlix avatar 12.11.2010 14:03 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Ja som kedysi na Javascript dosť nadával pretože som nerozumel ECMA-Script-u.
    Tak ono je to de facto to samý, že :). Ale teď, když už to znáš, tak je zbytečné ti připomínat rozlišení jazyka a objektového modelu.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    ________________ avatar 12.11.2010 18:03 ________________ | skóre: 5 | blog: _
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    JS je jednoduchý jazyk(jednoduchý jazyk pre jednoduchých ľudí), pre programátora rozmaznaného bohatými možnosťami moderných programovacích jazykov je jednoduchý až príliš (veď má cca 5 klúčových slov) a neposkytuje také možnosti ako ostatné mainstreamové jazyky, samozrejme dá sa to obchádzať rôznymi hackami, ale načo? A okrem toho to či je Javascript sám o sebe dobrý alebo zlý jazyk je v konečnom dôsledku nepodstatné, programovať sa dá v hocičom, dôležité sú knižnice a frameworky. Ale ako programátor webový-JS nemám rád. napriek tomu že som v ňom napísal už veľa aplikácií. V praxi trvá tvorba frontendu v JS / DOM (+ nejaký framework typu JQuery) 10x dlhšie ako tvorba porovnateľného GUI rozhrania napr. vo WPF alebo VCL, tým pádom aj cena aplikácie je 10x drahšia, a radosť z programovania nulová. Javascript je proste webový assembler...
    12.11.2010 08:37 Tomáš Pěnička
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Ono je to spíš tak, že JS je dobrý jazyk, ale propojení s webem (mám na mysli propojení s HTML) je, jak to slušně říct, poněkud nešťastné.
    Amarok avatar 12.11.2010 09:28 Amarok | skóre: 33 | blog: blogoblog
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Presne neco podobneho jsem chtel napsat. Ja mam uplnou hruzu neco opet delat v Javascriptu, protoze spoluprace s DOMem v HTML je nevyzpytatelne. Delal jsem jenom 1x trosku vetsi projekt, na kterem jsem se vlastne JS poprve trochu intenzivneji ucil a silel jsem chvilema z toho. Proste se napr. neukladal stav do parametru CSS tak, jak by mel, a prijit na takovou chybu bylo pekne casove narocne a stalo me to dost nervu. Cili se od te doby divam na JS jen z dalky a odmitam jakoukoliv dalsi praci s JS. Akorat tak jeste implementuju cizi kod, dovedu to nejak rozchodit (napr. slideshow), ale vic me uz nezajima.
    GNUniverse - May the source be with you...
    12.11.2010 09:50 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Nešťastné je, že se jeden skript nechová ve všech prohlížečích stejně.
    12.11.2010 10:02 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Jinak lidi od Node.js control flow docela řeší, viz třeba Step nebo Conductor, ale pro potřeby GUI to asi není použitelné. To přirovnání k puberťákovi je hluboká pravda :-)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    12.11.2010 10:10 sivlk | skóre: 15 | blog: sivlk
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Chcel by som varovat vsetkych ktory po precitani tohoto clanku zvazuju napisanie nejakeho projektu v XULe. Pred cca 2 rokmi som v nom napísal 2 mierne komplexnejsie aplikacie (remote xul, jeden TODO list a jednu skladovu aplikaciu) a dodnes toho lutujem. Viac zabugovany framework som v zivote nevidel. Cca 50% kodu tvorily rozne hacky a workaroundy. Cakanie na bugfixy, nutnost pouzivat devel verzie firefoxu. Ziaden alternativny klient, proste vendor lock-in. Nieco sa rozbilo pri kazdej novej verzii firefoxu. Navyse vysvetlite ludom ked chcu na to pristupovat z inernetu ze musia pouzit len firefox. Jednu z tych aplikacii som neskor za asi tyzden prepisal do html/css/ajax a bolo to neporovnatelne jednoduchsie. Takze pre mna XUL - uz nikdy viac.
    12.11.2010 15:57 Pavel Křivánek | skóre: 29 | blog: Kvičet nezávaznou konverzaci
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Dnes situace tak tragická není, ale stejně bych nikomu nedoporučoval pouštět se do remote XUL přes prohlížeč bez lokální podpory, to za to vážně nestojí. Bylo by fajn, kdyby se XULu chytil ještě třeba Google, pro jehož ChromeOS by se určitě hodil.
    I'm sure it crashed in the most type-safe way possible.
    pavlix avatar 15.11.2010 11:36 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    A ještě lepší by bylo, kdyby XUL něčím nahradil :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    12.11.2010 10:13 Karel
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Od HTML, CSS a javascriptu se snazim drzet nejdal co to jde...
    Saljack avatar 12.11.2010 13:36 Saljack | skóre: 28 | blog: Saljack | Praha
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Moje řeč ;-).
    Sex, Drugs & Rock´n Roll.
    Rezza avatar 12.11.2010 19:29 Rezza | skóre: 25 | blog: rezza | Brno
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    No kdyz neco takoveho delat v JavaScriptu - proc nepouzit Qt Quick (QML) s Qt State Machine? Bohuzel psani beznych aplikaci zatim omezuji rozdelane Qt Components (a tedy na bezne GUItko si clovek musi pomoci sam from scratch).
    mirec avatar 12.11.2010 20:14 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Robím komerčné veci s Qt Quick + Qt Script (alias ECMA script) + C++. Pre vývoj špecializovaných hračiek s dotykovým ovládanim si to neviem vynachváliť. Na desktope je to už o niečom inom, tam som jednoznačne za klasické aplikácie (teraz nechcem zavrhovať QML na desktope, na tvorbu nejakého vlastného efektného widgetu, ktorý sa nenachádza v Qt knižniciach napr. coverflow widget sa môže hodiť).
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Rezza avatar 12.11.2010 21:27 Rezza | skóre: 25 | blog: rezza | Brno
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    No Qt Components by to mely hodne zjednodusit i na desktopu. A pres Qt Scene Graph by to pak mohla byt hodne zajimava kombinace s tim, co by pak slo v aplikacich delat. Samozrejme dnes je to spis na ty dotykove specializovane hracky.
    mirec avatar 13.11.2010 08:28 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Poznám ten projekt a sledujem ho, ale zatiaľ keď potrebujem nejaký komponent podobný desktopovým widgetom tak si to radšej píšem sám, Qt Components sú ešte dosť nedokončené. Inak v bežných aplikáciách povedzme ako filemanager, správca nejakej databázy, download manager ... to asi uplatnenie nenájde. V prehrávači audio / video súborov by to už išlo, ale aj tam mám radšej klasické GUI, ktoré nevybočuje zo zaužívaného desktopového GUI. Tu by som skôr videl v možnosti pridať alternatívne GUI (vzhľadom na to, že Qt využíva MVC by nebolo až tak ťažké to urobiť) pre tablety / mobily.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    13.11.2010 22:21 open | skóre: 1
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    http://www.sencha.com/

    Amarok avatar 15.11.2010 08:25 Amarok | skóre: 33 | blog: blogoblog
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Mam to oznacit jako spam?
    GNUniverse - May the source be with you...
    15.11.2010 12:12 open | skóre: 1
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Aky je dovod ? Je to k teme ... a nemal som cas sa rozpisovat, takze len som pridal odkaz.
    pavlix avatar 15.11.2010 12:27 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Já v tvém příspěvku nic k tématu nevidím, jen odkaz na nějaký neznámý web bez uvedení jakéhokoli důvodu, proč by měl mít co společného s diskuzí.

    Je to typický příklad SPAMu, kdy se v diskuzi objeví pouhý odkaz bez jakékoli souvislosti (jestli cíl odkazu souvislost má, to už je jiná věc, samotný odkaz nemá).
    a nemal som cas sa rozpisovat
    Tak snad příště :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    15.11.2010 16:27 open | skóre: 1
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    Vyznam to ma v tom, ze po letmom prejdeni stranky na tom linku by ste objavil ExtJS (http://www.sencha.com/products/js/), ktory je JS Frameworkom a pani vyssie diskutovali aj o Frameworkoch.

    Ja som jeden cas tiez riesil XUL a problemy s nim, az sme na jednom projekte pouzili na odporucanie dodavatela ExtJS na GUI a mnoho problemov sa vyriesilo.

    Len tolko som tym odkazom chcel povedat.

    Ospravedlnujem sa za ONLY link, nabuduce radsej nic ako iba link ;)
    Josef Kufner avatar 15.11.2010 21:40 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Proč JavaScript potřebuje kontinuace
    V Qt Scriptu by se taková věc dala vyřešit takto:
    page1.accepted.connect(page2.exec);
    page2.accepted.connect(page3.exec);
    page3.accepted.connect(wizzard.mameHotovo);
    page1.exec();
    
    Co víc si přát?
    Hello world ! Segmentation fault (core dumped)

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.