Má Python budoucnost?

javaman

Re:Má Python budoucnost?
« Odpověď #240 kdy: 12. 05. 2016, 19:52:11 »

Používání self jako prvního parametru má mnoho výhod. Metody se díky tomu neliší od jiných funkcí. Jak píše Bystroushaak, umožňuje to například dekorátorům přistupovat k předávané instanci. Další výhoda je, že mohu metodu volat způsobem Trida.metoda(instance_jine_tridy, dalsi parametry). V jiných jazycích to jde také, ale ne tak přímočaře.

Takže psaní self jako retard pořád dokola ti přijde normální? Dekorátory v Javě teda vlastně nefungují, ne? A ta poslední konstrukce je luxusní, tu chci používat! :D

V Javě se zase "this" schizofrenně někdy píše a někdy ne. Přitom se to chová stejně. To ti přijde normální?

Jak někdy? Jakože máš metody, kde je parametr občas this? :D To jsem fakt neviděl. A nevím, co to má společného s bludy. Kite, vem si léky!


gl

Re:Má Python budoucnost?
« Odpověď #241 kdy: 12. 05. 2016, 19:52:43 »
Jestli to nebude tím, že jsou daleko schopnější než ty v Pythonu. Takže mi chceš říct, že jednoduché věci jako dekorátor v Pythonu neumí?

Možná že to jde pomocí nějakého aop frameworku, ale určitě je to tak komplikované, že se to běžně nepoužívá. Javu moc dobře neznám. Možná se mýlím.

Re:Má Python budoucnost?
« Odpověď #242 kdy: 12. 05. 2016, 19:53:48 »
Já jen - všímáte si, že diskuze jde přesně tím směrem, co jsem popsal? Dokonce už je tu i javaman, který nám udělal kázání o lopatách co pracují za polovinu.

Už si skoro říkám, jestli by to nestálo za napsání článku, který by se pak vždycky jen odkazoval, protože teď se to bude vše znova opakovat. Pokolikáté už za poslední půlrok? Potřetí?

http://forum.root.cz/index.php?topic=12988.0

Jsem vychazel z wiki:
Citace
Metaobjects are examples of the computer science concept of reflection, where a system has access (usually at run time) to its internal structure.
...
A metaobject protocol (MOP) provides the vocabulary to access and manipulate the structure and behavior of objects.

To tedy dost pusobi jako reflexe ci prace s bytekodem, pokud to mam vztahnout k Java svetu. Ale je to asi jedno, me neslo o ty metaobjekty ani metaobjektovy protokol, ale o to inovativni jmeno: __*__, ktere bych nikdy neoznacil za hezke - coz uznavam je asi subjektivni a pravdepodobne o zvyku.

Reflexe nepracuje s bytekódem, ale přímo s objekty, které můžou zkoumat svojí vlastní strukturu, třídy, chain dědičnosti a různě jí upravovat. Někdy to může ušetřit kód pomocí pokročilé magie, jindy tě to může střelit do nohy.

Sice jsem odkazoval jen slovo „metaobjektového“ (protože to spousta lidí nezná), ale důležitý je celý zbytek té věty, hlavně to „protokolu“. V pythonu magické metody vytvářejí standardizovaný protokol pro komunikaci s objekty definující často používané akce. Dalo by se říct, že je to takové rozhraní pro standardní funkcionalitu, které podporuje sám jazyk. Třeba __str__() se zavolá při konverzi na string a __repr__() při „zobrazení“ objektu v konzoli atd..

Jestli to nebude tím, že jsou daleko schopnější než ty v Pythonu. Takže mi chceš říct, že jednoduché věci jako dekorátor v Pythonu neumí?

Proč vůbec diskutuješ o věcech, kterým od pohledu nechápeš?

V Javě ani Pythonu by se k atributům objektu z vnějšku přistupovat nemělo. A to ani prostřednictvím getterů/setterů. Mělo by se pracovat přímo s objektem, tedy volat jeho metody, které data uvnitř objektu zpracovávají jak pro vstup, tak i pro výstup.

V pythonu je to imho jedno, protože podporuje properties. Ve chvíli, kdy potřebuješ přístup omezit či nějak transformovat, můžeš tak učinit přes property, či přes deskriptory.

Osobně mi snaha omezovat přístup a myslet si, že tím zlepšuji bezpečnost (nebo co vlastně?) jako nesmysl. Je stejně absurdní, jako snaha některých výrobců omezovat co můžu dělat s mobilem který si koupím a co už ne. Když prostě budu chtít znásilnit nějaký objekt a vlézt si do něj, tak to udělám ať už v javě, nebo kdekoliv jinde, i kdybych to měl dělat scannováním a živou úpravou /dev/mem.

V Javě se zase "this" schizofrenně někdy píše a někdy ne. Přitom se to chová stejně. To ti přijde normální?

To proto, že java nemá žádnou vnitřní logiku, ani krásu. Celé to tak je, prostě proto že to tak někdo chtěl (navíc někde v C++, nebo ještě hlouběji v historii), nikoliv proto, že by to dávalo vnitřní smysl. Neroste to z žádného silnějšího vnitřního konceptu, jako některé jiné jazyky (smalltalk, lisp, do jisté míry i python, který vše staví na dictech).

javaman

Re:Má Python budoucnost?
« Odpověď #243 kdy: 12. 05. 2016, 19:59:29 »
Jestli to nebude tím, že jsou daleko schopnější než ty v Pythonu. Takže mi chceš říct, že jednoduché věci jako dekorátor v Pythonu neumí?

Možná že to jde pomocí nějakého aop frameworku, ale určitě je to tak komplikované, že se to běžně nepoužívá. Javu moc dobře neznám. Možná se mýlím.

Tak záleží na tom, co chceš. Normálně dekorátor není moc potřeba. Ale když bys ho chtěl se stejnou prací jako v Pythonu, tak samozřejmě uděláš anotace a normální aspekt. Nic jednoduššího nevymyslíš. Když chceš ale něco složitějšího, tak ti Java nabízí další možnosti.

Já jen - všímáte si, že diskuze jde přesně tím směrem, co jsem popsal? Dokonce už je tu i javaman, který nám udělal kázání o lopatách co pracují za polovinu.

Jestli to nebude tím, že jsou daleko schopnější než ty v Pythonu. Takže mi chceš říct, že jednoduché věci jako dekorátor v Pythonu neumí?

Proč vůbec diskutuješ o věcech, kterým od pohledu nechápeš?

Tak když se tu pokaždé vyrojí pár matláků, kteří neumí ani Python a začnou se navážet do Javy, která je úrovní úplně jinde. Co mám dělat? Právě jedině to, že berete tak půlku, je reálný fakt, který mě hřeje!

Asi máš špatný pohled.

David

Re:Má Python budoucnost?
« Odpověď #244 kdy: 12. 05. 2016, 20:04:04 »
Obdivuju vaše zapálení do takovýhle diskuze :D Zkuste nějak zobecnit Python×ostatní programovací jazyky, zajímalo by mě to.


BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Má Python budoucnost?
« Odpověď #245 kdy: 12. 05. 2016, 20:06:13 »
Já jen - všímáte si, že diskuze jde přesně tím směrem, co jsem popsal?
No, bacha na to. Jednou jsem se také pokoušel zeptat, proč duck-typing, a k čemu má Python typy. Ve výsledku jsem se jen dozvěděl, že jsem blbec a trollím. Tak si nestěžuj.

Kit

Re:Má Python budoucnost?
« Odpověď #246 kdy: 12. 05. 2016, 20:08:32 »
MVC design pattern oddeluje business logiku aplikace (controller) od statove/datove prezentace (model) a prezentace uzivateli (view)
Zkracene view zobrazuje userovi aktualni stav modelu, user klepe na buttonky, cimz controller meni model a ten se zase zobrazuje uzivateli.

Nepleteš si to náhodou s MVP? Jsou to přece jen trochu odlišné architektury.

MVC není design patternem, ale architekturou, která se v OOP používá na mnoha úrovních. A to jak na úrovni namespaces, tak i na úrovni každého jednotlivého objektu, kde modelem jsou datové struktury, controllerem metody modifikující stav (včetně setterů) a viewem metody prezentující stav (včetně getterů).

Kit

Re:Má Python budoucnost?
« Odpověď #247 kdy: 12. 05. 2016, 20:18:29 »

Používání self jako prvního parametru má mnoho výhod. Metody se díky tomu neliší od jiných funkcí. Jak píše Bystroushaak, umožňuje to například dekorátorům přistupovat k předávané instanci. Další výhoda je, že mohu metodu volat způsobem Trida.metoda(instance_jine_tridy, dalsi parametry). V jiných jazycích to jde také, ale ne tak přímočaře.

Takže psaní self jako retard pořád dokola ti přijde normální? Dekorátory v Javě teda vlastně nefungují, ne? A ta poslední konstrukce je luxusní, tu chci používat! :D

V Javě se zase "this" schizofrenně někdy píše a někdy ne. Přitom se to chová stejně. To ti přijde normální?

Jak někdy? Jakože máš metody, kde je parametr občas this? :D To jsem fakt neviděl. A nevím, co to má společného s bludy. Kite, vem si léky!

Jo tak tobě vadí self jako formální parametr metody? Vždyť je to jen jedno slovo, které ti tam lepší editor automaticky sám napíše. Aspoň je explicitně vidět, s jakými daty ta metoda pracuje.

"this." se v Javě píše jako prefix názvu atributu objektu. Tedy někdy se píše, jindy ne. "self." je v Pythonu povinné.

javaman

Re:Má Python budoucnost?
« Odpověď #248 kdy: 12. 05. 2016, 20:21:30 »
Obdivuju vaše zapálení do takovýhle diskuze :D Zkuste nějak zobecnit Python×ostatní programovací jazyky, zajímalo by mě to.

Na malý skriptíky je Python fajn. Ale jak to naroste, je to na vyhození.


Používání self jako prvního parametru má mnoho výhod. Metody se díky tomu neliší od jiných funkcí. Jak píše Bystroushaak, umožňuje to například dekorátorům přistupovat k předávané instanci. Další výhoda je, že mohu metodu volat způsobem Trida.metoda(instance_jine_tridy, dalsi parametry). V jiných jazycích to jde také, ale ne tak přímočaře.

Takže psaní self jako retard pořád dokola ti přijde normální? Dekorátory v Javě teda vlastně nefungují, ne? A ta poslední konstrukce je luxusní, tu chci používat! :D

V Javě se zase "this" schizofrenně někdy píše a někdy ne. Přitom se to chová stejně. To ti přijde normální?

Jak někdy? Jakože máš metody, kde je parametr občas this? :D To jsem fakt neviděl. A nevím, co to má společného s bludy. Kite, vem si léky!

Jo tak tobě vadí self jako formální parametr metody? Vždyť je to jen jedno slovo, které ti tam lepší editor automaticky sám napíše. Aspoň je explicitně vidět, s jakými daty ta metoda pracuje.

"this." se v Javě píše jako prefix názvu atributu objektu. Tedy někdy se píše, jindy ne. "self." je v Pythonu povinné.

Samozřejmě :D Je to hnus. Proč bych ho tam dával, když je to jasné?

Když ho potřebuješ, tak ho napíšeš, ale nikdo tě nenutí.

Youda

Re:Má Python budoucnost?
« Odpověď #249 kdy: 12. 05. 2016, 20:30:31 »
Reflexe nepracuje s bytekódem, ale přímo s objekty, které můžou zkoumat svojí vlastní strukturu, třídy, chain dědičnosti a různě jí upravovat. Někdy to může ušetřit kód pomocí pokročilé magie, jindy tě to může střelit do nohy.
"Pokrocila magie" na usetreni kodu je synonymum pro termin "Neskutecna prasecina, ktere nerozumi ani autor pul roku po napsani".

Kdyz uz je potreba "pokrocile carovat", tak jedine a pouze ve forme standardizovane a dokumentovenho frameworku. Napr. Spring IoC je presne tento pripad, Spring pres reflection API sestavuje aplikaci ze Spring Beanu behem inicializace kontejneru.
Pokusy vyrabet si vlastni IoC primym matlanim na reflection API je na ranu bejkovcem.

Sice jsem odkazoval jen slovo „metaobjektového“ (protože to spousta lidí nezná), ale důležitý je celý zbytek té věty, hlavně to „protokolu“. V pythonu magické metody vytvářejí standardizovaný protokol pro komunikaci s objekty definující často používané akce. Dalo by se říct, že je to takové rozhraní pro standardní funkcionalitu, které podporuje sám jazyk. Třeba __str__() se zavolá při konverzi na string a __repr__() při „zobrazení“ objektu v konzoli atd..
Takove "rozhrani pro standardni funkcionalitu" pristupne jsou prosim V Jave metody poskytovane toplevel tridou Object, napr toString(). A neni potreba vytvaret ohavnosti typu __str__().
Kdykoliv jsem nekdy nekde v nejakem jazyce videl prefix "_", vzdycky to bylo zoufale reseni jak nekam strcit magicky keyword tak, aby nekolidoval s normalnimi nazvy promennych a funkci.

Osobně mi snaha omezovat přístup a myslet si, že tím zlepšuji bezpečnost (nebo co vlastně?) jako nesmysl. Je stejně absurdní, jako snaha některých výrobců omezovat co můžu dělat s mobilem který si koupím a co už ne. Když prostě budu chtít znásilnit nějaký objekt a vlézt si do něj, tak to udělám ať už v javě, nebo kdekoliv jinde, i kdybych to měl dělat scannováním a živou úpravou /dev/mem.
Samozrejme, zvysuje to bezpecnost proti nechtene zmene neceho, co z vnejsku meneno byt nema. Kdyz mam v objektu atribut drzici hash seed, no tak bych byl velice nerad, at to nekdo, trebas omylem zmeni. Privatni metody dtto, kdyz potrebuju aby interface metoda drzela sekvenci prikazu, jinak vybuchnou Dukovany, tak muzu bud:
- udelat interface metodu jako clovek, ktera bude obsahovat hromadu malych snadno udrzovatelnych privatnich metod
- nebo napsat spagetovou hruzu

To proto, že java nemá žádnou vnitřní logiku, ani krásu. Celé to tak je, prostě proto že to tak někdo chtěl (navíc někde v C++, nebo ještě hlouběji v historii), nikoliv proto, že by to dávalo vnitřní smysl. Neroste to z žádného silnějšího vnitřního konceptu, jako některé jiné jazyky (smalltalk, lisp, do jisté míry i python, který vše staví na dictech).
Java ma vnitrni logiku velice jednoduchou a velice elegantni. Dokonce az moc jednoduchou, slozitejsi veci se resi na na urovni design patternu, JSR, Frameworku typu Spring a kontejneru typu OSGi.
Ohavnosti jako __str__() nebo ducktyping tam opravdu nenajdes.
Je velice malo vyjimek z objektoveho paradigmatu, (napr. primitivni typy) zapricinene technologickymi omezenimi (int[] je zkratka rychlejsi nez LinkedList<Integer>). Nebo napriklad problemy s finally bloky, nebo s resources typu otevreny file descriptor, o ktery se garbage collector nepostara.

gl

Re:Má Python budoucnost?
« Odpověď #250 kdy: 12. 05. 2016, 20:37:03 »
Tak záleží na tom, co chceš. Normálně dekorátor není moc potřeba. Ale když bys ho chtěl se stejnou prací jako v Pythonu, tak samozřejmě uděláš anotace a normální aspekt. Nic jednoduššího nevymyslíš. Když chceš ale něco složitějšího, tak ti Java nabízí další možnosti.

Mluvíš o tomhle? http://www.learnpython.org/en/Decorators

Youda

Re:Má Python budoucnost?
« Odpověď #251 kdy: 12. 05. 2016, 20:38:48 »
MVC design pattern oddeluje business logiku aplikace (controller) od statove/datove prezentace (model) a prezentace uzivateli (view)
Zkracene view zobrazuje userovi aktualni stav modelu, user klepe na buttonky, cimz controller meni model a ten se zase zobrazuje uzivateli.

Nepleteš si to náhodou s MVP? Jsou to přece jen trochu odlišné architektury.

MVC není design patternem, ale architekturou, která se v OOP používá na mnoha úrovních. A to jak na úrovni namespaces, tak i na úrovni každého jednotlivého objektu, kde modelem jsou datové struktury, controllerem metody modifikující stav (včetně setterů) a viewem metody prezentující stav (včetně getterů).

https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
Cituji: Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces on computers.

https://en.wikipedia.org/wiki/Architectural_pattern
Cituji: Architectural patterns are similar to software design pattern but have a broader scope. The architectural patterns address various issues in software engineering, such as computer hardware performance limitations, high availability and minimization of a business risk. Some architectural patterns have been implemented within software frameworks.

Tedy MVC je obecne architecture pattern (protze se muze tykat treba i hardwaru). Design pattern je podmnozinou Architecture patternu.

K puvodnimu tematu. Ze nekto udela SW architekturu podle MVC, tak to neznamena, ze je to z pohledu OOP spatne. MVC je u jednu uroven abstrakce vyse.

BoneFlute

  • *****
  • 1 983
    • Zobrazit profil
Re:Má Python budoucnost?
« Odpověď #252 kdy: 12. 05. 2016, 20:40:20 »
Ohavnosti jako __str__() nebo ducktyping tam opravdu nenajdes.
Docela mě dráždí, jak slučuješ estetickou záležitost (__str__()) a technologickou záležitost (ducktyping versus nominální typování).

javaman

Re:Má Python budoucnost?
« Odpověď #253 kdy: 12. 05. 2016, 20:44:02 »
Tak záleží na tom, co chceš. Normálně dekorátor není moc potřeba. Ale když bys ho chtěl se stejnou prací jako v Pythonu, tak samozřejmě uděláš anotace a normální aspekt. Nic jednoduššího nevymyslíš. Když chceš ale něco složitějšího, tak ti Java nabízí další možnosti.

Mluvíš o tomhle? http://www.learnpython.org/en/Decorators

Jistě, normální Python dekorátor.

Youda

Re:Má Python budoucnost?
« Odpověď #254 kdy: 12. 05. 2016, 20:46:24 »
Ohavnosti jako __str__() nebo ducktyping tam opravdu nenajdes.
Docela mě dráždí, jak slučuješ estetickou záležitost (__str__()) a technologickou záležitost (ducktyping versus nominální typování).

Oba pripady spadaji do souhrnne mnoziny "znouzectnost".

__str__() protoze python nema toplevel class
ducktyping() - protoze typovani neni, tak budeme typ hadat a doufat, ze nekoho jineho nenapadlo napsat podobnou tridu.