Funkcionální programátor

čumil

Re:Funkcionální programátor
« Odpověď #60 kdy: 29. 06. 2015, 16:00:10 »
Uniqueness typing.

nemám nastudováno, pokusím se to napravit

A ještě jedna metoda. Využívá lazy evaluation. Prostě jako vstup vezmeme nekonečný list zpráv, a program posílá běhovému prostědí nekonečný list odpovědí. Hezké, ale žádný jazyk to dosud nevyzkoušel, lze ale na tento nápad narazit na internetu když člověk hledá.
myslím, že jsem na to narazil v sekci 7 paperu "History of Haskell: Being Lazy With Class", zmiňuje i Uniqueness typing

za sebe bych řekl, že Haskell je "pure", nemonadické funkce čisté jsou, monadické funkce dávají stejný výsledek ve stejném "prostředí" a se stejnými argumenty
Monády nejsou "nečisté". To je taky jedna z mýlek. Pouze IO monáda. Koukni se na metody které jsem napsal, a pak si zkus udělat race condition v Haskellu (a použij IORef, MVar a TVar mají atomický zamykání a právě FP zamykat díky svým vlastnostem nepotřebuje), řekl bych, že brzo to pure odmažeš.


Kolemjdoucí

Re:Funkcionální programátor
« Odpověď #61 kdy: 29. 06. 2015, 16:02:36 »

Tohle Vám nepomůže, prostě se v tom zjevně neorientujete, základní definice neovládáte.

čumil

Re:Funkcionální programátor
« Odpověď #62 kdy: 29. 06. 2015, 16:03:39 »
D O P R D E L E
Ve FP nemůže být race condition, když jsou všechny data persistentní, a žádná funkce nemá side efekty kurva už !!!

Race condition mohu dělat i pomocí data Write = Write Int - stačí vzít vhodný interpretr, co při interpretaci Write 1 a Write 2 udělá race condition. Samotné Write 1 však žádný vedlejší efekt nedělá. Haskell je podobný - IO žádný vedlejší efekt nedělá, dělá to až jakýsi interpretr - ale k němu nemáte v jazyce přístup - v tom je celý vtip.
V tom není vtip, je to k pláči. S neexistujícícm interpretrem si di tam kam slunce nesvítí ... :(

čumil

Re:Funkcionální programátor
« Odpověď #63 kdy: 29. 06. 2015, 16:07:16 »
Tak, a až si to dočteš, odpověz mi na jednu maličkatou otázku. Funkcionální jazyk neumožňuje race condition. Souhlasíš s mým tvrzením?

Nesouhlasím, IMO vůbec to s tím nesouvisí.
Naneštěstí souvisí. Promiň, ale nechápeš o co vlastně ve FP jde. Další diskuze je bohužel s tebou nemožna :(

D O P R D E L E
Ve FP nemůže být race condition, když jsou všechny data persistentní, a žádná funkce nemá side efekty kurva už !!!

A Haskell ? Pomocí "čistého" IO se dělá race condition jedna báseň ...

který systém vstupu/výstupu zamezuje vzniku race condition? IMHO to nelze
Lze, alespoň co se týče paměti ano.

čumil

Re:Funkcionální programátor
« Odpověď #64 kdy: 29. 06. 2015, 16:10:57 »
D O P R D E L E
Ve FP nemůže být race condition, když jsou všechny data persistentní, a žádná funkce nemá side efekty kurva už !!!

Race condition mohu dělat i pomocí data Write = Write Int - stačí vzít vhodný interpretr, co při interpretaci Write 1 a Write 2 udělá race condition. Samotné Write 1 však žádný vedlejší efekt nedělá. Haskell je podobný - IO žádný vedlejší efekt nedělá, dělá to až jakýsi interpretr - ale k němu nemáte v jazyce přístup - v tom je celý vtip.
V tom není vtip, je to k pláči. S neexistujícícm interpretrem si di tam kam slunce nesvítí ... :(
S prvním tvrzením souhlasím, díky správnému interpretru je možné udělat race condition všude (ale proboha proč ... ?), trošku to ale nesouvisí s tématem ...


v

Re:Funkcionální programátor
« Odpověď #65 kdy: 29. 06. 2015, 16:20:57 »
Tak, a až si to dočteš, odpověz mi na jednu maličkatou otázku. Funkcionální jazyk neumožňuje race condition. Souhlasíš s mým tvrzením?

Nesouhlasím, IMO vůbec to s tím nesouvisí.
Naneštěstí souvisí. Promiň, ale nechápeš o co vlastně ve FP jde. Další diskuze je bohužel s tebou nemožna :(

D O P R D E L E
Ve FP nemůže být race condition, když jsou všechny data persistentní, a žádná funkce nemá side efekty kurva už !!!

A Haskell ? Pomocí "čistého" IO se dělá race condition jedna báseň ...

který systém vstupu/výstupu zamezuje vzniku race condition? IMHO to nelze
Lze, alespoň co se týče paměti ano.

1) "Clean" je neskutečně idiotský název pro cokoliv a pro programovací jazyk zvláště a neomlouvá ani to, že tenkrát ještě google nebyl
2) nezbytnou ingrediencí pro race condition je souběžnost vykonávání programů, má ten Clean vlákna?
3) příklad z https://en.wikipedia.org/wiki/Uniqueness_type mi přijde ekvivalentní s IO monádou, ve které se ovšem "prostředí" předá implicitně a "doImperativeReadLineSystemCall" zcela jistě pure není

JSH

Re:Funkcionální programátor
« Odpověď #66 kdy: 29. 06. 2015, 16:31:38 »
D O P R D E L E
Ve FP nemůže být race condition, když jsou všechny data persistentní, a žádná funkce nemá side efekty kurva už !!!
No nevím. Když se kouknu kolem sebe tak vidím tří zadeke neperzistentních dat, které je třeba modifikovat. Takže co mám na výběr?
1) LALALA Svět je sluníčkový!!! ...
2) Řešit reálné problémy.

A IO monád mi umožňuje interagovat s nesluníčkovým světem a přitom tu interakci omezit na nutné minimum. Pokud vedlejší efekty vyšoupnu ven z jazyka, pak je budu muset řešit něčím mimo jazyk. Ale budu je muset řešit.

čumil

Re:Funkcionální programátor
« Odpověď #67 kdy: 29. 06. 2015, 16:32:52 »
Tak, a až si to dočteš, odpověz mi na jednu maličkatou otázku. Funkcionální jazyk neumožňuje race condition. Souhlasíš s mým tvrzením?

Nesouhlasím, IMO vůbec to s tím nesouvisí.
Naneštěstí souvisí. Promiň, ale nechápeš o co vlastně ve FP jde. Další diskuze je bohužel s tebou nemožna :(

D O P R D E L E
Ve FP nemůže být race condition, když jsou všechny data persistentní, a žádná funkce nemá side efekty kurva už !!!

A Haskell ? Pomocí "čistého" IO se dělá race condition jedna báseň ...

který systém vstupu/výstupu zamezuje vzniku race condition? IMHO to nelze
Lze, alespoň co se týče paměti ano.

1) "Clean" je neskutečně idiotský název pro cokoliv a pro programovací jazyk zvláště a neomlouvá ani to, že tenkrát ještě google nebyl
2) nezbytnou ingrediencí pro race condition je souběžnost vykonávání programů, má ten Clean vlákna?
3) příklad z https://en.wikipedia.org/wiki/Uniqueness_type mi přijde ekvivalentní s IO monádou, ve které se ovšem "prostředí" předá implicitně a "doImperativeReadLineSystemCall" zcela jistě pure není
Jo, jméno má blbý. Souhlas.

Netuším, protože Clean nemá pořádnou standardní knihovnu, externí knihovny a všechny vlastnosti má jen na windows, tak jsem jen prostudoval syntaxi. Je to prostě zanedbaný jazyk.

Jednou si přečíst wiki stránku (a náhodou přeskočit první větu která ozřejmuje proč to vlastně funguje a jakou to má nevýhodu), a nekouknout se jak to vlastně funguje v nějakém jazyce je k ničemu. Napřed prosím plně pochop princip, a pak o něm diskutuj. Normálně bych začal vysvětlovat jak vlastně uniqueness typing funguje ALE, ne už jsem unavený, už jsem mockrát něco vysvětloval jen pro to aby to druhá strana vůbec nepřečetla a ani se nad tím nezamyslela.

čumil

Re:Funkcionální programátor
« Odpověď #68 kdy: 29. 06. 2015, 16:36:45 »
D O P R D E L E
Ve FP nemůže být race condition, když jsou všechny data persistentní, a žádná funkce nemá side efekty kurva už !!!
No nevím. Když se kouknu kolem sebe tak vidím tří zadeke neperzistentních dat, které je třeba modifikovat. Takže co mám na výběr?
1) LALALA Svět je sluníčkový!!! ...
2) Řešit reálné problémy.

A IO monád mi umožňuje interagovat s nesluníčkovým světem a přitom tu interakci omezit na nutné minimum. Pokud vedlejší efekty vyšoupnu ven z jazyka, pak je budu muset řešit něčím mimo jazyk. Ale budu je muset řešit.
Jo, svět není sluníčkový, zvláště teď mám extra silný pocti tý nesluníčkovosti.

Co máš na výběr? Třeba přestat ignorovat co píšu a kouknout se na metody IO bez ztráty čistoty.

Jo, máš pravdu, pokud je vyšoupneš z jazyka, budeš je muset řešit něčím jiným. I to je cesta.

JSH

Re:Funkcionální programátor
« Odpověď #69 kdy: 29. 06. 2015, 16:39:16 »
Lze, alespoň co se týče paměti ano.
A co všechny ostatní věci? Soubory, sockety, ostatní procesy, vzdálené stroje, ...? Paměť je skoro to nejjednodušší.

v

Re:Funkcionální programátor
« Odpověď #70 kdy: 29. 06. 2015, 16:48:23 »
Jednou si přečíst wiki stránku (a náhodou přeskočit první větu která ozřejmuje proč to vlastně funguje a jakou to má nevýhodu), a nekouknout se jak to vlastně funguje v nějakém jazyce je k ničemu. Napřed prosím plně pochop princip, a pak o něm diskutuj. Normálně bych začal vysvětlovat jak vlastně uniqueness typing funguje ALE, ne už jsem unavený, už jsem mockrát něco vysvětloval jen pro to aby to druhá strana vůbec nepřečetla a ani se nad tím nezamyslela.

jo, možná nechápu
tvrdím, že jazyk s uniqness typing (dle examplu z wiki) je stejně "pure-dle čumila" jako jazyk s haskellovskou IO monádou, můžete to vyvráti?

Jann

Re:Funkcionální programátor
« Odpověď #71 kdy: 29. 06. 2015, 16:49:17 »

Tohle Vám nepomůže, prostě se v tom zjevně neorientujete, základní definice neovládáte.

 :D :D :D
Že by nějaký učitýlek z ostravské sorbony nebo něčeho v tom stylu?  :)
No, dívejme se na to pozitivně – místo odsuzování za to, že jste absolutně nepochopil pojem „zpráva” v objektově orientovaném jazyce a pod tím pojmem si dovedete představit jen zprávu IPC, buďme rádi, že se tu nehádáte o to, že zpráva je přeci to, co píšete do mobilu.  :D

Tím bych to ze své strany uzavřel a doporučil Vám nějakou učebnici úplných základů objektově orientovaného programování, nejlépe od nějakého autora z prostředí otců-zakladatelů toho pojmu. Spaciálně bych si dal pozor na tituly českých autorů, protože mám někdy pocit, že čím méně toho dotyčný o dané problematice ví, tím větší má nutkání o tom psát knihy nebo aspoň skripta. A papír snese vše, jak známo.

howgh

čumil

Re:Funkcionální programátor
« Odpověď #72 kdy: 29. 06. 2015, 16:51:31 »
Lze, alespoň co se týče paměti ano.
A co všechny ostatní věci? Soubory, sockety, ostatní procesy, vzdálené stroje, ...? Paměť je skoro to nejjednodušší.
... prosím, přečti si něco o těch metodách co jsem napsal, pochop je, zamysli se nad nimi, a pak zjistíš, že tato otázka a vlastně všechny v tomto vlákně jsou jasné.

čumil

Re:Funkcionální programátor
« Odpověď #73 kdy: 29. 06. 2015, 17:05:21 »
Jednou si přečíst wiki stránku (a náhodou přeskočit první větu která ozřejmuje proč to vlastně funguje a jakou to má nevýhodu), a nekouknout se jak to vlastně funguje v nějakém jazyce je k ničemu. Napřed prosím plně pochop princip, a pak o něm diskutuj. Normálně bych začal vysvětlovat jak vlastně uniqueness typing funguje ALE, ne už jsem unavený, už jsem mockrát něco vysvětloval jen pro to aby to druhá strana vůbec nepřečetla a ani se nad tím nezamyslela.

jo, možná nechápu
tvrdím, že jazyk s uniqness typing (dle examplu z wiki) je stejně "pure-dle čumila" jako jazyk s haskellovskou IO monádou, můžete to vyvráti?
Jo ... můžu.

Ve zkratce. Uniqueness typing přidává do hry parametr času, není to moc vidět ale je to tak. V Haskellu parametr času není. Takže. Pokud máme objekt svět, pak v Haskellu nad tím jedním jedním objektem svět můžeme zavolat plno IO funkcí v různých vláknech, ty funkce vrátí svoje nové objekty svět a tak dál. Ve výsledku máme strašně moc objektů svět v jednu chvíli, a v různých vláknech. A tadá, race condition a nečistota.

A uniqueness typing? Kdyby sis pořádně přečetl tu wiki, už by ti to bylo jasný. Uniqueness objekt může mít za svůj život pouze jednu jedinou referenci na sebe. Takže, máme li objekt world, pak operace IO bere tento objekt world, a vrací nový, ale ten starý není možné použit více, reference se po jednom použití stala neplatnou, protože kdyby ne, začalo by na objekt ukazovat více referencí. Tím je zajištěna čistota, protože poté i IO funkce se stejnými argumenty vrátí stejný výsledek opakovaně, představ si to jako stroj času :). Nevýhoda je, že IO je možno realizovat pouze na jednom vlákně, a proto je mnohem lepší použít reaktivitu.

v

Re:Funkcionální programátor
« Odpověď #74 kdy: 29. 06. 2015, 17:16:41 »
Jo ... můžu.
Ve zkratce. Uniqueness typing přidává do hry parametr času, není to moc vidět ale je to tak. V Haskellu parametr času není. Takže. Pokud máme objekt svět, pak v Haskellu nad tím jedním jedním objektem svět můžeme zavolat plno IO funkcí v různých vláknech, ty funkce vrátí svoje nové objekty svět a tak dál. Ve výsledku máme strašně moc objektů svět v jednu chvíli, a v různých vláknech. A tadá, race condition a nečistota.

tak má Clean vlákna nebo nemá? je nesmyslné takto porovnávat jazyk s vlákny a bez nich

máme li objekt world, pak operace IO bere tento objekt world, a vrací nový, ale ten starý není možné použit více, reference se po jednom použití stala neplatnou, protože kdyby ne, začalo by na objekt ukazovat více referencí. Tím je zajištěna čistota, protože poté i IO funkce se stejnými argumenty vrátí stejný výsledek opakovaně
tohle je prakticky popis IO monády, po provední vstupu/výstupu je starý "svět" již nedostupný a tudíž ho neleze znovu "použít"