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

v

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #225 kdy: 12. 09. 2015, 23:43:47 »
A není to naopak? Že v této jediné věci ti FP moc nepomůže, zatímco ve všem ostatním ano? Zkus si přečíst naše příspěvky. Vždyť ty vůbec nereflektuješ co popisujem.

V čem mi pomůže? Že nejde rozumně udělat změnu ve scéně? Zkuste si přečíst, co píšu já.

ta scéna, co je to za datovou strukturu?


BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #226 kdy: 13. 09. 2015, 00:00:03 »
No, ve skutečnosti jsem to dělal pomocí zástupných commandů, ale ten princip, ať si to nekomplikujem je ten, že jsem funkci předal celou scénu, a vrátil novou.

Na tom je krásně vidět, jak tě funkcionální omezení dotlačilo do prakticky asi nejhoršího řešení. Neber to jako kritiku, ta úloha ve funkcionálním přístupu nemá žádné dobré řešení :).
Vidiš to. Já bych naopak řekl, že je na tom krásně vidět, jak těžké je opustit mutable svět a začít přemýšlet funkcionálně.

Co je na tom zásadně špatně:

1) Funkce by měla pracovat jen s daty, která opravdu potřebuje. Ty předáváš celou scénu, i když s ní funkce provede jen nějakou omezenou operaci. Vůbec nevíš, co se kde zpracovává za data.

2) Nejde to paralelizovat. Jednotlivé funkce musíš spouštět sekvenčně.
Zmínil jsem ty zástupné commandy. Protože to vypadá, že si si to nedomyslel, tak popíšu:
V rámci tiku, každý objekt dostal stejnou scénu. Jeho úkolem bylo určit a vrátit co chce na té scéně změnit. Toto se dá velice dobře paralelizovat. Výsledkem byl seznam commandů, který se mají uplatnit na scéně. Toto je kritická sekce, která se paralelizuje hůř, ale taky to de. Například můžu rozdělit scénu na části, které se nemohou ovlivňovat. Třeba když je to rozděleno zdí. Pak můžu tyto dvě scény paralelizovat zcela bez problému. A dá se na tom najít další a další způsoby, jak to optimalizovat.

Proč to dělat takto a ne jinak? Protože vždycky vím, co se mění. Díky tomu, že vím kde je kritická sekce, můžu vyhmátnout, zda nejde změnit, nebo nějak optimalizovat. Což většinou jde. A to zcela bez rizika, že se mi budou množit pomeranče. Nemůže dojít k deadlocku. Nemůže se mi nic rozjet.

3) Vytvářet kvůli každé jedné izolované změně novou scénu je neefektivní.
Nevím jak v jiném jazyce, ale v Haskellu je to zadarmo. (Samozřejmě nebavíme se o vytváření nové scény od nuly, ale to už tu Prímek vysvětloval.)

Kdybys to napsal rovnou imperativně, bylo by to přehlednější, rychlejší a udržovatelnější.
Opravdu nevidím důvod si něco takového myslet. Můžeš mi to vysvětlit? Bohužel výše uvedené tři argumenty pouze naznačují, že nemáš zkušenosti jak FP funguje.

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #227 kdy: 13. 09. 2015, 00:01:43 »
ta scéna, co je to za datovou strukturu?

Něco takového: https://en.wikipedia.org/wiki/Scene_graph

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #228 kdy: 13. 09. 2015, 00:05:43 »
Vidiš to. Já bych naopak řekl, že je na tom krásně vidět, jak těžké je opustit mutable svět a začít přemýšlet funkcionálně.

Na tom, co jsi udělal, nic funkcionálního není. Spojuje to nevýhody imperativního a funkcionálního přistupu dohromady. Pracovat ve všech funkcích s celou scénou je totální fail. Formálně je to funkcionální, prakticky je to ale hybrid, imperativní přístup jsi násilně narouboval do funkcionálního světa. Výsledek není dobrý.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #229 kdy: 13. 09. 2015, 00:06:30 »
A není to naopak? Že v této jediné věci ti FP moc nepomůže, zatímco ve všem ostatním ano? Zkus si přečíst naše příspěvky. Vždyť ty vůbec nereflektuješ co popisujem.

V čem mi pomůže? Že nejde rozumně udělat změnu ve scéně? Zkuste si přečíst, co píšu já.
Povedzte Kefalín, čo vy si predstavujete pod takým slovom "rozumě"?

je toto dostatenčně rozumné?
Kód: [Vybrat]
scene' = setScene scene (100,100,100) pomeranc


gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #230 kdy: 13. 09. 2015, 00:08:37 »
Zmínil jsem ty zástupné commandy. Protože to vypadá, že si si to nedomyslel, tak popíšu:
V rámci tiku, každý objekt dostal stejnou scénu. Jeho úkolem bylo určit a vrátit co chce na té scéně změnit.

To už jsme řešili, stejný přistup jako v Pac-Manovi. Generuješ eventy, které říkají, jak se má scéna změnit a uděláš to ex-post. To taky není dobré, budeš tam mít kolize a vzájemně si odporující eventy.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #231 kdy: 13. 09. 2015, 00:09:37 »
Na tom, co jsi udělal, nic funkcionálního není. Spojuje to nevýhody imperativního a funkcionálního přistupu dohromady. Pracovat ve všech funkcích s celou scénou je totální fail. Formálně je to funkcionální, prakticky je to ale hybrid, imperativní přístup jsi násilně narouboval do funkcionálního světa. Výsledek není dobrý.
Sorry, ale tohle je totální krávovina, co jsi teď napsal. Ve FP se běžně předává celý stav, protože prostě není žádný jiný způsob, jak s ním pracovat, protože nejsou globální proměnné.

Když o FP zjevně nic nevíš, proč o něm něco tvrdíš? A ještě tak vehementně?!

Škoda, že nepíšeš pod svým jménem, protože to by sis asi dal víc záležet na tom, abys ze sebe nedělal totálního vola... :(

(sorry, ale jinak už se to fakt napsat nedalo)

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #232 kdy: 13. 09. 2015, 00:12:26 »
Vidiš to. Já bych naopak řekl, že je na tom krásně vidět, jak těžké je opustit mutable svět a začít přemýšlet funkcionálně.

Na tom, co jsi udělal, nic funkcionálního není. Spojuje to nevýhody imperativního a funkcionálního přistupu dohromady. Pracovat ve všech funkcích s celou scénou je totální fail. Formálně je to funkcionální, prakticky je to ale hybrid, imperativní přístup jsi násilně narouboval do funkcionálního světa. Výsledek není dobrý.
Respektuji tvůj názor, ale nemám důvod s ním souhlasit. Jsem bohužel dost tvrdohlavý, a bez argumentů se mnou nehneš ;-)

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #233 kdy: 13. 09. 2015, 00:18:05 »
Zmínil jsem ty zástupné commandy. Protože to vypadá, že si si to nedomyslel, tak popíšu:
V rámci tiku, každý objekt dostal stejnou scénu. Jeho úkolem bylo určit a vrátit co chce na té scéně změnit.

To už jsme řešili, stejný přistup jako v Pac-Manovi. Generuješ eventy, které říkají, jak se má scéna změnit a uděláš to ex-post. To taky není dobré, budeš tam mít kolize a vzájemně si odporující eventy.
Jakoby ty kolize byly jen díky tomu, že to je napsáno immutable. Ve skutečnosti je to takhle velice šikovné, protože se mi ty kolize setřesou na jedno místo, žádná mi neunikne, a mohu volit strategii. Ukaž, jak by jsi to dělal mutable, a snaž se, aby to bylo fakt lepší ;-)

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #234 kdy: 13. 09. 2015, 00:24:05 »
Sorry, ale tohle je totální krávovina, co jsi teď napsal. Ve FP se běžně předává celý stav, protože prostě není žádný jiný způsob, jak s ním pracovat, protože nejsou globální proměnné.

Nikdo nemluví o globálních proměnných, proč je sem pleteš? Ve funkci, která mění pozici pomeranče, opravdu nepotřebuju celou scénu, stačí mi ten pomeranč. Počkat ono to vlasně v FP nejde... Ale jinak je FP naprosto vynikající, přináší samé výhody a jen blbec gamer ho do her nechce. Mirek Prýmek sice žádnou hru FP ani neFP neděl, ale přesně ví, co je pro gamera dobré.

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #235 kdy: 13. 09. 2015, 00:26:43 »
Jakoby ty kolize byly jen díky tomu, že to je napsáno immutable. Ve skutečnosti je to takhle velice šikovné, protože se mi ty kolize setřesou na jedno místo, žádná mi neunikne, a mohu volit strategii. Ukaž, jak by jsi to dělal mutable, a snaž se, aby to bylo fakt lepší ;-)

Ne není to šikovné. V imperativním přistupu kolize vůbec nejsou, nevzniknou. Provedeš výpočet a hned ho aplikuješ na scénu. Můžeš si nalhávat, že je lepší generovat eventy se změnami a nechat to na později ale není. Zásadně zvyšuješ komplexitu řešení.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #236 kdy: 13. 09. 2015, 00:28:37 »
Ve funkci, která mění pozici pomeranče, opravdu nepotřebuju celou scénu, stačí mi ten pomeranč.

Ukaž mi, jak změníš pozici pomeranče, když budeš mět jen ten pomeranč. Klidně v Javě. Ale musíš mět jen pomeranč, to je podmínka!

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #237 kdy: 13. 09. 2015, 00:31:15 »
Ukaž mi, jak změníš pozici pomeranče, když budeš mět jen ten pomeranč. Klidně v Javě. Ale musíš mět jen pomeranč, to je podmínka!

Kód: [Vybrat]
pomeranc.SetPos(1,2,3);

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #238 kdy: 13. 09. 2015, 00:33:24 »
Nikdo nemluví o globálních proměnných, proč je sem pleteš?
Protože ve FP neexistuje žádný* způsob, jak uložit data, než je předat funkci. Není to žádná blbost, je to jediný* způsob, kterým se s daty pracuje.

* trochu kecám, ale to už je v kontextu toho všeho blábolení tady celkem jedno...

V imperativním přistupu kolize vůbec nejsou, nevzniknou. Provedeš výpočet a hned ho aplikuješ na scénu. Můžeš si nalhávat, že je lepší generovat eventy se změnami a nechat to na později ale není. Zásadně zvyšuješ komplexitu řešení.
Ok, tak raději mluv o tom, co znáš a ne o tom, co neznáš. Takže: máš dvě vlákna, v každém ti běží jedna postavička. Jak v ne-FP zabezpečíš, aby postavičky nevlezly na stejné políčko? Potenciálně konfliktní změny musíš tak jako tak serializovat. Čili jsi na tom úplně stejně. Nebo?

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #239 kdy: 13. 09. 2015, 00:35:38 »
Jakoby ty kolize byly jen díky tomu, že to je napsáno immutable. Ve skutečnosti je to takhle velice šikovné, protože se mi ty kolize setřesou na jedno místo, žádná mi neunikne, a mohu volit strategii. Ukaž, jak by jsi to dělal mutable, a snaž se, aby to bylo fakt lepší ;-)

Ne není to šikovné. V imperativním přistupu kolize vůbec nejsou, nevzniknou. Provedeš výpočet a hned ho aplikuješ na scénu.
Takže dva panácové přijdou k pomeranči. Kdo bude mít pomeranč? Nebo to není kolize?

Můžeš si nalhávat, že je lepší generovat eventy se změnami a nechat to na později ale není. Zásadně zvyšuješ komplexitu řešení.
Kluci z facebooku si myslí něco jiného.