Co si myslíte o OOP?

Re:Co si myslíte o OOP?
« Odpověď #1080 kdy: 20. 01. 2019, 12:32:18 »
v čem nemá pravdu?
Všechno jsou to takový víc nebo míň zavádějící polopravdy, u kterých (alespoň mně) vlastně není vůbec jasný, co chtěl Kadet sdělit, kromě toho, že použil správný klíčový slova. Moc nemá smysl to kdovíjak rozebírat, protože zas jenom skončíme u nekonečnýho hádání se o slova a význam vět, což mě nebaví.


Re:Co si myslíte o OOP?
« Odpověď #1081 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. :)

Re:Co si myslíte o OOP?
« Odpověď #1082 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).

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1083 kdy: 20. 01. 2019, 14:30:36 »
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. :)

Mirku, ocenuju tvuj konstruktivni styl diskuse. Narozdil od nekterych mistnich trollu, ktery by meli dostat ban nebo pres zadek.

Docela se ta nase debata zkomplikovala, tak to zjednodusim.

Quasiquotace nebo quotace je detail. Quasi je obecnejsi. Ale kdyz lidi rikaji quotace, pravdepodobne mysli quasi. Jen pro upresneni.

Elixir je syntakticky cukr nad ast co v textu vypada skoro uplne presne jako lisp. 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.

Dalo by se rict, ze je to instance Greenspunova desateho pravidla.
https://en.m.wikipedia.org/wiki/Greenspun%27s_tenth_rule

Jestli neco tvrdim, pak je to, ze si lidi delaji veci komplikovanejsi nez jsou a pak se v tom ztraci. Viz to ze je elixir komplikovanejsi lisp, ale zato je citelnejsi.

Nekdy to delam tak ze poukazu na nejasny pouziti vyrazu. Nekdy to pomuze, jindy to urazi. Neminim to jako utok.

Predtim jsem upresnoval definici co to je makro. Tvrdim ze to je nejaka funkce ktera produkuje reprezentaci programu, at uz text v pripade C preprosessoru nebo rovnou ast v pripade treba toho quote v elixiru. Ocenuji kdyz mi to nekdo zkousi vyvratit, protoze se mi tim zpresnuje definice. Neocenuji, kdyz to nekoho urazi a zacne kolem sebe kopat.

mmm

Re:Co si myslíte o OOP?
« Odpověď #1084 kdy: 20. 01. 2019, 15:04:27 »
Ty jseš dokonalý příklad Dunning-Krugera, jako vystřižený z jedné glosy o flatearthers “Retarded monkeys lecturing Nobel laureates”. No nic, každé fórum musí mít svého šaška, jde ti to lépe jež javamanovi ;)

Flateartheři jsou to herci. Ty jejich videa jsou psyop. Sám jsi retard, když tomu věříš.


mmm

Re:Co si myslíte o OOP?
« Odpověď #1085 kdy: 20. 01. 2019, 15:09:23 »
Ty jseš dokonalý příklad Dunning-Krugera, jako vystřižený z jedné glosy o flatearthers “Retarded monkeys lecturing Nobel laureates”. No nic, každé fórum musí mít svého šaška, jde ti to lépe jež javamanovi ;)

Flateartheři jsou herci. Ty jejich videa jsou psyop. Sám jsi retard, když tomu věříš.

Re:Co si myslíte o OOP?
« Odpověď #1086 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.

Re:Co si myslíte o OOP?
« Odpověď #1087 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)

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1088 kdy: 20. 01. 2019, 15:39:39 »
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.

Ok, Syntakticka cast elixiru je syntakticky cukr nad skoro lispem. 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. Podobne v clojure, coz je lisp family ale mota tam infix notaci kvuli citelnosti. Clojure vypada vic jako cisty lisp. U elixiru musi clovek vic zamhourit oci aby to videl.

Podle me je uzitecny kdyz lidi vidi ze programujou v lamda kalkulu se spoustou syntaktickyho cukru. Pak si muzou konecne uvedomit, ze lambda kalkul neni dostatecny na reprezentovani problemu realneho sveta, kde figuruje cas, ktery se v lambda kalkulu neda reprezentovat. Proto vsemozne jazyky pouze vychazeji z lambda kalkulu ale pak pridavaji dalsi featury aby se vubec s casem nebo I/O dalo pracovat.

Obecnejsi kalkul je pi kalkulus nebo petriho site a erlang/elixir pripomina vic prave je.

Nad programem v konkretnim jazyce je tezky delat zavery. Nad kalkulem to jde snaz protoze je jednodussi a neobsahuje horu syntaktickyho cukru.

U tech maker jsi mi ty vyjmenoval ruzny priklady, napr. priklad C preprocessoru, proto uz jsem misto vypisu moznych prikladu uz jen zobecnil definici. Pak jsem to ale v jednom prispevku vyjmenoval, tak nevim o cem se hadame.

Re:Co si myslíte o OOP?
« Odpověď #1089 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í.
« Poslední změna: 20. 01. 2019, 16:08:48 od Mirek Prýmek »

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #1090 kdy: 20. 01. 2019, 16:26:02 »
Uniklo Ti to, co jsem psal. Když napíšu málo parametrů pro formát v Pythonu, v runtime mi to hodí výjimku. Překladač Rustu odmítne chybné parametry makra při překladu.

Však to v Pythonu odchytí testy, ne?

Ano, na každém jednotlivém místě, kde potenciálně zavoláš danou funkci, to musíš pokrýt testem. Při použití makra ne. A je to horší, v Pythonu můžeš do formátu poslat tuple nebo dict a ten si pošleš do funkce kdoví odkud. A ten test prostě budeš muset dělat pro všechna možná volání té vnitřní funkce, kde se daný formát řetězce provádí a doufat, že jsi na nic nezapomněl. A kvůli hloupému formátování řetězce, který se třeba zapisuje někam do logu, kam prakticky nikdy nikdo nekouká, spadne celá aplikace nebo neošetříš jeden request a je průšvih. S makrem nic takového nehrozí, tam víš, na čem jsi.

Re:Co si myslíte o OOP?
« Odpověď #1091 kdy: 20. 01. 2019, 16:39:13 »
...
Podobne v clojure, coz je lisp family ale mota tam infix notaci kvuli citelnosti. Clojure vypada vic jako cisty lisp. U elixiru musi clovek vic zamhourit oci aby to videl.
....

Muzes ukazat priklad infix notace v clojure?

Kit

Re:Co si myslíte o OOP?
« Odpověď #1092 kdy: 20. 01. 2019, 16:41:24 »
Uniklo Ti to, co jsem psal. Když napíšu málo parametrů pro formát v Pythonu, v runtime mi to hodí výjimku. Překladač Rustu odmítne chybné parametry makra při překladu.
Však to v Pythonu odchytí testy, ne?
Ano, na každém jednotlivém místě, kde potenciálně zavoláš danou funkci, to musíš pokrýt testem. Při použití makra ne. A je to horší, v Pythonu můžeš do formátu poslat tuple nebo dict a ten si pošleš do funkce kdoví odkud. A ten test prostě budeš muset dělat pro všechna možná volání té vnitřní funkce, kde se daný formát řetězce provádí a doufat, že jsi na nic nezapomněl. A kvůli hloupému formátování řetězce, který se třeba zapisuje někam do logu, kam prakticky nikdy nikdo nekouká, spadne celá aplikace nebo neošetříš jeden request a je průšvih. S makrem nic takového nehrozí, tam víš, na čem jsi.

Nerozumím. Proč by ta aplikace měla spadnout, když zavolám nějakou funkci či metodu s chybným prametrem?

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1093 kdy: 20. 01. 2019, 16:52:32 »
...
Podobne v clojure, coz je lisp family ale mota tam infix notaci kvuli citelnosti. Clojure vypada vic jako cisty lisp. U elixiru musi clovek vic zamhourit oci aby to videl.
....

Muzes ukazat priklad infix notace v clojure?

 (hash-map :key1 1, :key1 2)
Ta carka je infix syntakticky cukr.

{:key1 1, :key1 2}
Dalsi syntakticky cukr je pouziti jinych zavorek.

https://clojuredocs.org/clojure.core/hash-map

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #1094 kdy: 20. 01. 2019, 17:07:06 »
Uniklo Ti to, co jsem psal. Když napíšu málo parametrů pro formát v Pythonu, v runtime mi to hodí výjimku. Překladač Rustu odmítne chybné parametry makra při překladu.
Však to v Pythonu odchytí testy, ne?
Ano, na každém jednotlivém místě, kde potenciálně zavoláš danou funkci, to musíš pokrýt testem. Při použití makra ne. A je to horší, v Pythonu můžeš do formátu poslat tuple nebo dict a ten si pošleš do funkce kdoví odkud. A ten test prostě budeš muset dělat pro všechna možná volání té vnitřní funkce, kde se daný formát řetězce provádí a doufat, že jsi na nic nezapomněl. A kvůli hloupému formátování řetězce, který se třeba zapisuje někam do logu, kam prakticky nikdy nikdo nekouká, spadne celá aplikace nebo neošetříš jeden request a je průšvih. S makrem nic takového nehrozí, tam víš, na čem jsi.

Nerozumím. Proč by ta aplikace měla spadnout, když zavolám nějakou funkci či metodu s chybným prametrem?

Asi nerozumíš více věcem, ale to je normální.