Omezená dědičnost (je něco lepšího než OOP?)

Radek Miček

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #375 kdy: 15. 09. 2015, 11:11:46 »
Citace od: Ivan Nový kdy 15. 09. 2015, 10:53:32
Citace od: Radek Miček kdy 15. 09. 2015, 10:48:51
Citace od: Ivan Nový kdy 15. 09. 2015, 10:44:29
Citace od: JSH kdy 15. 09. 2015, 10:31:24
Citace od: Ivan Nový kdy 15. 09. 2015, 10:23:08
Podstatou a výhodou funkcionálního programování by mělo být přiřazování (funkce = soubor uspořádaných entic), nikoliv představa, byť vzdálená, nějaké činnosti, výpočtu.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
if je je rozhodování, tedy výpočet, protože if je hodně obecné a vždy ho můžete nahradit konkrétní funkcí, pracující s přiřazením z konkrétně daných definičních oborů funkce. To je přece hlavní výhoda FP. Předem víte s čím pracujete. Je to dáno použitou funkcí. U obecného if to nevíte.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?
Není to výpočet, je to výběr z množiny uspořádaných entic {..., [1,1,2], [1,2,3], ...}, myslíte-li funkcionálně a ne imperativně.

To je IMO omezené chápání funkce na teorii množin - v programování se to moc nepoužívá.
Tak ještě toto, v imperativním programování se toto nepoužívá, FP by se mělo, protože to pak vede na možnost strojově upravovat algoritmy napsané v FP jazyku tak, aby byly automaticky paralelizovatelné.

To jde i v imperativních jazycích, podívejte se třeba na jazyk ParaSail.

Jinak v mainstreamových funkcionálních jazycích je to s (explicitní) paralelizací dost slabé. OCaml má GIL, v Haskellu je těžké napsat paralelní algoritmus s dobrým výkonem (např. quicksort), v F# a Scale máte prakticky totéž, co v C# a Javě.


JS

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #376 kdy: 15. 09. 2015, 11:13:53 »
Citace od: Inkvizitor kdy 15. 09. 2015, 10:45:56
Citace od: Mirek Prýmek kdy 15. 09. 2015, 10:26:16
Citace od: Ivan Nový kdy 15. 09. 2015, 10:06:21
if a while jsou prvky imperativního programování. Je to stejný prohřešek, jako roubovat OOP do Lispu.
While jo. Ale proč propánajána if? To jako "správně funkcionálně" mám každý if vyhodit ven jako samostatnou funkci? Proč, prokrýlepána?

Už toho trolla, přátelé, fakt nekrmte.

Ktereho?  :D

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #377 kdy: 15. 09. 2015, 11:20:00 »
Citace od: Radek Miček kdy 15. 09. 2015, 11:11:46
Citace od: Ivan Nový kdy 15. 09. 2015, 10:53:32
Citace od: Radek Miček kdy 15. 09. 2015, 10:48:51
Citace od: Ivan Nový kdy 15. 09. 2015, 10:44:29
Citace od: JSH kdy 15. 09. 2015, 10:31:24
Citace od: Ivan Nový kdy 15. 09. 2015, 10:23:08
Podstatou a výhodou funkcionálního programování by mělo být přiřazování (funkce = soubor uspořádaných entic), nikoliv představa, byť vzdálená, nějaké činnosti, výpočtu.
Takže a = b + c není FP? Vždyť je to výpočet.
Citace
if je je rozhodování, tedy výpočet, protože if je hodně obecné a vždy ho můžete nahradit konkrétní funkcí, pracující s přiřazením z konkrétně daných definičních oborů funkce. To je přece hlavní výhoda FP. Předem víte s čím pracujete. Je to dáno použitou funkcí. U obecného if to nevíte.
Mluvím o funkci if typu Bool -> a -> a -> a, která vrací buď druhý nebo třetí parametr. Co je na ní nefunkcionálního?
Není to výpočet, je to výběr z množiny uspořádaných entic {..., [1,1,2], [1,2,3], ...}, myslíte-li funkcionálně a ne imperativně.

To je IMO omezené chápání funkce na teorii množin - v programování se to moc nepoužívá.
Tak ještě toto, v imperativním programování se toto nepoužívá, FP by se mělo, protože to pak vede na možnost strojově upravovat algoritmy napsané v FP jazyku tak, aby byly automaticky paralelizovatelné.

To jde i v imperativních jazycích, podívejte se třeba na jazyk ParaSail.

Jinak v mainstreamových funkcionálních jazycích je to s (explicitní) paralelizací dost slabé. OCaml má GIL, v Haskellu je těžké napsat paralelní algoritmus s dobrým výkonem (např. quicksort), v F# a Scale máte prakticky totéž, co v C# a Javě.
Dobře a jaké jsou tedy výhody funkcionálního přístupu?

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #378 kdy: 15. 09. 2015, 11:24:35 »
Citace od: Ivan Nový kdy 15. 09. 2015, 11:09:15
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.

Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #379 kdy: 15. 09. 2015, 11:36:04 »
Citace od: Mirek Prýmek kdy 15. 09. 2015, 11:24:35
Citace od: Ivan Nový kdy 15. 09. 2015, 11:09:15
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.
No ten if byl extrém. Jak si ho vizualizujete, když programujete? Jako porovnání konkrétních hodnot, předpokládám, tedy imperativním způsobem myšlení.


Ivan Nový

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #380 kdy: 15. 09. 2015, 11:40:39 »
Citace od: Mirek Prýmek kdy 15. 09. 2015, 11:24:35
Citace od: Ivan Nový kdy 15. 09. 2015, 11:09:15
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.

Pořadí vyhodnocení u if? No například if (f1() && f2()) v imperativních jazycích znamená, že když f2 má vedlejší efekt, tak dojde k chybě, protože když f1() vrací false, tak f2() se nevolá. A to jsou ty neznámé závislosti.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #381 kdy: 15. 09. 2015, 11:41:07 »
Citace od: Ivan Nový kdy 15. 09. 2015, 11:36:04
No ten if byl extrém. Jak si ho vizualizujete, když programujete? Jako porovnání konkrétních hodnot, předpokládám, tedy imperativním způsobem myšlení.
To je úplně irelevantní, jak si ho vyzualizuju. Řekněme tedy jako růžového slona. Spíš bych chtěl teda slyšet, proč to nemůže být ta relace.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #382 kdy: 15. 09. 2015, 11:42:07 »
Citace od: Ivan Nový kdy 15. 09. 2015, 11:40:39
Pořadí vyhodnocení u if? No například if (f1() && f2()) v imperativních jazycích znamená, že když f2 má vedlejší efekt, tak dojde k chybě, protože když f1() vrací false, tak f2() se nevolá. A to jsou ty neznámé závislosti.
Nebavíme se o imperativních jazycích. Bavíme se o FP bez vedlejších efektů. Proč tam teda if nepatří?

JSH

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #383 kdy: 15. 09. 2015, 11:45:42 »
Citace od: Ivan Nový kdy 15. 09. 2015, 11:40:39
Pořadí vyhodnocení u if? No například if (f1() && f2()) v imperativních jazycích znamená, že když f2 má vedlejší efekt, tak dojde k chybě, protože když f1() vrací false, tak f2() se nevolá. A to jsou ty neznámé závislosti.
Tohle ale není o pořadí vyhodnocení u ifu ale u &&. To samé by se dělo, pokud bych místo ifu výsledek && použil jakkoliv jinak.

BoneFlute

  • *****
  • 2 155
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #384 kdy: 15. 09. 2015, 12:02:11 »
Citace od: Ivan Nový kdy 15. 09. 2015, 09:22:38
A FP jazyky ji mají přímo katastrofální.
Tak to určitě...

zboj

  • *****
  • 1 507
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #385 kdy: 15. 09. 2015, 15:58:54 »
Citace od: Ivan Nový kdy 15. 09. 2015, 11:36:04
Citace od: Mirek Prýmek kdy 15. 09. 2015, 11:24:35
Citace od: Ivan Nový kdy 15. 09. 2015, 11:09:15
Ano, ale to je imperativní programování, díky neznámým závislostem mezi objekty nelze automatizovaně výpočet paralelizovat a dokazovat, což FP by mělo umožňovat. Ten if je samozřejmě extrém, ale na něm se ukáže, zda myslíte funkcionálně, či imperativně. Funkcionální programování vyžaduje oprostit se od pojmu čas, a tedy vás to osvobodí do jisté míry, od nutnosti zabývat se pořadím zpracování, výsledek matematické funkce závisí jen na vstupních hodnotách, nikoliv na pořadí zpracování funkcí ...
A to by mě teda docela zajímalo.

První námitka: Podle mě můžu definovat trojici {a,b,c}, která odpovídá ifu. Takže máme ten kýžený výběr z trojic. Pokud to tak nejde, chtěl bych vidět nějakou pořádnou argumentaci.

Co jsou "neznámé závislosti", nevím. Pořadí vyhodnocení můžu u ifu měnit jako u jakékoliv jiné fce.
No ten if byl extrém. Jak si ho vizualizujete, když programujete? Jako porovnání konkrétních hodnot, předpokládám, tedy imperativním způsobem myšlení.

If je normální matematická funkce, nejjednodušším příkladem je třeba |x|.

noef

  • *****
  • 897
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #386 kdy: 15. 09. 2015, 16:05:35 »
Citace od: zboj kdy 15. 09. 2015, 15:58:54
If je normální matematická funkce, nejjednodušším příkladem je třeba |x|.

Taky jsem na to koukal. Vzdyt jedna z moznosti jak formale definovat funkci je tabulkou, kde if lze jednoduse zapsat.

Inkvizitor

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #387 kdy: 15. 09. 2015, 16:39:08 »
Citace od: noef kdy 15. 09. 2015, 16:05:35
Citace od: zboj kdy 15. 09. 2015, 15:58:54
If je normální matematická funkce, nejjednodušším příkladem je třeba |x|.

Taky jsem na to koukal. Vzdyt jedna z moznosti jak formale definovat funkci je tabulkou, kde if lze jednoduse zapsat.

Je to troll, fakt.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #388 kdy: 15. 09. 2015, 16:54:26 »
Citace od: Inkvizitor kdy 15. 09. 2015, 16:39:08
Je to troll, fakt.
Když se někdo splete, tak nemusí být hnedka troll. Spíš mě udivuje, s jakou vehemencí tady lidí tvrdí blbosti a neposlouchají námitky.

Inkvizitor

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #389 kdy: 15. 09. 2015, 20:55:58 »
Citace od: Mirek Prýmek kdy 15. 09. 2015, 16:54:26
Citace od: Inkvizitor kdy 15. 09. 2015, 16:39:08
Je to troll, fakt.
Když se někdo splete, tak nemusí být hnedka troll. Spíš mě udivuje, s jakou vehemencí tady lidí tvrdí blbosti a neposlouchají námitky.

Jenže já ho pozoruju už delší dobu.