Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Mirek Prýmek

Stran: 1 ... 61 62 [63] 64 65 ... 618
931
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 18:35:50 »
dokud budete šířit bludy, budu se vyjadřovat. Požádej admina, jestli ti tu tolik vadím.
Aha, tak uz tomu rozumim. To "AFAIK" jsi v te vete prehledl nebo nerozumis jejimu vyznamu? Nebo v cem je problem?

Za to doplneni dekuju, je to zajimavej mechanismus, prave jsem si to vyzkousel, funguje to, je to hezkej zpusob. Kazdopadne ale to neni neco, co bych kritizoval, nevim, jak jsi na to prisel.

932
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 18:22:19 »
když něco kritizuje, měl by to znát.
Mam pocit, ze si zase v necem nerozumime. Co presne mas pocit, ze kritizuju, a proc bych podle tebe mel znat implementacni detaily await v JS? S cim z toho, co jsem kde napsal, to ma souvislost? (Myslim ty otazky vazne, nejsou to zadne chytaky, fakt nerozumim tomu, kam miris)

933
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 17:25:48 »

934
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 17:13:09 »
Vážně, říkat korutinám vlákno (nebo špagát a jiná téměř synonyma) není dobrý nápad, kdo to nezná, představí si multithreading, přitom korutiny klidně můžou běžet v jednom vlákně (a taky často běží, na nějakém mini CPU pro IoT apod.). Odtud přesně plyne to zmatení okolo async/await, pak se div, že to BFL nechápe nebo chápe blbě.
Podle mě je tohle na tom právě to pěkný: programátorovi se to po všech stránkách jeví jako vlákno a měl by o tom i tak uvažovat, protože ta možnost, že to skutečně na různých vláknech poběží, tam je, resp. u dobrého systému je.

935
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 17:04:42 »
Tak tomu ale neříkej "vlákno", tím to zmateš ;)
Dobře, říkejme tomu "motouz" :)

936
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 16:41:35 »
protože je virální, jeden await vyžaduje async až do kořene stromu volání
Pro BoneFlute: K tomuhle fakt doporučuju ten článek https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/
- je trochu zbytečně dlouhej a jako haskellista poznáš, že vlastně jenom zbytečně zdlouhavě popisuje monády, ale problém vystihuje dobře. Await je prostě virální úplně stejně jako GPL nebo IO ;)

Polopaticky řečeno, když se vrátím k tomu odkazu z redditu výš, pokud chceš použít async, potřebuješ nutně jakýsi "jiný" sleep, "před který se dá napsat await" - funkci, která pod kapotou vrací promise. U řešení s oddělenými stacky (tady o tom píšu jako o "CSP") tenhle problém neexistuje. Prostě ve vlastním "vlákně" (greenthreadu, procesu, ...) spustíš úplně normální "synchronní" sleep, jako bys to udělal u starýho dobrýho multithreadingu.

937
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 14:20:15 »
No jenže Rust není Erlang ani Go, je to snaha přepsat C++ (nízkoúrovňový jazyk a jeho zero cost abstractions). Já jsem poměrně skálopevně přesvědčený, že autoři Rustu ty věci dělají tak dobře, jak je v jejich silách a vůbec si nemyslím, že by byli hloupí a nějaké zjevné lepší cesty k implementaci nějaké vlastnosti jim unikaly. Skoro mi přijde, že Ti je líto, že Rust je Rust a ne něco jiného
Vůbec ne, Rust se mi (nakolik ho teda neznám moc dobře) jeví jako ze všech jakž takž mainstream jazyků nejlepší. Vůbec neříkám, že jsou jeho autoři blbci, ani náhodou. Ale konkrétně u téhle věci prostě nechápu, proč šli touhle cestou. Že je Rust "přepis C++"? No a? To je Go taky a autoři zvolili ("rozvolněné") CSP.

Ty důvody, proč zvolili await, můžou být různé, klidně i netechnické - třeba to, že async/await prostě zná a chápe (ať už to znamená cokoli) víc lidí.

Nebo by důvod mohl být třeba ten, že async/await se asi dá implementovat tak, aby byl zaručeně korektní - protože má menší míru volnosti a tím i větší kontrolu nad tím, co se spustí kdy. U CSP (i toho "rozvolněného" ve stylu Go) si člověk musí víc lámat hlavu třeba s tím, v jakém okamžiku má kontexty přepínat. Rust moc neznám, tím míň nějaký jeho internals, takže třeba autoři došli k názoru, že se jim tohle prostě nechce řešit (nebo to dost dobře ani nejde). To nevím. Ale je mi to líto, že se vydali touhle cestou. Doteď totiž vybírali imho fakt nejlepší featury, často state of the art a tady imho vybrali featuru, která (imho) není ani nejlepší, má známé problémy, ani není state of the art.

938
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 13:29:35 »
V tom je ten vtip - Rust není magický jazyk, nedělá žádné legrácky typu GC a automatickou paralelizaci.
To je právě docela škoda, protože ta asynchronicita je pak tak trochu jenom šidítko... V praxi to má oproti sekvenčnímu kódu přínos velký, ale menší než by na dnešních multiprocesorových strojích mít mohlo. Model založený na CSP, který má Erlang (a do menší míry i Go) škáluje na multiprocesoru sám o sobě, bez potřeby jakékoliv magie a často fakt lineárně [1].

No a s tím sleepem a joinem je zrovna pár hodin starý dotaz a vysvětlení na Redditu: https://www.reddit.com/r/rust/comments/dtp6z7/what_can_i_actually_do_with_the_new_async_fn/
A je to tady! Tohle je bohužel úplně geniální ilustrace přesně toho, o čem jsem mluvil. Přesně tohle se mi stalo, když jsem poprvé zkoušel async v Pythonu: byv odchován systémy s oddělenými stacky, naběhl jsem si přesně stejně, protože mi vůbec nepřišlo na mysl, že v async/await světě tenhle červenomodrý[2] problém existuje - ze svého světa jsem ho vůbec neznal.

To si fakt, projednou, nedokážete připustit, že třeba někdo ví víc než Vy a má dobrý důvod do Rustu ten async/await přidat?
No, ehm, nalistuj si o dvě [EDIT: tři - [3]] stránky zpátky, kde jsem to explicitně připustil, takže to je dost bezpředmětné lamentování.

Dobrý důvod mít můžou. A já zas můžu mít subjektivní pocit, že to dělat neměli. Můžu se mýlit, to je samozřejmý. Ale ten dotaz výš mě utvrzuje v tom, že nejsem úplně mimo.

---

[1] http://www.dcs.gla.ac.uk/~trinder/papers/release-summary-arxiv-1.pdf - např. Figure 5
[2] https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/
[3] https://forum.root.cz/index.php?topic=22043.msg320027#msg320027

939
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 12:04:48 »
Koukám právě narvali async/await do Rustu. To je fakt mor.
To je smutný. Zrovna od Rustu bych čekal, že se omezí na CSP. Třeba vtáhne Actix do standardní knihovny nebo tak něco.

Rust pořádně neznám, takže neumím posoudit implementaci, ale pokud by to ve finále vedlo ke stejnýmu zmatku jako kdysi v Pythonu - pro každou knihovnu bude x verzí, jedna sync, jedna nad Actix, jedna nad Tokio a pak ještě jedna s async/await, přičemž každá jinak zabugovaná, tak by to byl teda fakt smutný příběh jinak moc pěkného jazyka...

940
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 11:26:08 »
To ale musíš mít žaludek na ty odpovědi, co z něj vylezou.
Právě, no. Proto bych si spolu s gillem (nebo kdo to říkal) netroufnul tvrdit, že "každý, kdo to používá, tomu rozumí" :)

941
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 11:22:16 »
Asi máš sníženou schopnost chápat psaný text, takže to pro tebe rozeberu: V tvé větě je "můžeš se HO zkusit zeptat" a to "ho" odkazuje na citovanou větu z předchozího příspěvku, kde se píše "Zkus se třeba náhodně vybraného webaře zeptat". Tedy kontext tvé věty je jasný: Web. Tam existuje jen jedno rozumně rozšířené běhové prostředí - Javascript - které je z definice jednovláknové, tedy tvoje otázka tam nedává smysl a na to jsem reagoval.

Už je to jasnější, nebo mám být ještě podrobnější?
Je mi to jasný celou dobu. Akorát jsi to pochopil jinak, než jsem to myslel. Myslel jsem tohle: chceš-li zjistit, jestli průměrný webař opravdu rozumí mechanismu async/await, zkus mu položit obecnou otázku [...]

942
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 11:20:00 »
Máš na mysli paralelní polling, něco jako https://docs.rs/futures/0.3.1/futures/macro.join.html ? Nebo něco komplikovanějšího? V téhle problematice nemám zkušenosti.
Napadají mě minimálně dva rozdílné způsoby, jak by se to dalo implementovat:

1. Promisy běží (potenciálně) skutečně paralelně, každý (potenciálně) na svém jádře

2. Promisy jsou odstartované "zaráz" (rychle po sobě), ale paralelně běží jenom operace "mimo jazyk" (typicky IO)

To první je asi jasný. To druhý je jenom "jakože paralelní" v JS stylu. Od serializovaných awaitů by se to poznalo tak, že
Kód: [Vybrat]
await sleep(1)
await sleep(1)
await sleep(1)
by netrvalo ~ tři sekundy, ale ~ jednu.

To druhé v JS jde implementovat, ale musí se to (AFAIK) udělat ručně přes Promise.all()

943
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 10:30:09 »
o async/await jsi zatím nic nenapsal, jen otázku
Aha, já jsem se spíš bál, že mi zas někdo vynadá, že vlákno o OOP plevelím debatou o await :) Tak jo, fajn :)

Citace
...anebo pokud bys měl o něm vysoké mínění, můžeš se ho zkusit zeptat, za jakých podmínek je podle něj bezpečné používat await v multivláknovém prostředí :)
na kterou jsi odpověděl
Citace
To je přece triviální: jakýkoliv kód, který by byl chybný i bez async.
To není odpověď na tuhle otázku. To je odpověď na tvoji otázku:

mohl bys ukázat příklad v tom jiném jazyku, kde je podle tebe await nebezpečné ve vícevláknovém prostředí? Bavili jsme se o await v JS.

...protože, jak víme, jestliže z podmínek A plyne ^B, tak pořád ještě nevíme, z čeho vyplývá B :)

---

Nicméně mám nepříjemný pocit, že ti nejde o diskusi ale jenom o tahání se za nohu. Nemám úplně zájem se na tom podílet...

944
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 10:16:05 »
To je implementační detail bez jakéhokoliv dopadu na cokoliv, co jsem napsal.
BTW, kdybys chtěl nějaký větší rozdíl, tak největší, co mě napadá, je že await může být lazy nebo eager. Jak teď koukám, Rust má lazy. JS má eager (AFAIK).

Taky by šlo promisy z awaitů paralelizovat (k tomu právě směřovala ta moje testovací otázka). Jestli to nějaký jazyk skutečně dělá, to nevím. Obávám se, že spíš ne, protože v jazyce s mutable shared state by to bylo obtížné až nemožné udělat korektně.

945
/dev/null / Re:Těžké OOP problémy
« kdy: 09. 11. 2019, 10:04:21 »
Await v JS akceptuje thenable objekty, narozdíl od await v Pythonu neakceptuje generátory.
To je implementační detail bez jakéhokoliv dopadu na cokoliv, co jsem napsal.

Stran: 1 ... 61 62 [63] 64 65 ... 618