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 ... 91 92 [93] 94 95 ... 618
1381
Vývoj / Re:Co si myslíte o OOP?
« kdy: 24. 01. 2019, 15:02:12 »
Node.js neni univerzalni, je orientovan na web.
Webem to možná začalo, dneska už je to stejně univerzální platforma jako Python.

A i kdyby: devět let, to je v IT celá věčnost.

1382
Vývoj / Re:Co si myslíte o OOP?
« kdy: 24. 01. 2019, 13:44:22 »
jestli je tím myšleno asyncio, tak tady je IMO python hodně pozadu, srovnejte s erlangem, haskellem a asi go
Co Erlang a Haskell... Node.js už tady máme 9 (slovy: devět) let! ;)

1383
Vývoj / Re:Co si myslíte o OOP?
« kdy: 24. 01. 2019, 13:42:57 »
Az nastane cas na posilani zprav mezi objekty, python prijde s flexibilnim funkcnim resenim. Ted je na poradu dne spise asynchronni komunikace, kterou python pred casem adoptoval a ted se ladi.
S tím se asi nedá nesouhlasit. Stejně jako s tím asyncio, kdy Python teď ladí něco, co jinde už deset let funguje :) Zasílání zpráv je už teď (Pykka), akorát je to neúplná omezená implementace Akka, což je neúplná omezená implementace toho, co má Erlang víc než dvacet let :)

Takže jo, možná za deset let Python nějakou aspoň jakžtakž použitelnou implementaci mít možná bude. (Teda za předpokladu, že benevolentní diktátor nesdělí poddaným Pravdu, že to je od základů špatný přístup a proto to v Pythonu nikdy nebude :) )

1384
Vývoj / Re:Co si myslíte o OOP?
« kdy: 24. 01. 2019, 10:31:36 »
Protoze kdyz scitam objekt 1 + objekt 1, tak to typicky nechci zatezovat pomalou komunikaci.
To ani není nutně potřeba. Zase příklad z Elixiru: komunikace pomocí zpráv se dělá jenom mezi procesy. V rámci jednoho procesu se dělá (víceméně) standardní volání funkcí.

Jinak ale celkem souhlas se vším, co píšeš.

1385
Vývoj / Re:Co si myslíte o OOP?
« kdy: 24. 01. 2019, 09:18:26 »
Bud chci vykon nebo flexibilitu, ale ani jednim nenarusim paradigma proceduralniho/oop/funkcionalniho programovani. Posilani zprav je flexibilni, ale ani volanim metod nenarusim oop. Jestli je objekt autonomni nebo ne zalezi na jeho implementaci a ne na zpusobu, jakym komunikuje.
Ale jistě, pokud chceš, můžeš všechno. Ale pokud máš nějaké prostředky, tak jim design přizpůsobuješ. Pokud máš jako hlavní prostředek volání metod, tak se ti prostě nebude chtít jít třeba do té distribuovanosti (a je to racionální). Navíc tě to bude motivovat udělat rozhraní objektu určitým způsobem.

Jinými slovy: pokud sis zvolil menší flexibilitu, nebudeš dělat designová rozhodnutí, která by se dobře implementovala jedině v systému s větší flexibilitou. Ne že by to nešlo, ale "nazapadá to do sebe", nemělo by to logiku.

...no a protože mainstream staví jednoznačně na volání metod, tak se v sw inženýrství prosadily metody, které tomu odpovídají. A teprve teď, později, se učíme, jak se vlastně ty víc flexibilní systémy designují a implementují (to jsou právě třeba ty microservices, které jenom málo kdo dokáže navrhnout dobře, aniž by to udělal úplně tupě).

1386
Vývoj / Re:Co si myslíte o OOP?
« kdy: 24. 01. 2019, 08:15:26 »
Rozdil je technicky, u posilani zprav muzu komunikovat skrze ruzna rozhrani, treba i socket a mit tak distribuovany system, za tuto flexibilitu se, jako vzdy, plati vykonem
To je pravda.

a navic je to komplikovanejsi na spravu.
Ne vždycky, záleží na okolnostech.

Např. v Erlangu je datový typ "Process Identifier" (PID), který se používá jako identifikátor adresáta zprávy a vždycky obsahuje i jakousi "adresu" VM, na které proces běží (v erlangovské terminologii "node"). Takže pokud chce proces A poslat nějakou zprávu procesu B, tak vůbec neřeší, kde B fyzicky běží - kód je stejný pro lokální i vzdálené volání. V principu tak můžeš libovolný proces vzít a přesunout někam jinam, bez změny kódu. Kdybys chtěl tohle udělat v systému s voláním metod, musíš mezi A a B vrazit dvě proxy. V nejhorším myslitelném případě dokonce specializované právě pro ten konkrétní objekt (call stub) a při jakékoliv změně B proxy taky překompilovat (to je pro správu dost peklo).

A tohle je právě jeden z technických důsledků toho zásadního rozdílu - předání informace se velice snadno zakóduje jakkoli (request může putovat klidně třeba mailem a A vůbec nepozná rozdíl), zatímco volání metody typicky využívá přímo instrukce procesoru, takže pokud chci udělat RPC, musím tam vrazit nějakou proxy, která to nafejkuje.

V praxi to pak dopadne tak, že když se rozhodneš monolit rozsekat na nějaké microservices (protože chceš mít tenhle buzzword v letáku), musíš:

1. systém zásadně přepsat (málo kdo to umí napsat dobře, protože to není triviální)
2. nemáš moc způsob, jak komunikaci sjednotit, takže skončíš s nějakým hrůzostrašným HTTP/JSON
3. ve finále teda jak blázen pořád převádíš interní datové struktury do JSONu a zpátky, což je ideální příležitost na domrvení dat, a třetinu energie spálíš na dumání nad tím, jak designovat HTTP endpointy
4. celé je to děsivě náročný proces jak z hlediska nároků na kvalitu designu/analýzy, tak z hlediska řízení exekuce

Srovnej s tím, že v Erlangu jenom tak "mimochodem" napsali distribuovanou databázi (Mnesia) s dost pokročilými vlastnostmi (failover, dynamické přidávání a odebírání nodů, změny způsobu replikace za běhu, ...), která je přímo součástí standardní knihovny. Protože jakmile máš podvozek, který umí skvěle distribuovat sám o sobě, není ta úloha tak těžká, spoustu problémů ti odpadne. Srovnej s mainstreamovými RDBMS, kde udělat to samý je na desetiletí a Turingovu cenu pro hlavního designéra...

(Samozřejmě, Mnesia má svoje problémy, netvrdím, že je to všespásné řešení, ale přijde mi to jako dobrá ilustrace)

Jaky je v tom rozdil ale pro navrh programu? Imho zadny, protoze z pohledu abstrakce je to to same. Tedy v pripade, ze se bude jednat o objekty v ramci jednoho programu.  U distribuovaneho systemu me to bude nutit delat co nejvetsi objekty s co nejdelsi zivotnosti.
I v rámci jednoho programu je rozdíl zásadní - buď píšu autonomní objekty, které se samy rozhodují, nebo píšu tupé recepty "když X, tak Y".

1387
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 19:53:26 »
P.S. pokud je to potřeba vyloženě polopaticky:

Mezi voláním metody a předáním zprávy je podobný rozdíl jako mezi voláním metody a HTTP requestem. Pokud někdo bude tvrdit, že volání metody a HTTP request je totéž, tak podle mě jenom zbytečně mate pojmy. Vyvrátit se mu to ale nedá, protože ten člověk prostě jenom zbytečně označuje dvě meritorně rozdílné věci (neobvykle) stejným slovem. Jeho věc.

1388
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 19:49:28 »
A ja nevidim zadnou vyhodu v tom, aby se mi do ServletDispatcheru sypal neidentifikovatelny bordel a dej se vule bozi.
Já taky ne. A proč to říkáš?

Já jsem jenom popisoval, jaký je rozdíl mezi voláním metody a předáním zprávy - že jsou to dvě zásadně odlišné věci.

Smysl one otazky spociva v tom, jaky ze je rozdil mezi synchronni zpravou a zavolanim metody.
No já myslím, že jsem to už řekl dostatečně jasně:

pokud volám metodu, tak tím bezprostředně spouštím nějaký (víc nebo míň) statický, předem daný kód. Pokud posílám zprávu, tak jenom sděluju nějakou informaci. Jak s tím příjemce informace naloží, jestli v návaznosti na to vyvine nějakou činnost nebo ne, je už na něm.

Vzhledem k tomu, jaké tohle jednoduché tvrzení pořád způsobuje vlny, by se asi slušelo dodat ještě tohle:

1. Je to rozdíl především koncepční, až podružně technický. Klíčové je, jestli je adresát "dostatečně autonomní" (ano, jsem si vědom toho, jak je to vágní), aby se "sám rozhodnul", a to "na základě informací, které jsou mu dostupné".

2. Implementované to může být technicky různě. Že je předání zprávy implementované voláním funkce/metody je irelevantní, jedná se o odlišné roviny abstrakce a buď se bavíme o jedné, nebo o druhé.[1]


[1] Je to stejné jako že si můžu v céčku implementovat Lisp, ale z toho neplyne, že C a Lisp je totéž nebo že C má všechny vlastnosti Lispu

1389
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 18:34:09 »
A kdyz zavolam metodu, co se sama interne rozhodne co udela?
Tak se na tom, co jsem napsal, nemění ani čárka.

K cemu je dobre posilat do objektu zpravu, se kterou objekt neumi pracovat? Aby mi vratil InvalidArgumentException?
Neni nahodou lepsi mit metodu se staticky typovanymi parametry, aby vubec nebylo mozne nesmyslnou zpravu objeku zaslat?
Jak kdy a jak k čemu. Je "k něčemu dobré", že můžeš http serveru poslat nevalidní request? Je "k něčemu dobré", že po něm můžeš chtít resource, který nemá, a on ti odpoví "404 not found"?

Nevím, nerozumím moc smyslu té otázky.

1390
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 18:26:24 »
Dneska je programovani zhruba na urovni pred Kopernikem, takze se od tech majoritnich cirkevnich nazoru distancuju.
Jak myslíš, no. Já bych si spíš vsadil, že to ještě v průběhu života přehodnotíš, ale třeba bych prohrál :)

1391
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 18:24:39 »
Bud mam asynchronni poslani zpravy. Fire and forget.

Nebo mam synchronni volani zpravy, totez co volani funkce nebo metody. A to jsou celkem dve zpravy. Jedna odesilajici pozadavek, druha prijimajici vysledek.
To s tím, co píšu, přímo nesouvisí.

Rozdíl je v tom, jestli se adresát zprávy autonomně rozhoduje, co udělá. Pokud volám metodu, tak se o ničem nerozhoduje, prostě se provede kód metody. To má potom různé důsledky, třeba právě v tom, jestli (jak snadno) jde udělat obecná proxy.

1392
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 17:10:48 »
Haskell je prilis striktni, neodpovida lidske intuici
Z mýho pohledu hlavně většinové programátorské intuici neodpovídá líné vyhodnocování. Většina z nás začínala a nejvíc času strávila přemýšlením v intencích "algoritmus je posloupnost kroků [...]".

Ja se majoritnich nazoru stitim. Majoritni nazor je jako lemmings nebo ovce.
Majoritní názor taky je, že je Země kulatá. Minoritní názor je, že je placka.

Kdyby záleželo na tom, co jde v čem implementovat, tak je instrukce mov ta úplně nejobecnější možná abstrakce (je výpočetně úplná, takže jde pomocí nich implementovat úplně všechno).
Ještě lepší je logický NOR, s ním si dospělej chlap vystačí ;)

Nedovedl jsem si predstavit, ze se zrovna Ty na tohle nechytnes. ;-)
Tak jasně, pro mě je to prostě srdcovka. S multiagentními systémy jsem si pohrával ještě když jsem tahal kačera po škole :)

1393
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 16:59:56 »
muzu rict, ze zavolani metody je taky poslani zpravy.
Říct to samozřejmě můžeš, ale naděláš tím víc škody než užitku, protože jsou to dva zásadně odlišné koncepty. Už jsme o tom tady mluvili: pokud volám metodu, tak tím bezprostředně spouštím nějaký (víc nebo míň) statický, předem daný kód. Pokud posílám zprávu, tak jenom sděluju nějakou informaci. Jak s tím příjemce informace naloží, jestli v návaznosti na to vyvine nějakou činnost nebo ne, je už na něm.

V nejčistší podobě je rozdíl vidět na multiagentních systémech, kde si skutečně inteligentní agenti jenom sdělují informace, upravují svoje lokální knowledge bases a podle jejich obsahu pak vyvijejí nějakou činnost.

1394
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 16:50:14 »
Stejně goroutiny/channely v Go, REST, microservices, ...
Jo, málem bych zapomněl na výpočetní clustery - tam to funguje už hodně dlouho - MPI, Hadoop, Spark, ... To je všechno o předávání zpráv mezi dost autonomními, "svéprávnými" jednotkami.

1395
Vývoj / Re:Co si myslíte o OOP?
« kdy: 23. 01. 2019, 16:47:16 »
Zalozit celou aplikaci na "posilani zprav" mezi "objekty", to se moc neuchytilo a IMO jsou k tomu dobre duvody.
Já bych to takhle příkře nestavěl. Skoro bych řekl, že naopak tenhle způsob dívání se na systémy se poslední dobou docela rozšiřuje, akorát ne na té "druhé nejnižší úrovní" (samotný programovací jazyk). Na vyšších urovních se mi ale zdá, že docela kvete.

Když se koukneš na RTOSy v embedded , tak tam jsou tasky, mezi kterými se předávají zprávy, základním stavebním kamenem. Stejně goroutiny/channely v Go, REST, microservices, ... Myslím, že ta základní cesta "rozdělíme velký systém na součásti, které spolu komunikují dobře definovanými zprávami" se naopak ukázal jako docela správná cesta - jiné způsoby ve velkých, masivně paralelních systémech dost naráží na limity toho, co jsme vůbec schopní umenežovat (z hlediska návrhu, implementace i provozu). Jak už jsem psal výš, i to rozdělení programu na dvě vlákna, která si předávají nějaká data, je vlastně ono.

Přijde mi, že OOP přišlo s hodně dobrou myšlenkou, akorát trochu moc brzo. To už se tak v IT docela často stává, že výborné myšlenky prvně zkrachují a za nějakých deset dvacet let bombasticky převálcují svět v mírně obměněné podobě :)

Stran: 1 ... 91 92 [93] 94 95 ... 618