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 - BoneFlute

Stran: 1 ... 126 127 [128] 129 130 ... 133
1906
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 01:28:37 »
Protoze vykonava nejakou cinnost.
Protože nic nezaručuje? (Pure funkce je schopná zaručit, že nebudou porušeny principy FP, zatímco IOMonáda toto zaručit nemůže.)
Teď ti nerozumím. Nebo nevím, čemu říkáš "pure funkce". Pokud pod "pure funkce" myslíš "matematická funkce", tak ta opravdu podle mě nemůže vykonávat žádnou činnost. Jak už jsem říkal, matematická funkce je relace.

Např. můžeš mít funkci {{1,2},{2,3},{3,4},{4,5},...} - tahle funkce NEpřičítá jedničku. Jenom říká, že symboly "1" a "2" jsou v relaci "přičtení jedničky" (chceme-li "relace následník").

K tomu, aby byla vykonávána nějaká činnost, musí existovat nějaký stroj, "výkonný mechanismus" apod., který něco od někud načte, něco někam zapíše apod. Jasně, může to dělat podle nějakého popisu, postupu, klidně i té relace, ale potřebuje mít k tomu popisu nějakou sémantiku, nějak ten popis interpretovat.

...takže třeba ta otázka, jestli tenhle celý cirkus "umožňuje souběhy" je podle mýho (možná špatnýho) dojmu otázka po vlastnostech toho "stroje", ne toho statického popisu ("relace").

Jak jsem už psal, na Prologu je to vidět imho líp - představ si, že bys měl nějaký čistě deklarativní logický jazyk ve stylu Prologu a dva různé inferenční enginy ("runtimy"), které by oba šly směrem k řešení jinou cestou - "funkce" v programu by pak byly stejné, ale běh programu by byl v těch dvou případech jiný. Tohle je u deklarativních jazyků v principu možný. Samozřejmě je to nežádoucí, takže se jazyk vymyslí tak, aby měl sémantiku jednoznačnou - což je podobný jako princip té monády, která je takový trik, který ti umožňuje zafixovat něco, co by jinak zafixované nebylo.

(Nevylučuju, že jsem ti jenom špatně rozuměl, nebo se v něčem mýlím. Za doplnění/upřesnění budu rád.)
Myslím, že se na to díváme podobně. Já jen tak explicitně neodděluji předpis od jeho vykonání.

Jak jsem psal na jiném místě, beru to tak, že Haskell jako jazyk/předpis, je funkcionálně čistý. A to dokonce včetně IOMonád. Je to předpis, jak něco nějak vykonat atd... přesně jak jsi to pěkně popsal.
A pak máš engine, ať už interpret, nebo kompilátor, který se snaží ten předpis zpracovat. A ideální by bylo, aby se ten engine choval přesně podle toho předpisu. Takže:
1. Mám funkci sum :: Int -> Int -> Int, která mi sečte dvě čísla. A já logicky očekávám, že ten engine mi pro  sum 1 1 vrátí 2ku. Ať si to vevnitř spočítá jak chce. Ať tam používá sdílenou paměť, ať ji mění, ať se třeba ptá google, to je mi fuk. Ale nesmí se stát, že mi vyhodí chybu. To prostě nejde.
2. Když budu mět funkci parseXml :: String -> Either String Xml tak já tam na první pohled mám možnost vyhodit chybu, jenže už na druhý je jasné, že pokud uvedu parseXml "<empty/>", tak mi to vždycky hodí Right Xml. Takže tam není nic na výběr. Ten výběr je jen pro programátora, aby se mu s tím lépe pracovalo.
3. A teď, když budu mět funkci openFile :: FilePath -> IOMode -> IO Handle, tak na první pohled se chová jako můj druhý příklad. Jenže ve skutečnosti já nikdy nevím, kterou z těch dvou možností (otevře soubor | zařve) udělá. A to mě přijde jako dost velký rozdíl.

Ano, uvědomuji si, že to nejsou úplně skvělé příklady, ale až mě napadne lepší, tak ho sem strčím.

1907
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 01:05:48 »
IO Monáda umožní souběh. To ti nepřijde jako porušení referenční transparentnosti?
Monáda právě souběh (pochopil jsem jako více "vláken" výpočtu) neumožňuje. Je tam právě kvůli vynucení sekvenčního zpracování. Více vláken je v Haskellu udělané tak, že je monáda obejita. Respektive je vytvořen ještě jeden IO objekt, který o tom prvním nic neví. Dokud nezavoláš některou z funkcí, která tu monádu obchází, monáda ti garantuje že k souběhu nedojde.

U IO v Haskellu není ta referenční transparentnost omezená funkcemi jako spíš jejich vstupem.
Heleďte, tak jinak: krom jiných nepopiratelných krás, nám funkcionální paradigma přináší snadnou implementaci paralelních výpočtů. Odvážil bych se prohlásit, že je to často ta primární motivace. Pokud ale do toho zamícháte IOMonády, tak opouštíte sluníčkový svět. IOMonády si s paralelizmem nekamarádí (ne, že by to nešlo), nepočítají s tím, a nepomůžou. Nepřijde vám to divný?

Abych zase nebyl nepochopen. Já chápu, že side efekty se blbě zakomponovávají do FP. Chápu, že se to musí nějak udělat. A nemám problém mět dva oddělené světy, jeden sluníčkový, a druhý s těma efektama. Ale tak nějak vám mám pocit, že těmi IOMonádami se to propojení fakt nepovedlo. Původně, ještě když jsem s Haskellem začínal, tak jsem měl za to, že IOMonády nějak zabalují interakci s tím vnějším zlým světem, tak, aby s tím mohl sluníčkový pracovat. Teď mám dojem, že je to naopak jezinka, která skrze dva prstíčky se infiltruje a zničí spolehlivost sluníčkového světa. Že ta izolace je teoretická, a v praxi to kompilátoři nezvládají.

1908
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 00:54:11 »
IO Monáda umožní souběh.

To s vhodnou interpretací umožní libovolný matematický objekt - třeba číslo 1.
No tak předpokládám, že to chceme implementovat tak aby to nešlo, ne aby to šlo.

1909
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 04. 07. 2015, 22:40:31 »
Protože nic nezaručuje? (Pure funkce je schopná zaručit, že nebudou porušeny principy FP, zatímco IOMonáda toto zaručit nemůže.)
Ale IO monáda nepořušuje žádné principy FP. IO monáda je jen obal funkcí co berou jako parametr celý svět a vracejí ho upravený. Ty funkce, co upravují svět, nemají žádné vedlejší efekty. Ta úprava světa proběhne přesně ve stylu matematicky definovaných funkcí.

Pořád tady mluvíš o porušování nějakých pricipů FP. Žádné principy porušené nejsou. Který princip je podle tebe porušený? Jediný rozdíl mezi IO a zbytkem světa je v tom, že v IO jsi součástí návratové hodnoty :P
Vím jak monáda funguje. To netřeba opakovat.

IO Monáda umožní souběh. To ti nepřijde jako porušení referenční transparentnosti?

1910
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 04. 07. 2015, 19:30:38 »
proč IO není?
Protoze vykonava nejakou cinnost.
Protože nic nezaručuje? (Pure funkce je schopná zaručit, že nebudou porušeny principy FP, zatímco IOMonáda toto zaručit nemůže.)

1911
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 04. 07. 2015, 19:27:42 »
Napsáno je to silně zjednodušeně, podstata je že k těm nepříjemným věcem jako RC dochází mimo vesmír celého funkcionálního cirkusu. Tudíž FP nemá možnost jak to ovlivnit nebo vyřešit.
Zjednodušeně buď budete hrát podle pravidel okolního světa a máte s FP problém, nebo si FP program spustíte v oddělené virtuální mašině kde si vytvoříte sluníčkový svět bez nebezpečných věcí a nemáte problém :)
Nevím, zda si všichni tak docela uvědomují, že vlastně všechny známé FP jazyky mají problém i s tím vlastním sluníčkovým světem. Jak jsme si tu dokázali v předchozích příspěvcích. To jen takovej malej rejp.

Nevím, na co přesně narážíš, ale mně přijde (konkrétně u Haskellu, který se tu probíral zleva i zprava), že ty problémy jsou vlastně všechny dány tím, že výpočet neprobíhá ve sluníčkovém světě.

No asi takhle. Když se řekne, že použitím unsafePerformIO a spol opouštím sluníčkoví svět FP, tak fajn. Jenže už se neřeklo, že opuštění sluníčkového světa stačí použít IOMonády. To překvapí. Vyvolává to totiž dojem, že právě proto je to do té monády zabalené, aby se to vytklo, a výpočet se prováděl mimo sluníčkový svět, a ten vnitřní sluníčkový tím nebyl poznamenán. Což se ale neděje. (Ve skutečnosti je to do monády zabalené jen kůli pořadí vykonání. A o riziku soubězích ve více vláknech se nemluví.)

1912
Vývoj / Re:Párové programování
« kdy: 02. 07. 2015, 18:12:23 »
Ludska povaha je ze jeden bude "drbat" druheho, lebo ho predtym "drbal" on....
V praxi to tak nefunguje. (Pokud se teda párové programování dělá dobrovolně a ne befelem.)

1913
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 18:04:12 »
Jak to myslíš, že se to dá obejít? V rámci jedné aplikace se v jednom vlákně otevře soubor jako UT, a v jiném vlákně si ho otevřu taky? No tak to je mi ten UT dost k ničemu, když mám dvě reference na to samé. (Považuji to za dvě stejné reference, protože je to jen obálka nad tím souborem. Jak si systém zajistí, aby to tak bylo, už je implementační detail.)
Z pohledu typového systému jsou to dva objekty, co nemají nic společného (krom toho že to jsou soubory). Jakékoliv typování (nebo pravidla obecně) brání jen do určité míry. Kdo ho chce obejít, cestu si najde. Mimochodem třeba u souborů nemá program občas šanci poznat, že je to stejný soubor. Otevře dva a netuší jestli jeden není třeba symlink/hardlink/whatever. Tohle není jen záležitost funkcionálních jazyků. Podobné věci padají v diskuzích třeba o "#pragma once" v C.
Bavíme se doufám o tom stejném, přístupu k souboru z jedné aplikace (ale třeba ve více vláknech), a zanedbání vnějšího vlivu?

V takovém případě k čemu to UT je, když nedělá ani takovou typickou věc?

1914
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 13:57:13 »
Napsáno je to silně zjednodušeně, podstata je že k těm nepříjemným věcem jako RC dochází mimo vesmír celého funkcionálního cirkusu. Tudíž FP nemá možnost jak to ovlivnit nebo vyřešit.
Zjednodušeně buď budete hrát podle pravidel okolního světa a máte s FP problém, nebo si FP program spustíte v oddělené virtuální mašině kde si vytvoříte sluníčkový svět bez nebezpečných věcí a nemáte problém :)
Nevím, zda si všichni tak docela uvědomují, že vlastně všechny známé FP jazyky mají problém i s tím vlastním sluníčkovým světem. Jak jsme si tu dokázali v předchozích příspěvcích. To jen takovej malej rejp.

1915
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 02:00:46 »
Jenže čumila jsem pochopil tak, že i když to runtime dělá side effecty, tak nemusí ustupovat až tak daleko, že bude umožňovat i race conditions (přeci jenom, side-efect je užitečný, zatímco race conditions vůbec).
No to je zajímavá otázka - jestli by šlo nějak zabezpečit, aby jazyk předal runtimu zaručeně jenom takové instrukce, které by zaručeně nevedly k race condition. Pokud myslíš RC obecně (síť, paměť, disk, čekání na zprávy...) tak si to fakt neumím představit :)
Já mám na mysli jen ty v rámci daného runtime/programu. Obecný si taky nedovedu představit.


Třeba chytré hlavy už něco vymyslely, akorát to zas bude mít nějaké jiné neblahé praktické důsledky ;)
Vo tom nepochybuji.

1916
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 01:42:38 »
Ať nad tím dumám jak dumám, vychází mi z toho, že to právě race conditions vylučuje.
Když dumáš "uvnitř" toho jazyka, tak vylučuje - ale zároveň nemůže nijak ovlivnit okolní svět, což není moc praktické :)

čumil to napsal docela dobře: matematická funkce ti dům nepostaví. (udělá to za ni nějaký "runtime")
Jenže čumila jsem pochopil tak, že i když to runtime dělá side effecty, tak nemusí ustupovat až tak daleko, že bude umožňovat i race conditions (přeci jenom, side-efect je užitečný, zatímco race conditions vůbec). Proto uváděl další implementace řešení FP: uniqueness typing (rozumím jakžtakž), FRP (nerozumím vůbec).

1917
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 01:34:11 »
Přesněji při interpretaci popisu, co vyleze z čistého funkcionálního programu, mohou vznikat race conditions.
Tohle dilema už jsme snad uzavřeli ;-)

1918
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 01:31:33 »
Samozřejmě že to není jedno v okamžiku, kdy zvažuješ, že se ten jazyk naučíš.
Záleží, jaký máš cíl. Ten Erlang je třeba z hlediska čistě akademickýho celkem nezajímavej hnůj, ale z hlediska použití je to prostě paráda :) Je na tom dost poznat, že chtěli vyvinout jazyk pro dobré řešení konkrétních průmyslových úloh - a dělali na tom lidi, kteří fakt nejsou hloupí a (až na drobnosti) zvolili parádní kompromisy, který do sebe zapadají jak zadek na nočník :)
Spíše jsem to myslel tak, že když řekneš: "Erlang je z akademického hlediska hnůj, ale z praktického hlediska paráda" tak k tomu tak budu přistupovat a nebudu zklamanej. Když se řekne, že "Erlang je snadnej, programuje se sním skoro samo a umí vařit kafe" tak budu mírně naprdlej, když po letech usilovného studia a třech nedodělaných aplikacích si musím kafe furt vařit sám.

1919
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 01:24:26 »
každý výraz můžete nahradit jeho hodnotou aniž by se chování programu změnilo

Ať nad tím dumám jak dumám, vychází mi z toho, že to právě race conditions vylučuje.

1920
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 01:12:26 »
Dokonce jakoby funkcionální paradigma byl ideál, kterého se všemožné jazyky pokoušejí dosáhnout, a když už jsou na devadesáti procentech, tak se označují za pure :-)
Ty, teďka čistě přízemně a prakticky: a není to jedno?
Samozřejmě že v praxi je to jedno. Samozřejmě že to není jedno v okamžiku, kdy zvažuješ, že se ten jazyk naučíš.

Popravdě řečeno mi ten čumilův přístup přijde poněkud (až značně ;) ) autistickej :)
Může bejt, ale dozvěděl jsem se spousta zajímavejch věcí.

Stran: 1 ... 126 127 [128] 129 130 ... 133