tag:blogger.com,1999:blog-7247548023065923707.post7213762406431618579..comments2023-02-27T08:17:30.645-08:00Comments on com.v6ak.blog._: Jak zpracovávat chyby?Vít Šesták 'v6ak'http://www.blogger.com/profile/00811926727629990666noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-7247548023065923707.post-81202340612889574282022-04-01T06:45:48.845-07:002022-04-01T06:45:48.845-07:00Referenční transparentnost znamená, že referenci n...Referenční transparentnost znamená, že referenci na výpočet mohu transparentně nahradit novým výpočtem. Odtud je IMHO ten název. Takže souhlas s první větou.<br /><br />Ovšem referenčně transparentní ≠ bez side effectů. Referenční transparentnost může rozbít i jakékoliv čtení <br />mutable stavu. Máme tedy případy, kdy funkce bez side effectů není referenčně transparentní, třeba získání aktuálního času nebo velikosti souboru.<br /><br />Funkce sleep je poněkud speciální. Z aktuálního vlákna její výsledek by šel brát jako side effect z určité úrovně abstrakce (a v případě třeba sčítání ten side effect zanedbáme). Má ale speciální vlastnost – není přímo pozorovatelný z jiného vlákna ani procesu. (Ale tady by šlo zase debatovat o side effectech nad lokálníma proměnnýma…)Vít Šesták 'v6ak'https://www.blogger.com/profile/00811926727629990666noreply@blogger.comtag:blogger.com,1999:blog-7247548023065923707.post-36567066779695544942022-03-14T16:39:08.970-07:002022-03-14T16:39:08.970-07:00Referenční transparentnost lze dobře pochopit na ú...Referenční transparentnost lze dobře pochopit na úvaze, zda jde výpočet nahradit výsledkem. Pokud toto nejde, jedná se o side-effect.<br />S tou abstrakcí máš samozřejmě pravdu. Ale přesto, zatímco dumpy v debuggeru nejsou součástí logiky, čas u sleep je součástí logiky.<br />Tož tak,Tacohttps://www.blogger.com/profile/08055170389804517183noreply@blogger.comtag:blogger.com,1999:blog-7247548023065923707.post-73773777244787525202018-01-01T12:24:41.549-08:002018-01-01T12:24:41.549-08:00Omlouvám se za opožděnou reakci, trochu mi to zapa...Omlouvám se za opožděnou reakci, trochu mi to zapadlo.<br /><br />Dostáváme se do filozofické debaty. Side effects a referenční transparentnost je v praxi nutné brát s vhodnou abstrakcí (např. ignorovat čas, ignorovat dumpy z debuggeru, ignorovat teplo vygenerované procesorem, mít neomezenou paměť), jinak nám vyjde, že všude máme side effects nebo referenční netransparentnost…<br /><br />Sleep čas nemění, pouze trvá nějakou dobu. Ale každá funkce reálně trvá nějakou dobu, byť možná není tak přesně vymezená. Pokud bychom to považovali za side effect, bude mít každá funkce side effect.<br /><br />Sleep patří do kategorie funkcí, které čekají na nějaký stav. Nemá side effect (nedovedu odjinud zjistit, jestli byla volána). Pravda, trošku se mi rozšiřuje spektrum funkcí, kde má smysl nemít side effect ani návratovou hodnotu (mohu čekat i pode něčeho jiného než času). Článek bych mohl trošku upřesnit, ale jádro sdělení to měnit nebude.Vít Šesták 'v6ak'https://www.blogger.com/profile/00811926727629990666noreply@blogger.comtag:blogger.com,1999:blog-7247548023065923707.post-34325004281134158962017-08-30T04:37:16.654-07:002017-08-30T04:37:16.654-07:00"Výjimkou může být snad jen sleep." - sl..."Výjimkou může být snad jen sleep." - sleep má side-effect, mění stav - času.Tacohttps://www.blogger.com/profile/08055170389804517183noreply@blogger.com