Portál AbcLinuxu, 18. leden 2020 07:41


www.AutoDoc.Cz

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
Goheeca avatar 16.6.2015 14:09 Goheeca | skóre: 7
Rozbalit Rozbalit vše Re: Algebraické efekty
Odpovědět | Sbalit | Link | Blokovat | Admin
Zprvu jsem si myslel, že to není zapracovatelné do Haskellu a teď jsem naopak poznal k čemu jsou indexované monády.
16.6.2015 16:24 myself
Rozbalit Rozbalit vše Re: Algebraické efekty
Odpovědět | Sbalit | Link | Blokovat | Admin
Mnozi efektove, tisice slonu a kontinuace.

Seriously, s ludmi od funkcionalnych jazykov je nieco spatne. Len co si vymyslia pekne slovo continuation, musia ho nahradit skaredym slovom effect. Alebo som nieco nepobral?
16.6.2015 17:12 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Algebraické efekty
Len co si vymyslia pekne slovo continuation, musia ho nahradit skaredym slovom effect.
Algebraické efekty a kontinuace jsou dvě různé věci. V handleru jsme sice používali vymezené kontinuace, ale obecně lze mít jazyk s efekty bez handlerů (například měnitelný stav v mainstreamových jazycích) nebo mít handlery bez kontinuací (například handlery výjimek v mainstreamových jazycích).
18.6.2015 08:18 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Algebraické efekty
Odpovědět | Sbalit | Link | Blokovat | Admin
Místo toho, abychom time a print předávali pomocí parametrů, můžeme je uložit do globálních proměnných. Globální proměnné inicializujeme pomocí Unix.time a print_endline. Kdykoliv někdo bude chtít logovat jinam, změní hodnotu globální proměnné print a poté, co skončí, tak obnoví její původní hodnotu. Toto řešení bohužel nefunguje pro vícevláknový kód. .NET Framework to řeší použitím globálních proměnných indexovaných vláknem (thread local).
Co takhle mít jednu proměnnou pro všechny vlákna a přístup nějak ochránit proti race condition, třeba mutexem? Logování se typicky nevolá moc často a beztak je to typicky I/O operace, takže overhead zámku mi nepřijde jako problém...
18.6.2015 09:40 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Algebraické efekty
To nepomůže, když dva paralelní výpočty běžící v různých vláknech chtějí používat různé loggery, ne?
18.6.2015 10:11 kralyk z abclinuxu | skóre: 29 | blog:
Rozbalit Rozbalit vše Re: Algebraické efekty
Aha, to ne, no. V takovým případě bych dal těm výpočtům nějaký kontext (v klasických OOP jazycích by to byla nejspíš nějaká třída), jehož součástí by byly parametry logování.

Ty efekty se mi nelíbí v tom, že znepřehledňují control flow imho... Ale je to zajímavá věc, neznal jsem.
18.6.2015 21:03 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: Algebraické efekty
V takovým případě bych dal těm výpočtům nějaký kontext (v klasických OOP jazycích by to byla nejspíš nějaká třída)
Ano, to lze. Nicméně, pak je třeba vyřešit předávání (nebo nastavování) těch kontextů – například, když mám jeden výpočet a z něj zavolám druhý výpočet, tak aby ten druhý výpočet dostal správný kontext.
26.8.2015 00:00 tacoberu | skóre: 5
Rozbalit Rozbalit vše Re: Algebraické efekty
Odpovědět | Sbalit | Link | Blokovat | Admin
Stejně se sice chová Haskell a i další mainstreamové jazyky, jenže tam není paleta efektů tak široká. Například v Haskellu existuje jediný efekt – divergence.

Mohl by si se rozepsat, jaké další efekty (krom devergence) mohou existovat? Snažím se v tom zorientovat.

Díky za skvělej článek.

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.