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 - BoneFlute

Stran: 1 ... 122 123 [124] 125 126 ... 133
1846
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« 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!

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

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

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

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

1851
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 23:35:05 »
A musíš hlídat, že pomeranče nemají někde schovaný odkaz na citrony.

V tom případě sdílím i citrony. A FP mi nijak nepomůže, sychronizaci citronů musím i v FP řešit stejně jako sychronizaci pomerančů, pokud jde s citronem přes pomeranč provádět nějaká akce.
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.

1852
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 23:23:49 »
No, já jsem to řešil tak, že jsem měl scénu, ta měla tiky, a v každém tiku jednotlivé objekty udělaly změny na scéně co potřebovali.

Moment, tohle je imperativní přístup s mutable objekty, co mi uchází? Nebo jsi jako parametr do funkce předal celou scénu a z funkce dostal novou scénu?
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.


No musíš hlídat všechno. Protože všechny objekty máš mutable. To znamená nevíš dne a hodiny, kdy ti někdo nepřepíše.

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.
No dobře. Teoreticky nemusíš hlídat všechno. Prakticky, když jsem to nehlídal, tak jsem nedotáhl projekt do konce.

1853
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 23:01:38 »
Musím řešit jen ten pomeranč, kterej jedinej je napříč vlákny. U mutable musím hlídat úplně všechno. To mi přijde jako dost velké usnadnění. (A to jsme ještě nevytáhly nástroje a zatím se bavíme jen o výhodách daných principy.)

Nemusím hlídat všechno, u mutable taky řeším jen ten pomeranč, který jde napříč vlákny. Nic jiného synchronizovat nemusím. Je to úplně stejné.

No musíš hlídat všechno. Protože všechny objekty máš mutable. To znamená nevíš dne a hodiny, kdy ti někdo nepřepíše. Klasickej problém:
Kód: [Vybrat]
a = getAccount
b = getBalance a
setBalance a b+1
ti v mutable a v immutable světě bude fungovat různě. Ale to snad nemusím vysvětlovat.

1854
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 22:52:40 »
Protože nemůže rozumně během výpočtu měnit herní scénu, řeší změny scény až ex-post na základě eventů ({ate_dot,Coordinates}, ate_fruit). To je problém, protože může vygenerovat eventy, které jsou vzájemně v kolizi. Ex-post potom musíš řešit, co dělat, když jdou nějaké eventy proti sobě.

No, já jsem to řešil tak, že jsem měl scénu, ta měla tiky, a v každém tiku jednotlivé objekty udělaly změny na scéně co potřebovali. Na konci tiku se vždycky uplatnili změny, a ty se zapsali zpět do scény. A tak se to opakovalo.

Pokud tam dva paňácové šahali po pomeranči, tak ten první ho dostal, a ten druhej šáhnul do prázdna (v příším tiku by se to dozvěděl). Jednoduše, kdo dřív přijde. Podobně to fungovalo když by se měl ten paňáca hejbat, a vznikla by nějaká kolize (narazil do jiného paňáci).

Jako fungovalo to parádnicky, a asi ani v mutable prostředí bych to nedělal jinak.

Je možné, že jsem si to moc zjednodušil a na nějaké über-extra-mega složité hře bych narazil, ale zatím si to nemyslím, a k negativním zkušenostem druhých jsem skeptický.

1855
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 13:54:56 »
FP mi to nijak neusnadňuje, synchronizaci musí řešit taky, i když třeba jinými prostředky.
Musím řešit jen ten pomeranč, kterej jedinej je napříč vlákny. U mutable musím hlídat úplně všechno. To mi přijde jako dost velké usnadnění. (A to jsme ještě nevytáhly nástroje a zatím se bavíme jen o výhodách daných principy.)

Nikdo netvrdí, že by to nešlo, samozřejmně že to jde. Ale je to neefektivní, imperativní přístup s mutable objetky dává lepší výsledky.
Čím by si podložil své tvrzení? Nebo je to jen tvůj pocit?

1856
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 12. 09. 2015, 00:31:49 »
Code reuse samozřejmě neznamená jen dědičnost. Dědičnost je jedna z metod. A ten kdo umí dědičnost a neumí jiné metody bude obhajovat dědičnost, a kdo neumí dědičnost a umí jiné metody ji bude hanit. A oba se budou hádat, že "to druhé" je cesta do pekla. Dobrý programátor prostě použije vhodně daný kontext a max si zanadává - todle by šlo v támdletom jazyku napsat elegantnějc. Já takhle střídám několik jazyků a rozstu z toho dost.

Jazyk, který poskytuje takové nástroje, že je průměrný programátor nikdy nenaučí používat, je docela na pytel, nemyslíš? Bez ohledu na to, že si myslím, že dědičnost umím používat, tak jde o to, že spousta programátorů ne. Programátorské jazyky a metodiky nám mají pomáhat, ne nás filtrovat podle inteligence a zkušeností. To jsme si pak tak nějak spletli barák.

1857
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 10. 09. 2015, 22:07:05 »
Přesně! Tady  nejde o zatvrzelé odpůrce dědičnosti, ale o zatvrzelé zastánce dědičnosti pro nevhodná použití. Dědičnost na code reuse se používá proto, že máme blbý jazyky, který to lépe neuměj.

Je to přesně obráceně :) Dědičnost s virtuálními metodami je zobecnění postupu používaného na code reuse před OOP, dělalo se to tabulkou s pointery na specializované funkce, jakýsi předchůdce vtable.

Ano. A je to prostě zlo. Vzor template method je tomu korunou.

1858
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 10. 09. 2015, 21:11:04 »
Proč tady musí být zatvrzelí odpůrci versus zatvrzelí zastánci dědičnosti? Je tak těžké pochopit, že někdy se dědičnost hodí a jindy ne?

Protože code reuse. Mít čtyři různé objekty je teoreticky správné, ale prakticky nežádoucí a kontraproduktivní. Stejně ty čtyři různé objekty budou jenom boiler plate pro volání funkcí společných pro všechny čtyři varianty.

Přesně! Tady  nejde o zatvrzelé odpůrce dědičnosti, ale o zatvrzelé zastánce dědičnosti pro nevhodná použití. Dědičnost na code reuse se používá proto, že máme blbý jazyky, který to lépe neuměj.

1859
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 10. 09. 2015, 21:07:44 »
To je dost nesmysl, bo code reuse.

Prakticky každá firma (co jsem viděl), která měla zoufale neudržitelný kód ho měla zoufalí proto, že dědily kůli code reuse. Takže za mě fakt ne!

To je lidma, ne děděním.
Takže když programátorům zakážeme používat dědění, tak bude problém vyřešen, ne?

Někteří diskutující by z obavy před porušením LSP nejraději tyhlety dědičnosti úplně zakázali a vyhodili z OOP.

Kůli LSP bych to nedělal, ale ano hlásím se k těm, které by dědění zakázali.

1860
Vývoj / Re:Omezená dědičnost (je něco lepšího než OOP?)
« kdy: 09. 09. 2015, 17:43:21 »
To je dost nesmysl, bo code reuse.

Prakticky každá firma (co jsem viděl), která měla zoufale neudržitelný kód ho měla zoufalí proto, že dědily kůli code reuse. Takže za mě fakt ne!

Stran: 1 ... 122 123 [124] 125 126 ... 133