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 ... 92 93 [94] 95 96 ... 618
1396
Vývoj / Re:Co si myslíte o OOP?
« kdy: 22. 01. 2019, 08:41:31 »
Dobré přednášky o pokročilejších vlastnostech má David Beazley.
No, když tyhle "pokročilejší" věci porovnám třeba s C++, tak bych je rozhodně nenazval "komplexní" ;)

(to není kritika, to je dobře)

1397
Vývoj / Re:Co si myslíte o OOP?
« kdy: 22. 01. 2019, 00:23:45 »
Mas pravdu, v Erlangu neni objekt. Vazu na to diskusi Co je to OOP. V Erlangu beru proces jako actor nebo taky jako 'aktivni' objekt. Neco co je bliz OOP myslence od Kaye nez objekt jako modul v tom cemu ty rikas zparchantele oop.
Ok, tak to bylo nedorozumění, v tom případě to chápeš naprosto správně. Omlouvám se.

1398
Vývoj / Re:Co si myslíte o OOP?
« kdy: 22. 01. 2019, 00:03:16 »
Dik, pochopils.
Zkus pls psát trochu explicitněji a přesněji. Viz "V Erlangu je objekt [...]" - v Erlangu žádný objekt není, takže těžko odhadovat, o čem mluvíš...

1399
Vývoj / Re:Co si myslíte o OOP?
« kdy: 21. 01. 2019, 23:05:01 »
Mimochodem, pokud máš třeba hru, ve které běží v jednom vlákně herní logika a ve druhém GUI a předávají si data přes nějakou frontu/buffer, tak z pohledu původního OOP je to vlastně de facto systém o dvou objektech, které si posílají zprávy.

Z neznámého důvodu je tam teda taky na jiné úrovni abstrakce jakejsi bordel, kde se mnohokrát opakuje slovo "class" a "object", ale to žádný třídy a objekty nejsou, to je jenom nějaká změť těžko uchopitelných pomateností ;)

1400
Vývoj / Re:Co si myslíte o OOP?
« kdy: 21. 01. 2019, 22:51:47 »
To, ze o sobe nevedi, je problem kuchare. Kdyz je to schopny nejak zaridit, ze vsechno funguje, nevidim problem.
Jenže ve zparchantělém OOP žádný Kuchař (jako entita která něco dělá, tj. aktor[1]), není. Je jenom KuchařskáKniha, což je takový (nepopírám) docela fikaný protokol, postavený na tom, že kolem Knihy chodí lidi (to jsou tam ti aktoři!) a přesně podle návodu cosi do knihy píšou. Každej z těch různých lidí je občas kuchařem, někdy i víc z nich zaráz atd.

Mame jen omezeny pocet jader (CPU), tak se jadra prevlekaji, chvili hraji cisnika, chvili kuchare.
No tak to každopádně. Určitě budeme mít víc aktorů než jader. V tom není problém. Problém je v tom, že to probublává do programu. Pokud by se to dělo způsobem, o kterém programátor vůbec neví a neřeší to, bylo by to naprosto OK (proto jsou taky goroutiny v tomhle smyslu naprosto OK)

Pro me je objekt vlastne jen datova struktura + nejake picarny kolem. A ted do me :-)
Tak jasně no, to nejsi sám. Však když ti to vyhovuje, není problém, užij si to! :) Akorát to prostě vůbec neodpovídá ani základním myšlenkám původního OOP. Je to prostě takové nové zparchantělé OOP© ;)

===
[1] BTW, všimněme si, že "jednotka, která něco dělá" je vlastně doslovný překlad slova "actor" ;)

1401
Vývoj / Re:Co si myslíte o OOP?
« kdy: 21. 01. 2019, 22:20:22 »
Ten objekt se s tim musi nejak popasovat. Kdyz kuchar vari pizzu a zadas mu jeste varit omacku, tak bud na to ma kapacity a dela 2 veci soucasne (na dnesnich PC proc ne), nebo muze vratit nejake ERROR_BUSY pripadne 2. zadost zaradi do fronty a vyzvedne ji az po vyrizeni 1. zadosti.
Přesně tak! Ale má to fungovat tak, že já kuchaře o něco požádám a on to buď umí, nebo neumí atd. A ne že se já (vlákno) stanu kuchařem a uvařím si to sám, přičemž kuchařská kniha je napsaná tak, aby dva lidi (vlákna) mohli vařit zaráz, i když o sobě navzájem vůbec nic neví (sdílí jenom zámek).

Chápej, rozdíl je právě v tom, jestli je objekt "jednotka kódu" nebo "jadnotka výpočtu" (neboli "TA entita, která vyvíjí nějakou činnost"). Ve zparchantělém OOP je "objekt" ve skutečnosti spíš modul (a proto někteří lidi moc nechápou, jakej - a vůbec proč - by měl být mezi modulem a objektem rozdíl).

1402
Vývoj / Re:Co si myslíte o OOP?
« kdy: 21. 01. 2019, 22:10:48 »
Právě proto, že v Erlangu[1] je to přesně naopak, než píšeš
Jo, teď mi došlo, že tady už jsi možná nemluvil o modulech, z kontextu to není poznat. Pokud ne, tak sry, pak to citovaný beru zpět :)

1403
Vývoj / Re:Co si myslíte o OOP?
« kdy: 21. 01. 2019, 22:03:29 »
Moduly a objekty mi pripadaji jako totez.
Jako totéž to může připadat právě kvůli tomu zparchantělému OOP, co se rozšířilo jako mor a které považuje za normální lézt do jednoho objektu z víc vláken, takže pojem objektu jako entity, která něco dělá, začíná ztrácet smysl.

Pro zjednodušení si stačí představit, že každý objekt má vlastní vlákno. Když objektu Kuchař pošlu zprávu [vař: pizzu], tak vaří pizzu a těžko může zároveň vařit omáčku. Zparchantělé OOP udělalo z objektu Kuchař jenom KuchařskáKniha, ve které si listuje kdo chce, co chce si sám uvaří a ještě ke všemu si stav uvařeného všichni zapisují na jedno místo, o které se perou. Naprosto něco jinýho než původní myšlenka ("objects being like biological cells").

Alespon v erlangu je objekt nejaka isolovana vypocetni jednotka (actor, agent, proces, vlakno, apod.) a ne pouze obycejny dict v prestrojeni.
Právě proto, že v Erlangu[1] je to přesně naopak, než píšeš, je Erlang původní myšlence OOP paradoxně blíž než ty slavné "OOP jazyky".

V Erlangu:

modul = množina funkcí, nástroj pro organizaci kódu do souvisejících celků, tj. "neživá věc", předpis

proces (v tomhle smyslu ekvivalent objektu) = entita, která drží stav, přijímá zprávy a provádí výpočet, tj. "žije", je to "organismus" (viz biologická inspirace původního OOP)

Jo, občas dává smysl mít modul mapovaný na proces 1:1 (často je to obdoba patternu "singleton"), ale pořád jsou to dvě totálně rozdílné věci s naprosto jiným účelem a dobře to pochopit je pro programování v Erlangu naprosto klíčový, bez toho nedá člověk ani ránu.

[1] tady a všude níž můžeme s/Erlang/Elixir/

=====

P.S. Hele, bez urážky, mám pocit, že ten Erlang a Elixir moc neznáš, bylo by imho lepší, kdybys o nich moc nepsal, nebo aspoň vždycky připsal aspoň "IIRC". Těma chybnýma kategorickýma tvrzeníma zbytečně mateš lidi...

1404
Vývoj / Re:Co si myslíte o OOP?
« kdy: 21. 01. 2019, 21:30:29 »
zvláště u poměrně komplexního pythonu
Co je na Pythonu komplexního?

1405
Vývoj / Re:Co si myslíte o OOP?
« kdy: 21. 01. 2019, 20:30:51 »
Je to pouzitelne. Pouzivam to bezne pri vyvoji webu. Main aplikace porovnava cas py a pyc souboru a kdyz je py novejsi, tak modul, typicky nejaky handler requestu, automaticky reloadne. Nemusim kvuli tomu restartovat celou aplikaci.
No jistě, funguje ti to proto, že handler requestu je "fire and forget". Pokud by to byl modul, který pořád běží (někdo někde, nikdo neví kde všude ho přímo nebo nepřímo používá), tak by ti to nefungovalo.

1406
Vývoj / Re:Co si myslíte o OOP?
« kdy: 20. 01. 2019, 16:06:41 »
Ok, Syntakticka cast elixiru je syntakticky cukr nad skoro lispem.
Já ti pořád snáším argumenty, proč to není pravda (resp. je to zavádějící) a ty to pořád opakuješ :) Buď si ten "skoro lisp" nadefinuješ tak, že "syntaktický cukr nad skoro lispem" bude všechno, nebo to nebude Elixir. Tak jako tak není to tvoje tvrzení k ničemu dobré, protože víc zamlžuje než objasňuje.

Mohli bysme jít do detailů a ukázat, že Elixir má věci, které v Lispu nemají ekvivalent, ale upřímně říkám, že s tebou se mi do toho nechce, nevidím v tom smysl.

Skoro lispem protoze stale micha infix a prefix syntax. Infix v pripade toho seznamu. Mohl by ho reprezentovat jako (, 1 2 3) misto infixovyho [1,2,3]. Tvuj priklad kodu mi pripada, ze nedela totez co tvuj prechodi priklad. Autori se rozhodli ze nekdy je lepsi citelnost nebo vykonnost nad jednoduchosti a proto zamichali infix a prefix zapis v elixir ast.
Abych to (naposledy) shrnul: Nejde o infix a prefix. Neukazoval jsem kód, ale AST. A není to totéž AST, protože jsem ukazoval dvě představitelné varianty, jak by se dal do AST zakódovat jeden elixirovský výraz. A rozhodnutí, který z těch dvou bude skutečně použit, je arbitrární. Tím argumentuju pro to, že narozdíl od Lispu, v Elixiru není intuitivně jasné, jak bude AST vypadat, což je podstatný rozdíl. Proto považuju tvoje tvrzení "je to vlastně Lisp" za zavádějící.

1407
Vývoj / Re:Co si myslíte o OOP?
« kdy: 20. 01. 2019, 15:30:55 »
Ještě přípodotek k tomuhle:
2. Elixir má spoustu featur a některé jsou dost unikátní. Např. posílání zpráv, procesy, atd. Jestli ti v něčem přijde jako "zakuklený lisp", tak jenom na nejnižší úrovni - a na té je to (v nějakém, příliš obecném smyslu) prakticky každý jazyk. Mohl bys klidně říct, že "všechno je zakuklený lambda kalkul". Takové tvrzení není k ničemu dobré.
Kdybys napsal, že Elixir je syntaktický cukr nad Erlangem, tak by to bylao jiný kafe. Tohle tvrzení se objevuje relativně často a je prokazatelně nepravdivé. Viz např. https://joearms.github.io/published/2013-05-31-a-week-with-elixir.html (přímo od Armstronga, takže celkem autoritativní ;) ). Jediný příklad za všechny:
Kód: [Vybrat]
In Erlang FORMS are not EXPRESSIONS.
(disclaimer: ten článek je dost starý a některé věci už pro aktuální Elixir nemusí platit)

1408
Vývoj / Re:Co si myslíte o OOP?
« kdy: 20. 01. 2019, 15:22:29 »
Quasiquotace nebo quotace je detail. Quasi je obecnejsi. Ale kdyz lidi rikaji quotace, pravdepodobne mysli quasi. Jen pro upresneni.
Ok, tohle upřesnění může mít smysl.

Elixir je syntakticky cukr nad ast [...] Dalo by se rict, ze je to instance Greenspunova desateho pravidla.
https://en.m.wikipedia.org/wiki/Greenspun%27s_tenth_rule
S tímhle nemůžu souhlasit, hlavně ze dvou důvodů:

1. je to tak strašně obecné tvrzení, že těžko říct, co tím myslíš. Je to jako když někdo řekne "Češi jsou [...]". Nevím, jestli myslíš "většinu aspektů", "všechny aspekty" nebo "některé aspekty" jazyka...

2. Elixir má spoustu featur a některé jsou dost unikátní. Např. posílání zpráv, procesy, atd. Jestli ti v něčem přijde jako "zakuklený lisp", tak jenom na nejnižší úrovni - a na té je to (v nějakém, příliš obecném smyslu) prakticky každý jazyk. Mohl bys klidně říct, že "všechno je zakuklený lambda kalkul". Takové tvrzení není k ničemu dobré.

Ta transformace z elixiru do de facto lispu je komplikovana kvuli vsemoznym infix operatorum, ktery se akorat prevedou na prefiz operatory. Je to krasne videt na prikladu co jsi postnul.
Právě na tom příkladu je vidět, že to není tak, jak píšeš. Proč se tam to "[1,2|_]" nepřevede třeba na
Kód: [Vybrat]
{:|, [], [
  [1,2],
  {:_, [], Elixir}
]}
? No, protože se tak autoři jazyka z nějakých důvodů rozhodli. A klidně se mohli rozhodnout jinak. Dokud se s tím jejich rozhodnutím neseznámíš, nevíš.

Nekdy to delam tak ze poukazu na nejasny pouziti vyrazu. Nekdy to pomuze, jindy to urazi. Neminim to jako utok.
V pohodě, za to jsem vždycky vděčný. Akorát, upřímně řečeno, u tebe to na mě často nepůsobí jako upřesnění, ale spíš jako zamlžení.

Predtim jsem upresnoval definici co to je makro.
No, to je přesně ten případ. Nepřijde mi, že bys to nějak upřesnil. Kdybys to chtěl upřesnit, mohl's napsat něco jako "maker máme X typů, jsou to [...] a rozdíl mezi nimi je v [...] přičemž jazyk Z má makra typu [...]" apod.

1409
Vývoj / Re:Co si myslíte o OOP?
« kdy: 20. 01. 2019, 13:14:49 »
A tohle už jenom fakt na okraj, jako ilustrace, jak v těch pojmech děláš zmatek a je obtížný ti rozumět:

V tomhle pripade nequotuju AST
AST se nequotuje. AST je výsledkem quotace. Quotuje se (platný) výraz (jazyka).

1410
Vývoj / Re:Co si myslíte o OOP?
« kdy: 20. 01. 2019, 12:47:04 »
V elixiru to jsou protocoly a jiny struktury, ne classy, ale nic to nemeni na to, ze jsou implementovany az v elixiru pomoci maker.
Nevím, o čem přesně mluvíš. No třeba "defprotocol" je makro, no. A co z toho má plynout? Nevím, kam míříš.

Pomoci quote a unquote delas v elixiru quasiquotaci. Klasicka quotace neni dostatecna.
Pojem "quasiquotace" slyším poprvé. Jestli rozdíl mezi quotací a quasi-quotací má být v tom, že do toho druhýho můžeš dávat parametry, tak samozřejmě. Makra bez parametrů by byla dost naprd, to je jasný. A proč to říkáš?

Priklad byl na quotaci stringu, kterou jsi nepochopil.
Pochopil, ale nepřijde mi to jako dobrej příklad. Je srozumitelnej jenom tomu, kdo už ví, co makra jsou, a najde si to v tom.

Elixir AST je vlastne lisp, az na druhy parametr coz je nejaky context.
To právě imho není vždycky pravda. AFAIK, v Lispu je vždycky jasný, jak AST pro nějaký výraz bude vypadat. V Elixiru je to trochu komplikovanější - různé struktury se převádí na různá AST data, z prstu si to nevycucáš, musíš si to buď zkusit, nebo si to najít v dokumentaci. Např.:

Kód: [Vybrat]
iex(2)> quote do [1,2,3] end
[1, 2, 3]
iex(3)> quote do [1,2|3] end
[1, {:|, [], [2, 3]}]
iex(4)> quote do [1,2|_] end
[1, {:|, [], [2, {:_, [], Elixir}]}]
- tady prostě musíš vědět, že "|" se do AST převede zrovna takhle. AST by klidně mohlo vypadat klidně jinak. Úplně 100%ně intuitivní to není.

Elixir je syntakticky cukr nad timhle jednoduchym AST.
Jako celý Elixir? To rozhodně není pravda. Některé věci jsou v Elixiru samozřejmě implementované pomocí maker. Proč ne, když tam ta makra jsou a dává to smysl?

https://hackernoon.com/understanding-elixir-macros-3464e141434c
Proč mi tenhle link dáváš? Já vím, k čemu se makra v Elixiru používají, pracuju s nima často.

----
Vůbec celkově nechápu, co se vlastně snažíš říct - jestli jenom upřesňuješ něco z toho, co jsem řekl, nebo něco vyvracíš, nebo jenom tak plkáme. Zkus být trochu explicitnější, jestli chceš o něčem diskutovat - pokud možno zkus prosím použít věty jako "v tomhle nemáš pravdu", "tohle bych upřesnil" apod. :)

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