Funkcionální programátor

Re:Funkcionální programátor
« Odpověď #180 kdy: 02. 07. 2015, 00:27:39 »
Kvůli pohodlí programátorů - viz Unsound and Incomplete. Nebo Why Dart Types Are Optional and Unsound nebo oficiální manuál TypeScriptu.
Díky. Už je dost pozdní hodina, takže mi možná něco ušlo, ale ten první link mi to teda moc neosvětlil a v tom textu o Dartu je jenom příklad s downcastem, kterej je jasnej, ale nevím

1. jestli je to jediná věc, u které je ne-korektní, nebo je jich víc (jasně že jedna věc stačí k tomu aby byl nekorektní jako takový, ale to teď nemyslím)

2. V čem je to zjednodušení pro programátora? Že může použít downcast bez toho, aby to udělal explicitně? To mi moc jako výhoda ani nepřijde :)


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programátor
« Odpověď #181 kdy: 02. 07. 2015, 00:36:50 »
odpovídají ideálům FP, ale když se v praxi na ně nemůžete spolehnout, tak bohužel platí, že:

Pokud hledáte typový systém, který zabrání vzniku race conditions, tak můžete zkusit Rust (jeho bezpečný fragment) nebo Mezzo.

Ani jeden z nich není čistě funkcionální.

Chápu to tak, že zabránění race conditions je pro FP podmínka nutná, nikoliv však dostačující.

A, bohužel, z tohoto vlákna si zatím odnáším dojem, že zrovna Haskell čistě funkcionální není. Minimálně prakticky. 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 :-)

O Rust už jsem zakopl, na Mezzo se podívám, díky za tip. A vůbec, díky za příspěvky.

Re:Funkcionální programátor
« Odpověď #182 kdy: 02. 07. 2015, 00:44:35 »
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? Zajímá tě primárně, jestli jazyk splňuje nějaká víceméně umělá akademická kritéria, nebo jestli se v něm dobře píše?

Mě třeba fakt nadchl Elixir a přitom z těch akademických "kritérií funkcionálnosti" nesplňuje skoro nic, někdo ho do FP vůbec neřadí, někdo ho klidně zařadí do "opravdové OOP" (kvůli posílání zpráv), někdo ho dá do "concurrent programming"... A není to ve finále úplně jedno? Stejně v praxi tě víc zajímají věci jako pattern matching, nároky na paměť, rychlost, snadnost paralelizace... ne?

Popravdě řečeno mi ten čumilův přístup přijde poněkud (až značně ;) ) autistickej :)

Radek Miček

Re:Funkcionální programátor
« Odpověď #183 kdy: 02. 07. 2015, 01:08:39 »
1. jestli je to jediná věc, u které je ne-korektní, nebo je jich víc (jasně že jedna věc stačí k tomu aby byl nekorektní jako takový, ale to teď nemyslím)

V Dartu to jsou ještě kovariantní generika - typový systém povolí kontravarianci, ale za běhu to spadne. Například

Kód: [Vybrat]
abstract class Zvire { void jez(); }
class Pes extends Zvire { void jez() { print("Pes"); } }

abstract class Krmic<A> { void nakrm(A a); }
class ZvireKrmic extends Krmic<Zvire> {
  void nakrm(Zvire z) { z.jez(); }
}

void f(Krmic<Pes> k, Pes p) {
  k.nakrm(p);
}

void start() {
  f(new ZvireKrmic(), new Pes());
}

projde typovou kontrolou, ale za běhu vyhodí

Kód: [Vybrat]
Breaking on exception: type 'ZvireKrmic' is not a subtype of type 'Krmic<Pes>' of 'k'.

TypeScript má například špatně varianci u polí (měly by být invariantní, neměnná pole mohou být kovariantní, pole pouze pro zápis mohou být kontravariantní, v TypeScriptu jsou však bivariantní) a argumentů funkcí (měly by být kontravariantní).

Citace
2. V čem je to zjednodušení pro programátora? Že může použít downcast bez toho, aby to udělal explicitně? To mi moc jako výhoda ani nepřijde :)

Údajně je to intuitivnější.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programátor
« Odpověď #184 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í.


Radek Miček

Re:Funkcionální programátor
« Odpověď #185 kdy: 02. 07. 2015, 01:19:25 »
Chápu to tak, že zabránění race conditions je pro FP podmínka nutná, nikoliv však dostačující.

Ne, není to vůbec potřeba, FP může mít race conditions.

Nutná a postačující podmínka je, že můžete používat substituční model na všechny výrazy - tj. každý výraz můžete nahradit jeho hodnotou aniž by se chování programu změnilo. Důsledkem je, že výrazy, jenž mají stejnou hodnotu, jsou záměnné (tohle například v Javě neplatí).

Re:Funkcionální programátor
« Odpověď #186 kdy: 02. 07. 2015, 01:23:12 »
V Dartu to jsou ještě kovariantní generika - typový systém povolí kontravarianci, ale za běhu to spadne. Například
Díky moc za příklad, ale z OOP už jsem dost vypadl a sotva už držím víčka, projdu zítra :)

Údajně je to intuitivnější.
Pro webaře odchované JavaScriptem určitě ;)

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 :)

Může bejt, ale dozvěděl jsem se spousta zajímavejch věcí.
Každopádně si zaslouží dík za rozproudění hezké a neobvykle poučné debaty, o tom žádná :)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programátor
« Odpověď #187 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.

Radek Miček

Re:Funkcionální programátor
« Odpověď #188 kdy: 02. 07. 2015, 01:29:23 »
Chápu to tak, že zabránění race conditions je pro FP podmínka nutná, nikoliv však dostačující.

Ne, není to vůbec potřeba, FP může mít race conditions.

Přesněji při interpretaci popisu, co vyleze z čistého funkcionálního programu, mohou vznikat race conditions.

Samotný funkcionální program je skutečně matematická funkce, která nemá race conditions, neboť pouze vrací popis.

Radek Miček

Re:Funkcionální programátor
« Odpověď #189 kdy: 02. 07. 2015, 01:30:09 »
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.

Opravil jsem se.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programátor
« Odpověď #190 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.

Re:Funkcionální programátor
« Odpověď #191 kdy: 02. 07. 2015, 01:32:55 »
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")

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programátor
« Odpověď #192 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 ;-)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programátor
« Odpověď #193 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).

Re:Funkcionální programátor
« Odpověď #194 kdy: 02. 07. 2015, 01:49:34 »
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 :) Třeba chytré hlavy už něco vymyslely, akorát to zas bude mít nějaké jiné neblahé praktické důsledky ;)

Proto uváděl další implementace řešení FP: uniqueness typing (rozumím jakžtakž), FRP (nerozumím vůbec).
To první jsme asi už proprali dostatečně... A to druhý nevím nevím, že by se pomocí toho dalo vyhnout jakejmkoli cyklům _obecně_? Neuvěřím dokud neuvidím ;)