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 ... 268 269 [270] 271 272 ... 618
4036
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 01:55:25 »
Takže si asi dokážeš představit, že mě moc netankuje když sice jazyk je pure, ale že kompilátor si dělá něco jiného je v pořádku.
Podle mě si úplně nerozumíme. Kompilátor/runtime si nedělá něco jiného. Dělá přesně to, co mu sémantika jazyka ukládá udělat. To ale nic nemění na tom, že pro jeden jazyk bys mohl mít sémantiku úplně jinou a pak by spuštění programu reálně způsobilo něco úplně jiného. To se myslím snažil Radek říct tím http://forum.root.cz/index.php?topic=11417.msg135027#msg135027

Jenže vlastnosti sémantiky ("runtimu") a vlastnosti jazyka jsou dvě různé věci. Typový systém je záležitostí jazyka. Souběhy a jejich důsledky jsou záležitostí sémantiky. Aspoň myslím teda ;)

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.
Nevím, jestli ti úplně rozumím. Zkusme si vzít raději operaci "načtení prvního bajtu ze souboru" a opět ji zapsat jako relaci... Jako máš [{1,2},{2,3},...] tak teď budeš mít jakoby navíc parametr "stav světa", který můžeš efektivně zúžit na "stav toho souboru, který mě zajímá", a dostaneš něco jako
Kód: [Vybrat]
[{"aaaa","a"},{"abbb","a"},{"baaa","b"},...]
kde ten jeden parametr je "faktický obsah souboru" a to druhý je výsledek fce "načti mi první byte".  Tohle je naprosto čistá fce. Žádná magie, žádný monády, nic. Zcela čistá matematická fce. Čili jazyk jako takový nemá problém.

Jenže když ten program budeš chtít spustit (pomocí nějakého toho "stroje", jak jsem to psal výš), tak ten stroj musí ten skutečný stav světa zjistit - provést nějakou činnost. Tu činnost nedělá jazyk, tu dělá runtime. Jazyk zná jenom tu relaci, což je čistě statická, naprosto pure záležitost :) kde o žádném "spuštění" nedává vůbec smysl hovořit.

4037
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 01:34:31 »
To sice ano, ale smysluplnost jazyka je o tom, zda jej lze interpretovat. Pokud to chcete uzavřít s tím, že Haskell je pure, ale nemáme pro něj pure kompilátor, tak fajn.
Purity je ale vlastnost JAZYKA, ničeho jinýho! V tomhle podle mě děláš v té úvaze chybu a zavádí tě to do nesmyslné* úvahy. Viz http://forum.root.cz/index.php?topic=11417.msg135038#msg135038

* to nemyslím pejorativně, rozumíme si doufám :)

4038
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 01:22:23 »
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ý?
Podle mě tam máš zbytečně silný předpoklad. Paralelizace se snadno implementuje tam, kde nemáš sdílený stav. To ale nutně neimplikuje úplně čisté funkce. Je víc možností. Stav může být sdílený jenom v rámci nějaké menší jednotky (a pak ty jednotky můžou fungovat paralelně vůči sobě, ale ne uvnitř), nebo se může komunikovat přes nějaká API, která paralelizaci umožní.

Na tohle je právě skvělý příklad Erlang - čistotu tam nemáš skoro žádnou a přitom paralelizovatelnost je víc než uspokojivá ;)

4039
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 01:17:10 »
Čistota jazyka nezávisí na tom, jak interpretujete výsledky programů.
Možná by se dala použít i takováhle alegorie: představme si, že čistý funkcionální program generuje céčkovský kód, který se poté spustí. To generování je jenom operace nad nějakou strukturou, takže to můžu bez problémů dělat čistě. A v tom céčkovském kódu už zase klíďopíďo můžu mít interakce s vnějším světem, vedlejší efekty, ...

Dalo by se to takhle říct? Já mám za to, že jo.

4040
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 05. 07. 2015, 00:51:41 »
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.)

4041
Studium a uplatnění / Re:Proč tolik matematiky?
« kdy: 04. 07. 2015, 23:24:57 »
Mimochodem, nevím, jestli jsi seznámen s děním v ČR, ale momentálně tady máme jednoho pana docenta entomologie, který pojal pocit, že by se měl extenzivně vyjadřovat ke společenským otázkám - a je to docela průser, řekl bych, že o dost větší než když někdo dokazuje nulovou hypotézu :)

4042
Studium a uplatnění / Re:Proč tolik matematiky?
« kdy: 04. 07. 2015, 23:14:45 »
Neviem, nakolko je to este sociologia.
Jistěže to je sociologie. Jedna z učebnic, které jsme používali, je vynikající knížka Miroslava Dismana https://www.kosmas.cz/knihy/105584/jak-se-vyrabi-sociologicka-znalost/  Disman byl sociolog (bohužel už zemřel).

Taky jsme třeba měli speciální povinný a dost důležitý předmět o tom, co je to věda, její metodologii, Kuhn, Popper, ... http://is.muni.cz/predmet/fss/jaro2015/SOC106 Na informatice jsem o nic takového nazavadil, natož povinně.

Samozřejmě k obojímu se přistupovalo víc "povídavě" než "matematicky", ale představa, že humanitní vědy jsou jenom nějaké bezbřehé plácání je předsudek. Jako všude, záleži to na lidech. Buď jsou chytří nebo hloupí, nic víc. Představa, že exaktní vědci jsou nějací uebermenschové a humanitní jsou humanitní, protože na víc nemají, je ubohá a kdokoli to zastává, usvědčuje sám sebe z pitomosti...

Kapitolou samou osebe je uz mnou parkrat pozorovany humanitny pristup, kde sa nahadzu do vzorcov uplne nesuvisejuce cisla a z tych sa potom robi statistika podla aktualnych trendov.
Dík za ty konkrétní příklady níž, ale musel bys je taky ozdrojovat, protože jinak ti můžu tak leda věřit, že jsi to pochopil správně a nebyla chyba na tvé straně...

V mediach prebehla informacia o tom, ze v strednej Europe su zeny diskriminovane ovela viac v porovnani so zapadom. Z matematickeho pohladu sa pouzila statistika na to, ci sa daju dve skupiny odlisit a tam im vysiel statisticky vyznamny rozdiel, takze zeny musia byt diskriminovane. Zistil som, ze skore vyslo tak preto, ze u nas zeny ziju o X rokov dlhsie. Keby sme ich strielali vo veku muzov, tak by sme boli na urovni tych vyspelych zapadnych krajin.
Tohle by právě chtělo ten link... Moc si neumím představit, jak by diskriminace měla souviset s délkou dožití.

Iny pripad som videl u studie spominanej istym hrdym gayom zo susedneho Linux portalu. Tam si "vyskumnici" gay adopcii volili alfa nejake extremne male (0.001), nepodarilo sa im vyvratit H_0 a tak v pohode napisali, ze je na 99,9% dokazane H_0.
To se jistě může stát. Chyby se najdou všude. Ovšem link by to taky chtělo.

Naproti tomu si myslim, ze kto raz absolvuje *teoreticku* statistiku na MFF a vie dokazat, ako funguje napriklad t-test, tak ten si z toho dokazu uvedomi vyznam p-hodnoty a zaroven si rozmysli dokazovanie H_0. Dokaz si asi do poslednej bodky nezapamata, ale to o H_0 mu zostane.
Tak to asi ano. Když se tomu věnuje celé studium, tak to asi umí líp než někdo jiný, na tom není nic zvláštního ani zajímavého :) To, co kritizuješ, funguje ale i v opačném gardu: jeden můj kamarád právník si u piva ztěžoval, že nejstrašnější je vyřizovat podání od inženýrů, protože ti mají prý často pocit, že rozumí všemu a nějakou právničinu zvládnou sami a je tragédie s nima pak komunikovat...

Stejně tak bysme se mohli posmívat matematikům, kteří nabyli dojem, že by byli bezvadní filosofové, a vymysleli krávoviny... Byl nejeden takový případ...

Prostě fušování do oborů, ve kterých se neorientuju, je obecně riziková záležitost, není to žádný specifikum humanitních vědců.

Mozno preto som tak zamerany proti humanitnym oborom, ak maju robit nieco s cislami.
Nepopírám, že to nebezpečí tam je. Pokud si jakýkoli vědec není s matikou jistý v kramflecích, má k tomu přizvat odborníka (statistika). Ale to není žádné specifikum humanitních věd, pro informatiky (a kohokoli jinýho) to platí taky.

4043
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 03. 07. 2015, 10:37:50 »
je obecná monáda "pure"?
Musel bys ten pojem presne definovat... "Uvnitr" jazyka asi ano, z pohledu zvnejsku ne - protoze nejak meni svet, coz, jak uz tady zaznelo, matematicka funkce nikdy nemuze...

proč IO není?
Protoze vykonava nejakou cinnost.

4044
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 22:21:37 »
Děkuji za odpověď. Takže pokud to správně chápu, IO monáda je impure.
Monády jsou určené k tomu, abys mohl řídit pořadí, ve kterém se něco provede. Jestli tomu chceš říkat "impure", je už na tobě ;)

4045
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 11:29:53 »
Cíle se dosáhnout dá, ale ne s prostředky jazyka. Nepěkné nepohodlné věci se vystrčí ven z jazyka a komunikuje se s nimi přes nějaké rozhraní.
Jenze mezi tou "vystrcenou veci" a jazykem muze byt nejake mapovani, stejne jako u toho silneho typovani. Typovani je vlastne jenom ciste abstraktni vec a presto mi zarucuje nejake zalezitosti "vne jazyka".

Rozdíl je jen v tom kdo si to již přiznal a kdo dosud ne :)
Tak ja myslim, ze jsme tady o tom vsichni mluvili otevrene, ze Haskell vytvori nejaky predpis, ktery uz se provadi vlastne mimo samotny jazyk. Nevsiml jsem si, ze by to tady nekdo zastiral nebo nechapal.

4046
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 10:28:36 »
V Erlangu se proto nevedou diskuze, všichni vidí jak se věci mají ;)
No ale ten erlangovský přístup je právě příkladem, jak se dá dosáhnout atomicity*, takže je to v rozporu s tím, co píšeš výš.

* samozřejmě ne takové té superkorektní jako u databází - s rollbackem apod., ale to neva

4047
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 09:55:48 »
co třeba Software transactional memory?
v Haskellu ve formě STM monády, velmi příjemná záležitost
To by asi mohlo být ono. V Erlangu se zas na to jde tak, že pokud je nějaký prostředek, který neumí konkurenci sám o sobě, tak se mu přiřadí řídící proces (erlangovský light proces), ostatní procesy jenom posílají zprávy a dostávají odpovědi, takže je to celý korektně serializovaný jenom díky tomu, jak probíhá štosování zpráv... Jelikož je posílání zpráv dostatečně rychlý, funguje to taky dobře. Jenže pak jsou "čisté" jenom ty procesy uvnitř, ne program jako celek, takže čumil by nad tím určitě ohrnoval nos ;)

4048
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 09:29:19 »
To si dokážu představit zcela jasně, za předpokladu runtime v jednovláknovém OS, jako třeba MS-DOS. V současných OS ne.
Já si to dovedu (mlhavě) představit i v současných OS - klasické řešení je provádět citlivé operace atomicky nebo zamykat. Otázka zní, jak by to šlo dobře dohromady s tím FP jako takovým, jestli takové věci jdou dělat formálně (dokazatelně) správně, jak moc by takový program šel optimalizovat... Otázky, otázky, samé otázky :)))

Potom není od věci připomenout si, že celý počítač je matematická funkce CPU zapsaná v booleově algebře, provádějící miliardkrát za sekundu přechod state := CPU(state) kde state je asi 20 000 bitů. Automaticky z toho vyplývá odpověď na problematiku race condition a proč to funkcionální programování nikdy nemůže vyřešit.
Mně tam ta automatičnost nějak nevyvstává, už proto, že takhle napsáno je to "jednovláknová" věc, kde k RC dojít nemůže :)

Klíčový na tom všem je to odlišení jazyka jako takového a úrovně běhu (sémantiky, runtimu) - a jestli když si vymyslím, že bych chtěl dosáhnout nějaké vlastnosti běhu, tak jak dobře (a korektně) se to dá "mapovat" do jazyka... Třeba silný typový systém jazyka mi garantuje, že runtime nebude hledat v paměti něco, co tam není. Třeba by nějaký podobný fígl šel použít i na ty RC...

4049
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 09:12:17 »
V Dartu to jsou ještě kovariantní generika - typový systém povolí kontravarianci, ale za běhu to spadne. Například
Jasně, už to chápu. Prostě tam není syntaxe pro specifikaci variance a přijímá se, že to případně zbuchne až v provozu :)

V tom odkazu o Dartu se to píše docela bez obalu:
Citace
We don’t consider any of these ways in current use to be suitable for a language meant to be approachable, and whose type annotations are meant to be simple, lightweight, and optional. Really very few programmers of any kind find it natural or easy to write variance annotations or wildcarding (I don’t myself).
Citace

Čili "nechceme vyděsit JavaScriptisty" ;) Chápu, ale moc velký sympatie to ve mně teda nevyvolává :)

4050
Studium a uplatnění / Re:Funkcionální programátor
« kdy: 02. 07. 2015, 09:00:43 »
To je svět, který je úplně mimo dosah matematické funkce a proto snaha "smířit" reálný svět se světem čistě funkcionálním tak, jak by se Ti asi líbilo, není vůbec možné.
Mě včera napadlo, že možná není od věci si připomenout základ: matematická funkce není žádný "výpočet" nebo "operace". Matematická funkce je relace. Je to statická záležitost, tabulka vazeb parametry - výsledek. Matematická funkce se nedá "spustit", nemůže provést žádnou operaci, výpočet. Asi líp než u Haskellu je to vidět u Prologu, kde je program vlastně úplně statická záležitost (v tomhle popsaným smyslu), teprve inferenční engine je to, co "běží", co z programu dělá nějaký proces. A pokud chce člověk inferenční engine donutit k nějaké konkrétní posloupnosti činností, tak je to makačka na bednu, často se v tom udělá chyba a je to celkem citelný znásilňování té samotné základní (deklarativní) koncepce jazyka.

Ne že by to bylo něco, co byste nevěděli, ale když si to člověk připomene, tak se možná na tu race condition dívá trochu z jinýho úhlu :)

Stran: 1 ... 268 269 [270] 271 272 ... 618