Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)

jpu

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #90 kdy: 22. 08. 2017, 07:39:03 »
OOP se mi osvědčilo zejména proto, že objektově napsané aplikace jsou velmi rychlé a robustní. Ovšem neomezuji se jen na OOP, ale doplňuji to o prvky FP a DP.
V com akoze rychle? Ak vo vykone programu, tak to urcite nemate pravdu.


Kit

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #91 kdy: 22. 08. 2017, 18:01:03 »
OOP se mi osvědčilo zejména proto, že objektově napsané aplikace jsou velmi rychlé a robustní. Ovšem neomezuji se jen na OOP, ale doplňuji to o prvky FP a DP.
V com akoze rychle? Ak vo vykone programu, tak to urcite nemate pravdu.

Stačí dodržovat SOLID a ten výkon v rychlosti aplikace se dostaví.

lopata

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #92 kdy: 22. 08. 2017, 18:29:51 »
Stačí dodržovat SOLID a ten výkon v rychlosti aplikace se dostaví.

Ne nedostaví, OOP nejde výkonu naproti. Problém je v zapouzdření dat do objektu, tozn. indirekce přístupů přes pointery a data rozházená všude možně po paměti. Pokud chceš výkon, musíš OOP opustit a použít data oriented programming:

https://github.com/Michaelangel007/game_dev_pdfs/blob/master/c%2B%2B/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf

Nicméně uznávám, že tohle už je mimo možnosti průměrného PHP programátora.

Honza

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #93 kdy: 22. 08. 2017, 18:56:52 »
Pokud chceš výkon, musíš OOP opustit a použít data oriented programming:

https://github.com/Michaelangel007/game_dev_pdfs/blob/master/c%2B%2B/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf
V odkazované prezentaci se ale o nutnosti opuštění OOP nikde nepíše. Pouze o reorganizaci dat před spuštěním konkrétního algoritmu. Správné seřazení dat samozřejmě může zvýšit výkon, o tom žádná.
Navíc by se dalo namítat, že spouštění OOP kódu bude optimální na OO procesoru, a ne na tom, co máme dnes (bohužel) k dispozici...

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #94 kdy: 22. 08. 2017, 19:04:26 »
Problém je v zapouzdření dat do objektu, tozn. indirekce přístupů přes pointery a data rozházená všude možně po paměti. Pokud chceš výkon, musíš OOP opustit a použít data oriented programming
To ovšem vycházíte z předpokladu, že výkon ovlivňuje především uspořádání dat v paměti. Což platí jen pro velmi okrajový počet aplikací.


lopata

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #95 kdy: 22. 08. 2017, 19:38:37 »
V odkazované prezentaci se ale o nutnosti opuštění OOP nikde nepíše. Pouze o reorganizaci dat před spuštěním konkrétního algoritmu. Správné seřazení dat samozřejmě může zvýšit výkon, o tom žádná.
Data oriented programming obvykle znamená, že je nutné porušit zapouzdření, protože je data nutné vytáhnout mimo objekt a přeorganizovat. Není to opuštění OOP, jen porušení principu zapouzdření. Vždycky je to něco za něco.

Navíc by se dalo namítat, že spouštění OOP kódu bude optimální na OO procesoru, a ne na tom, co máme dnes (bohužel) k dispozici...
OO procesor, to je nějaký hypotetický hardware, který nikdo nikdy neviděl, ale určitě by byl optimální, pokud by existoval?

lopata

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #96 kdy: 22. 08. 2017, 19:40:49 »
To ovšem vycházíte z předpokladu, že výkon ovlivňuje především uspořádání dat v paměti. Což platí jen pro velmi okrajový počet aplikací.
Platí to pro většinu aplikací. A moje tvrzení je stejně subjektivní a neověřitelné, jako tvoje. Takže se tady můžeme donekonečna hádat, jestli ano nebo ne.

Honza

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #97 kdy: 22. 08. 2017, 20:13:48 »
Data oriented programming obvykle znamená, že je nutné porušit zapouzdření, protože je data nutné vytáhnout mimo objekt a přeorganizovat. Není to opuštění OOP, jen porušení principu zapouzdření. Vždycky je to něco za něco.
Nevidím důvod, proč by se tím MUSELO porušit zapouzdření. Nějaký příklad?

OO procesor, to je nějaký hypotetický hardware, který nikdo nikdy neviděl, ale určitě by byl optimální, pokud by existoval?
Haha, tak pro naivní dotaz na Google se toho opravdu moc nenajde, ale to neznamená, že jde o hypotetický HW, ani snad to, že ho nikdo ještě neviděl.
Např. http://www.ee.cityu.edu.hk/~hisc/HISC.pdf
Pro Javu uvádějí naměřené zrychlení > 10x, ne nějakých 35% získaných přeorganizováním dat jako v předchozím případě. Současně podporuje všechny úrovně zapouzdření, co Java má.

lopata

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #98 kdy: 22. 08. 2017, 20:41:33 »
Nevidím důvod, proč by se tím MUSELO porušit zapouzdření. Nějaký příklad?
Ono NEMUSÍ. Ale obykle to tak DOPADNE. Data oriented design totiž není o tom schovat data dovnitř objektu a manipulovat s nimi jen pomocí metod objektu, ale vytáhnout je někam ven ideálně všechny na jednu hromadu a manipulovat s nimi pomocí funkcí. Design se nedělá podle toho, jaká data patří logicky do jakých objektů, ale naopak se data skládají tak, aby se s nimi dalo rychle pracovat.

Např. http://www.ee.cityu.edu.hk/~hisc/HISC.pdf
Pro Javu uvádějí naměřené zrychlení > 10x, ne nějakých 35% získaných přeorganizováním dat jako v předchozím případě. Současně podporuje všechny úrovně zapouzdření, co Java má.
Aha, takže to není obecný OO procesor, ale Java procesor. Takových pokusů už bylo hodně a nikdy to nedopadlo. To zrychlení 10x je taky dobrý vtip, viděl jsi program, na kterém to testovali? Takových mikrobenchmarků se dá vyrobit spousta, prakticky použitelné to ale není.

Kit

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #99 kdy: 22. 08. 2017, 20:46:14 »
Stačí dodržovat SOLID a ten výkon v rychlosti aplikace se dostaví.

Ne nedostaví, OOP nejde výkonu naproti. Problém je v zapouzdření dat do objektu, tozn. indirekce přístupů přes pointery a data rozházená všude možně po paměti. Pokud chceš výkon, musíš OOP opustit a použít data oriented programming:

Fígl je v tom nemít data rozházena v různých objektech, ale tam, kde se s nimi pracuje. Proto nepotřebuji ani gettery, ani settery. Prostě mám data lokální, uzavřena v objektu společně s metodami, které s nimi pracují. Nejedná se však o Active Record. O getterech a setterech se také nedá hovořit, protože názvy metod nevyjadřují, co se má dělat s atributy, ale co má dělat objekt.

qwertz

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #100 kdy: 22. 08. 2017, 20:51:50 »
Pánové, nechci vám kazit ten váš flame, takže díky za tip na PyCharm. Po pár dnech musím říct fakt dobrá volba.

A teď se zase můžete hádat dál  :D

lopata

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #101 kdy: 22. 08. 2017, 20:53:24 »
Fígl je v tom nemít data rozházena v různých objektech, ale tam, kde se s nimi pracuje. Proto nepotřebuji ani gettery, ani settery. Prostě mám data lokální, uzavřena v objektu společně s metodami, které s nimi pracují. Nejedná se však o Active Record. O getterech a setterech se také nedá hovořit, protože názvy metod nevyjadřují, co se má dělat s atributy, ale co má dělat objekt.
To je nějaký newspeak na zmatení nepřítele? Jak s tím proboha souvisí gettery a settery? Tvoje objekty nemají žádné vazby? To je totiž ten hlavní problém, v reálných aplikacích je potřeba zpracovávat různá data různých objektů, které spolu mají vzájemné vazby. I když je mi vlasně jasné, co odpovíš, nepoužíváš gettery a settery, a proto nemáš žádný problém ;D.

Honza

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #102 kdy: 22. 08. 2017, 20:57:57 »
Nevidím důvod, proč by se tím MUSELO porušit zapouzdření. Nějaký příklad?
Ono NEMUSÍ. Ale obykle to tak DOPADNE.
Díky, to mi jako odpověď úplně stačí....

Např. http://www.ee.cityu.edu.hk/~hisc/HISC.pdf
Pro Javu uvádějí naměřené zrychlení > 10x, ne nějakých 35% získaných přeorganizováním dat jako v předchozím případě. Současně podporuje všechny úrovně zapouzdření, co Java má.
Aha, takže to není obecný OO procesor, ale Java procesor. Takových pokusů už bylo hodně a nikdy to nedopadlo. To zrychlení 10x je taky dobrý vtip, viděl jsi program, na kterém to testovali? Takových mikrobenchmarků se dá vyrobit spousta, prakticky použitelné to ale není.
Já se nechtěl o tom hádat, ale aspoň jsme se dostali od "hypotetický hardware" k "není obecný OO". Dále jsem chtěl ukázat, že použití OO principů nejsou tím místem, kde se ztrácí nejvíce výkonu. 35% navíc je slabé, když ho lze zvýšit řádově, a současně zůstat OO. A v neposlední řadě je také dobré se zamyslet i nad tím důvodem, proč se aplikace píšou jako OO, ať už v jakémkoliv jazyce, když jsou vlastně pomalejší...

Pánové, nechci vám kazit ten váš flame, takže díky za tip na PyCharm. Po pár dnech musím říct fakt dobrá volba.

A teď se zase můžete hádat dál  :D
Také děkujeme a zdravíme! :)

lopata

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #103 kdy: 22. 08. 2017, 21:08:16 »
Já se nechtěl o tom hádat, ale aspoň jsme se dostali od "hypotetický hardware" k "není obecný OO". Dále jsem chtěl ukázat, že použití OO principů nejsou tím místem, kde se ztrácí nejvíce výkonu. 35% navíc je slabé, když ho lze zvýšit řádově, a současně zůstat OO.
V té prezentaci, co jsem posílal, to nebylo o 35%, ale zrychlení z 19.6 ms na 3.3 ms, to je 6x rychlejší (viz slide 101). V podstatě jenom přeorganizováním dat v paměti tak, aby ležela za sebou, dal se využít prefetch a nedocházelo k cache thrashingu.

A v neposlední řadě je také dobré se zamyslet i nad tím důvodem, proč se aplikace píšou jako OO, ať už v jakémkoliv jazyce, když jsou vlastně pomalejší...
Nikdo neříká, že je OOP špatné. Jen je dobré si uvědomit jeho limity a počítat s tím, že pokud budu muset někdy řešit výkon, tak to asi dopadne znásilněním datového modelu, protože zapouzdření dat do spousty malých objektů není z hlediska výkonu ideální.

Honza

Re:Dobré IDE pro Python a Java (případně jaký další jazyk zvolit?)
« Odpověď #104 kdy: 22. 08. 2017, 21:43:51 »
V té prezentaci, co jsem posílal, to nebylo o 35%, ale zrychlení z 19.6 ms na 3.3 ms, to je 6x rychlejší (viz slide 101). V podstatě jenom přeorganizováním dat v paměti tak, aby ležela za sebou, dal se využít prefetch a nedocházelo k cache thrashingu.
35% získali tím přeorganizováním dat. Zbytek ale byla už změna algoritmu.