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

PJ

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #210 kdy: 12. 09. 2015, 21:04:47 »
Samozřejmě že jde napsat Wolfenstein 3D v Haskellu. Stejně jako jde napsat webserver v bashi. Fungovat to bude, ale je to spíš jen takové myšlenkové cvičení, prakticky se funkcionální jazyky ve vývoji her neprosazují.
A důvody k tomu můžou být různé - třeba to, že každý programátor začíná imperativně nebo objektově.
Nie kazdy.

Zaciatok programovania na MIT je s Lispom (Scheme):
http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/video-lectures/
Myslim, ze ked to ma MIT, tak to budu mat aj dalsie univerzity.

S Haskellom zacina najmenej 13 univerzit vratane Oxfordu:
https://wiki.haskell.org/Haskell_in_education#Haskell_as_a_first_language


Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #211 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? :)

PJ

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #212 kdy: 12. 09. 2015, 21:38:30 »
Odpoviem protiotazkou: Myslis, ze na informaticke smery MFF/CVUT/VUT chodia ludia, co v nicom neprogramovali? (Ja myslim, ze ano, aj ked ich je mensina)

Inak tu je dalsich par, kde sa zacina funkcionalne:
http://www.quora.com/Which-universities-teach-their-first-CS-course-in-a-functional-programming-language
Je tam aj India, takze z pohladu mnozstva to ma sancu.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #213 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" ;)

Kit

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #214 kdy: 12. 09. 2015, 21:43:17 »
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? :)

Dodnes mě mrzí, že jsem nezačínal s Lispem, ale s Pascalem. O to krutější byl přechod na OOP.


BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #215 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ý.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #216 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.

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #217 kdy: 12. 09. 2015, 23:12:38 »
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?

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #218 kdy: 12. 09. 2015, 23:16:11 »
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.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #219 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.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #220 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.

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #221 kdy: 12. 09. 2015, 23:25:12 »
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.

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #222 kdy: 12. 09. 2015, 23:32:07 »
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í :). 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ě.

3) Vytvářet kvůli každé jedné izolované změně novou scénu je neefektivní.

Kdybys to napsal rovnou imperativně, bylo by to přehlednější, rychlejší a udržovatelnější.

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #223 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.

gamer

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #224 kdy: 12. 09. 2015, 23:40:59 »
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á.