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 ... 252 253 [254] 255 256 ... 618
3796
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 13. 09. 2015, 02:21:16 »
Budu ignorovat osobní urážky a nebudu je vracet, i když bych mohl.
Je to dost smutný, neumět si přiznat, že existují věci, kterým nerozumím.

Tohle řešení s eventy ale nepoužil nikdo.
Snadno vyvratitelné. http://gamedev.stackexchange.com/questions/7718/event-driven-communication-in-a-game-engine-yes-or-no

Carmack je hračička a baví ho prošlapávat neprobádané cesty. S reálnou použitelností to nemusí vůbec korelovat.
Jistě existuje možnost, že Carmack hrám nerozumí, narozdíl od tebe, tak to špatně odhadl.

3797
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 13. 09. 2015, 02:05:50 »
Můžeme si samozřejmě říct, že všichni vývojáři her jsou hloupí, nepochopili funkcionální programování, ví o něm strašně málo a teprve čekají na to, až jim někdo ukáže tu správnou cestu. Occamova břitva ale říká, že to nebude ta správná teorie.
Super, na tom se konečně shodneme! Occamova břitva říká, že to tak nebude, protože kdybys to udělal v C++, tak bys tím nezískal tytéž výhody jako ve skutečně funkcionálních jazycích, protože tam nemáš ty garance.

A o tom, že se "to tak nikdo nedělá", se dá s úspěchem pochybovat, opět můžeme zůstat u Carmacka:
Citace
My pragmatic summary: A large fraction of the flaws in software development are due to programmers not fully understanding all the possible states their code may execute in. In a multithreaded environment, the lack of understanding and the resulting problems are greatly amplified, almost to the point of panic if you are paying attention. Programming in a functional style makes the state presented to your code explicit, which makes it much easier to reason about, and, in a completely pure system, makes thread race conditions impossible.
http://gamasutra.com/view/news/169296/Indepth_Functional_programming_in_C.php

Jasně, můžeš ignorovat nás, kteří jsme na "AAA enginu" nikdy nedělali, ale fakt bych rád viděl, jak by ses stejně prsil na něj a co by na to řekl on :)

3798
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 13. 09. 2015, 01:45:17 »
Když přestanete tvrdit, že funkcionální programování je úplně to nejlepší na vývoj her, i když jste žádnou hru nedělali (teda BoneFlute dělal), tak přestanu reagovat.
To ale přece nikdo netvrdí. Já tady jenom celou dobu vyvracím tvoje předsudky vůči FP, které jsou zjevně založené na neznalosti. Je možný, že FP není pro hry vůbec vhodný a jsou pro to objektivní důvody, ale určitě to nejsou ty, které popisuješ, protože tak, jak to píšeš, to prostě není.

Něco tvrdit a vyvracet tvrzení je úplně jiná důkazní situace.

Kdyby to bylo tak skvělé, jak prezentujete, každý včetně mě by po tom hned skočil. Všichni chtějí dělat co nejlepší hry, konkurence je v tomto oboru velmi tvrdá.
Tak třeba ukázkově tohle tvrzení můžu velice lehce vyvrátit - a zároveň si nemusím myslet, že FP je na hry nejlepší, dokonce si klidně zároveň můžu myslet, že je na hry úplně špatné a nevhodné.

Tohle tvrzení je nepravdivé, protože můžou být úplně jiné důvody, proč se FP nepoužívá - například to, že C++ programátorů máš plnou ... zatímco padesát dobrých Haskellistů bych ti teda hledat nepřál. Vždyť to říká i ten Carmack: je to hezký přístup, ale nedává ekonomický smysl na něj přecházet, když máte lidi, máte nástroje, máte ekosystém. Akorát on si narozdíl od tebe nevymýšlí pseudodůvody, proč to nejde technicky.

3799
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 13. 09. 2015, 01:28:47 »
Funkcionálním přístupem s generováním eventů jste tam přidali kompexitu navíc. Netriviální kompexitu navíc, kterou musíte řešit.
Zatímco když budeš řešit zamykání všude možně ve všech možných kontextech, protože kdokoli si může nechat odkaz na cokoli, a občas nějaký ten zámek zapomeneš přidat a ono ti to bude zničehožnic nedeterministicky padat, tak tím žádnou komplexitu nepřidáváš a nic řešit nemusíš :)

Hele, už toho fakt nechme, nikam to nevede. Vždyť tě nikdo nenutí FP používat, tak jakej máš problém? Prostě FP nepoužívej. Když o něm nebudeš rozšiřovat nesmysly, tak na tebe nikdo nebude reagovat a všichni budou spokojení, ne?


3800
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 13. 09. 2015, 01:01:39 »
Řešení s eventy má jako nevýhodu nedeterminismus, rozhodnout které eventy jsou ty pravé není vůbec triviální úloha. Já tohle vůbec dělat nemusím.
Ale musíš, musíš. A mnohem víc netriviálně.
Mě fakt baví, jak gamer vykládá, jakej je strašnej problém synchronizace eventů, ale když se ho zeptáš, jak by to dělal on, tak odpoví "kdo dřív přijde...". Synchronizovat eventy stylem "kdo dřív přijde" je fakt strašnej problém :)))

3801
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 13. 09. 2015, 00:50:25 »
Nápodobně.
Já mluvím o tom, co znám. Znám (jakžtakž) FP a znám i klasiku. O hrách, které neznám, netvrdím nic.

Nepleť dohromady serializaci a sychronizaci, to je něco úplně jiného.
Pokud máš dvě potenciální kolizní úpravy datové struktury, tak je musíš serializovat. Jak přesně to uděláš, je detail, ale vždycky to bude nějaká serializace.

Vy chcete vytvářet seznam eventů o tom, co všechno se změnilo, který pak nějakou magií zpracujete, vyřešíte vzájemně si odporující eventy a rozhodnete o konečném stavu.
To je jenom jeden z možných přístupů. Netvrdím, že bych to tak dělal, protože jsem žádnou netriviální hru nikdy neprogramoval.

Já to tak dělat nechci, provádím změny rovnou ve scéně, žádný seznam nevytvářím. Kdo dřív přijde, ten dřív mele.
No vidíš - a přesně takhle bys to udělal ve FP, kde by scénu držel actor. To je překvápko, že? :)

Musím řešit sychronizaci, když mám panáky ve vláknech, tak musím políčko nejdřív zamknout, než na něj panák vstoupí.
Čili operace s políčkem serializovat - úplně přesně jako při použití actoru.

Řešení se sychronizací může být pomalejší, ale je to všechno o návrhu, co poběží paralelně a jaké sdílená data to může mít.
No vidíš - a u FP žádná sdílená data řešit nemusíš. Buď máš data v ruce - a pak ti do nich nikdo lézt nemůže, neboje nemáš a pak do nich nemůžeš lézt ty. Nemusíš řešit, kdo drží odkaz na co, kde je potřeba synchronizovat co, kde ti vzniká jaký deadlock. To je celé, nic víc v tom nemusíš hledat.

3802
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« 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?

3803
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« 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)

3804
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 23:17:51 »
Ne nemusím hlídat všechno. Hlídám jen objekty sdílené mezi vlákny. Když sdílím pomeranče, hlídám pomeranče. Když nesdílím citrony, tak je ani nemusím hlídat.
A musíš hlídat, že pomeranče nemají někde schovaný odkaz na citrony.

3805
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 21:40:36 »
Ja myslim, ze ano, aj ked ich je mensina
Mas pravdu, opravuju to tvrzeni z "kazdy programator" na "vetsina programatoru" ;)

3806
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 21:07:06 »
Zaciatok programovania na MIT je s Lispom (Scheme) [...] S Haskellom zacina najmenej 13 univerzit vratane Oxfordu:
Myslis, ze na MIT a Oxford chodi lidi, kteri nikdy v nicem neprogramovali? :)

3807
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 20:33:15 »
Nechci paralelizovat práci s jedním pomerančem. Chci paralelizovat AI panáků. Ve hře mám 50 panáků a každý se musí rozhodnout, co bude dělat. Musí nejdřív zjistit, jaké vidí pomeranče a okolní panáky. Potom k těm pomeračům musí najít nejkratší cestu. Mohl by se taky snažit najít nejkratší cestu ostatních panáků k pomeračům. Na základě všech těchto informací se bude každý panák snažit najít optimální řešení, které bude maximalizovat jeho zisk - získá co nejvíc pomeranců. Můžu to pustit paralelně v samostatném vlákně po každého panáka. A já se ptám, jak mi pomůže, když to udělám funkcionálně? Bez sychronizace se stejně neobejdu, musím řešit co se stane, když panáci přistupují ke sdíleným pomerančům a taky musím řešit jejich kolize, aby se mi na cestě nesráželi.
Napsal jsem ti několikrát několik způsobů, jak se taková věc řeší. Nebudu to opakovat, nemám důvod tě o něčem přesvědčovat, když o to nemáš zájem.

To jsou jen takové teoretické řeči. I když to udělám funcionálně, nevypadne z toho nějak magicky, které zdroje jsou sdílené a které ne.
Ale samozřejmě, že vypadne, protože ve FP prostě žádný sdílený stav z principu být nemůže. Prostě to nejde, není, na úrovni kódu neexistuje. A pokud ho potřebuješ na úrovni sémantiky, tak se to dělá agentem, čili máš ten stav na jednom místě, jasně zapouzdřený a s jasným API.

Tím bych s dovolením tuhle debatu ukončil, fakt to nikam nevede, myslel jsem, že by to mohla být zajímavá debata, ale dostali jsme se do stádia přesvědčování a v tom nemá smysl pokračovat.

3808
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 20:28:06 »
Zajímavé věci se dají dočíst i tady: http://prog21.dadgum.com/23.html
No, tak bysme měli jeden blog jednoho programátora, kterému to nešlo, fajn :)

Každopádně mám velké pochyby o tom, jak moc FP ten člověk zná, protože ten příklad s globálním proměnnou (např. skóre) je přesně to, na co se používá Actor/Agent - k zapouzdření sdíleného stavu a serializaci přístupu k němu. A používá se to velice snadno. Takže těžko říct, co vyvozovat z blogu, který říká, že to nejde...

http://elixir-lang.org/docs/stable/elixir/Agent.html

3809
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 16:23:31 »
Proč? Akci panáka přece spustím prostřednictvím toho pomeranče. Pokud mám ve hře 10 pomerančů, mohu mít 10 paralelních větví.
No jasně, to je ten partitioning, o kterým jsem psal. Gamer je ale zhrzenej, že není paralelizovaná práce s jedním pomerančem a zároveň chce, aby k němu nemohli přistupovat dva hráči zároveň.

Prostě, když mám nějaký sdílený stav, tak přístup k němu musím vždycky serializovat, z principu, v tom mi žádná magická hůlka nepomůže. Výhoda FP je v tom, že množství sdílených stavů udržuje na nezbytném minimu a proto se dá paralelismus použít na víc místech než v kódu, kde je sdílené kde co a ani nemůžu efektivně zjistit, co je a co není. V tom je ta výhoda. Gamer ji hledá někde, kde není a být nemůže.

3810
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 15:55:15 »
Pokud však máme panáka bez kapsy a pomeranč, jehož atributem je majitel, problém se dvěma panáky najednou mizí. Atribut je jen jeden - pouze jeden panák může ten pomeranč vlastnit.
...a jenom vlastník s ním může pracovat. Čili sekvenční kód, explicitně vylučující paralelismus ;)

Stran: 1 ... 252 253 [254] 255 256 ... 618