Node.js a multiplexed IO obecně

Re:Node.js a multiplexed IO obecně
« Odpověď #90 kdy: 27. 04. 2017, 00:21:33 »

Řekl jsem, že ekvivalence nemá být tranzitivní?! Možná se naučte číst, tím by bylo nejlepší začít.
Já kritizuju, že == v JS tranzitivní není (a to ještě strašně překombinovaným způsobem), což je překvapivé/matoucí. A jelikož (příliš) překvapující jazyky se mi nelíbí, nelíbí se mi ani JS.

Pokud chcete s něčím z toho polemizovat, řekněte, s čím polemizujete, a předlože argumenty. O tahání se za nohu s dovolením nemám zájem :)

Kritizujete, že == není tranzitivní. Překvapivé to je, pokud JS neznáte. Kde je řečeno, že == má být tranzitivní? A váš pseudo argument s ekvivalencí je sice pěkný, ale == ekvivalencí být nemá.


Relace je relací ekvivalence právě když je reflexivní, symetrická a tranzitivní.
Tak jest. A podle této definice operátor ekvivalence v JS není ekvivalence. Což je překvapující, jak již řečeno.

Operátor ekvivalence, resp. toho, co jste chtěl, se v JS značí ===.

Jenže zároveň je to binární relace na stejné množině.
Jako třeba na množině "libovolná hodnota v JS"? (nicméně pořád nechápu, kam tím míříte)

Ne, jako třeba string, number, array... Teď už byste to chápat mohl.

Pokud to stále nechápete, tak doporučuju navštívit 1. ročník každé slušné VŠ.
Děkuji za doporučení, to jsem už učinil před mnoha lety :)

Tak teď ještě aby se to nějak projevilo. :)

#######################

Celý váš problém je, že kritizujete JS za to, že používáte špatné operátory, protože jinde se to značí jinak. Tedy klidně nadávejte na to, že je to značeno jinak, než byste si přál nebo čekal. Ale kritizovat, že A nedělá C a vy chcete, aby A dělalo C místo toho, abyste použil přímo C, je úchylné.
« Poslední změna: 27. 04. 2017, 00:24:43 od Cikáda »


kimec

Re:Node.js a multiplexed IO obecně
« Odpověď #91 kdy: 27. 04. 2017, 00:28:19 »
Jde to snadněji pomocí uzávěru. Ale pořád je to horší než first class generátory.
...a generatory jsou o rad horsi nez kontinuace.
Kontinuace je univerzálnější, ale taky abstraktnější (a někdy to je dost zmatek, stačí zkusit si pro kontinuaci napsat >>=). Nejlépe se tento typ kódu píše v CSP, je to triviální a univerzální.
CSP alebo CPS? Nemysleli ste CPS? Poviem vam, ze uz dost dlhu chvilu rozmyslam, ci ste naozaj nemysleli CSP (spominali sa tu kanaly a Go).

Re:Node.js a multiplexed IO obecně
« Odpověď #92 kdy: 27. 04. 2017, 00:32:59 »
Kritizujete, že == není tranzitivní. Překvapivé to je, pokud JS neznáte.
Překvapivé je to proto, že 1) v každém rozumném jazyku tento operátor tranzitivní je 2) není žádný rozumný důvod, aby tranzitivní nebyl (tímto způsobem).

Ale nikde není řečeno, že == tranzitivní být má.
Tak jistě. Není ani nikde řečeno, že 1+1 má být 2. A pokud je někdo překvapený, že v JS je to 3, tak je to proto, že JS nezná. Protože + přece není sčítání. To se označuje *+*.

Čili, abychom to shrnuli, jestli má někdo problém s tím, že 1+1=3, je pitomec, nedouk a hipster.

A váš pseudo argument s ekvivalencí je sice pěkný, ale == ekvivalencí být nemá.
Na tom se zjevně neshodneme. Takže já si myslím, že == ekvivalencí být má a jazyky, kde jí není, s dovolením budu širokým obloukem obcházet stejně jako otevřený septik. Není radno do toho spadnout.

Ne, jako třeba string, number, array... Teď už byste to chápat mohl.
Ne, nemohl. Opravdu se mi snažíte říct, že pro stringy má být definován operátor (relace) ==s a pro number ==n ?

Tak teď ještě aby se to nějak projevilo. :)
Jo, projevilo - naučil jsem se nekonečné trpělivosti. I když vlastně teď nevím, jestli to nebylo díky manželství.

Celý váš problém je, že kritizujete JS za to, že používáte špatné operátory, protože jinde se to značí jinak. Tedy klidně nadávejte na to, že je to značeno jinak, než byste si přál nebo čekal. Ale kritizovat, že A nedělá C a vy chcete, aby A dělalo C místo toho, abyste použil přímo C, je úchylné.
S dovolením, jak říká klasik: budu si remcat, jak budu chtít.

A nechci, aby A bylo B. Chci aby ekvivalence byla ekvivalence. A popravdě řečeno, sledovat, jak javascriptař vysvětluje, že ekvivalence nemá být ekvivalence, je velmi zábavné, pojďme v tom pokračovat! :))

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Node.js a multiplexed IO obecně
« Odpověď #93 kdy: 27. 04. 2017, 00:33:33 »
Jde to snadněji pomocí uzávěru. Ale pořád je to horší než first class generátory.
...a generatory jsou o rad horsi nez kontinuace.
Kontinuace je univerzálnější, ale taky abstraktnější (a někdy to je dost zmatek, stačí zkusit si pro kontinuaci napsat >>=). Nejlépe se tento typ kódu píše v CSP, je to triviální a univerzální.
CSP alebo CPS? Nemysleli ste CPS? Poviem vam, ze uz dost dlhu chvilu rozmyslam, ci ste naozaj nemysleli CSP (spominali sa tu kanaly a Go).
Myslel jsem CSP. CPS mi v tomto případě nepřijde úplně ideální.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Node.js a multiplexed IO obecně
« Odpověď #94 kdy: 27. 04. 2017, 01:07:26 »
Ahhhh, moje chyba, myslel jsem, ze komunikuji pres sockety.

"posilaj si mezi sebou async zpravy" samo o sobe nerika nic. Muze to byt paradni vec jako v Erlangu a muze to byt zoufalost jako radobyparalelismus v Rku nebo v pythonnim multiprocessing, ktery jenom zoufale obchazi GIL.

However, in the case of multi-threaded implementations, many browsers implement a structured cloning algorithm to copy the message into the receiving thread’s context

JS runtime musi predavane objekty serializovat a deserializovat. Je s tym spojeny overhead a nedokaze passnut referenciu na priamo.
Takže to je efektivně nepoužitelné...


gll

Re:Node.js a multiplexed IO obecně
« Odpověď #95 kdy: 27. 04. 2017, 07:25:43 »
A timhle kodem jsi chtel demonstrovat co? Chtel jsem videt ten kod generatoru, co jde v Pythonu napsat lip nez v Go.

Kód: [Vybrat]
g = (i*i for i in range(100))

Re:Node.js a multiplexed IO obecně
« Odpověď #96 kdy: 27. 04. 2017, 08:03:32 »
Kód: [Vybrat]
g = (i*i for i in range(100))
No, to je jeden konkrétní případ syntaktického cukru, omezený jenom na výrazy, což je v Pythonu relativně málo co. Myslel jsem, že se bavíme o obecném generátoru, tak sofistikovaném, aby tam člověk mohl dát aspoň if ;)

Takže abysme se vrátili ke kořenům,
Já zde netvrdím, že je JS dokonalý jazyk, ale vám na jednu stranu vadí maličkosti v JS a na druhou stranu obhajujete Go, kde vám různé speciální případy a nedokonalosti jazyka skutečně komplikují život.
- fakt, že v Go se takhle jednoduchý generátor nedá (?) napsat stručně, má být příklad "speciálního případu", nebo nedokonalosti jazyka, která "skutečně komplikuje život"? :)

Re:Node.js a multiplexed IO obecně
« Odpověď #97 kdy: 27. 04. 2017, 08:18:03 »
aby tam člověk mohl dát aspoň if ;)
Jo, pardon, na if vlastně taky existuje speciální syntaktický cukr.

gll

Re:Node.js a multiplexed IO obecně
« Odpověď #98 kdy: 27. 04. 2017, 08:36:43 »
aby tam člověk mohl dát aspoň if ;)
Jo, pardon, na if vlastně taky existuje speciální syntaktický cukr.

co podle vás není syntaktický cukr?

Re:Node.js a multiplexed IO obecně
« Odpověď #99 kdy: 27. 04. 2017, 08:37:23 »
co podle vás není syntaktický cukr?
Třeba žirafa.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Node.js a multiplexed IO obecně
« Odpověď #100 kdy: 27. 04. 2017, 08:46:44 »
Kód: [Vybrat]
g = (i*i for i in range(100))
- fakt, že v Go se takhle jednoduchý generátor nedá (?) napsat stručně [...]
On Go nezná, jen se hádá z principu.

Je toto dostatečně jednoduché?
Kód: [Vybrat]
g := gen(0, 100, func(i int) int { return i * i })

gll

Re:Node.js a multiplexed IO obecně
« Odpověď #101 kdy: 27. 04. 2017, 08:48:06 »
Kód: [Vybrat]
g = (i*i for i in range(100))
No, to je jeden konkrétní případ syntaktického cukru, omezený jenom na výrazy, což je v Pythonu relativně málo co. Myslel jsem, že se bavíme o obecném generátoru, tak sofistikovaném, aby tam člověk mohl dát aspoň if ;)

obecné generátory se bez yield píší špatně, ale to lze považovat také za syntaktický cukr.

Re:Node.js a multiplexed IO obecně
« Odpověď #102 kdy: 27. 04. 2017, 08:59:59 »
Kritizujete, že == není tranzitivní. Překvapivé to je, pokud JS neznáte.
Překvapivé je to proto, že 1) v každém rozumném jazyku tento operátor tranzitivní je 2) není žádný rozumný důvod, aby tranzitivní nebyl (tímto způsobem).

V JS je ten operátor trošku něco jiného, než v jiných jazycích, takže opět mimo mísu.

Ale nikde není řečeno, že == tranzitivní být má.
Tak jistě. Není ani nikde řečeno, že 1+1 má být 2. A pokud je někdo překvapený, že v JS je to 3, tak je to proto, že JS nezná. Protože + přece není sčítání. To se označuje *+*.

Čili, abychom to shrnuli, jestli má někdo problém s tím, že 1+1=3, je pitomec, nedouk a hipster.

Tak ještě jednou. 1+1 je operace nad stejným datovým typem a to, co kritizujete, je chování při porovnávání různých datových typů.

Vy si stěžujete, že 1+"1" není 2, ale absolutně popíráte fakt, že jestli děláte takový prasárny, tak byste se neměl snažit programovat.

A váš pseudo argument s ekvivalencí je sice pěkný, ale == ekvivalencí být nemá.
Na tom se zjevně neshodneme. Takže já si myslím, že == ekvivalencí být má a jazyky, kde jí není, s dovolením budu širokým obloukem obcházet stejně jako otevřený septik. Není radno do toho spadnout.

To je ale vaše ignoranství a ne problém těch jazyků.

Ne, jako třeba string, number, array... Teď už byste to chápat mohl.
Ne, nemohl. Opravdu se mi snažíte říct, že pro stringy má být definován operátor (relace) ==s a pro number ==n ?

Ne, snažím se vám vysvětlit, že plácáte páté přes deváté. Neúspěšně.

Tak teď ještě aby se to nějak projevilo. :)
Jo, projevilo - naučil jsem se nekonečné trpělivosti. I když vlastně teď nevím, jestli to nebylo díky manželství.

Tak si trpělivě přečtěte specifikaci jazyka, než začnete nadávat na něco, co neznáte.

Celý váš problém je, že kritizujete JS za to, že používáte špatné operátory, protože jinde se to značí jinak. Tedy klidně nadávejte na to, že je to značeno jinak, než byste si přál nebo čekal. Ale kritizovat, že A nedělá C a vy chcete, aby A dělalo C místo toho, abyste použil přímo C, je úchylné.
S dovolením, jak říká klasik: budu si remcat, jak budu chtít.

A nechci, aby A bylo B. Chci aby ekvivalence byla ekvivalence. A popravdě řečeno, sledovat, jak javascriptař vysvětluje, že ekvivalence nemá být ekvivalence, je velmi zábavné, pojďme v tom pokračovat! :))

Ekvivalence je ekvivalence a značí se takto ===. Pokud nechcete používat JS, protože to jedno = je pro vás moc komplikovaný myšlenkový pochod, tak prosím. Ale není to chyba jazyka, ale spíš vaše neschopnost.

== ekvivalencí není a nikde není řečeno, že by měla. Nebo v céčku si taky stěžujete, že řetězce nemůžete porovnávat pomocí ==?? (Perl to má taky jinak, Pascal taky, ....).

Re:Node.js a multiplexed IO obecně
« Odpověď #103 kdy: 27. 04. 2017, 09:20:51 »
V JS je ten operátor trošku něco jiného, než v jiných jazycích, takže opět mimo mísu.
Jistě. A úplně stejně "legitimně" by "něco jiného" mohl být operátor +. Proč ne?

Tak ještě jednou. 1+1 je operace nad stejným datovým typem a to, co kritizujete, je chování při porovnávání různých datových typů.
To je naprosto irelevantní. V rozumných jazycích je ekvivalence ekvivalence, tj. je tranzitivní na celé množině, na které je definovaná. Nechápu, proč se tak zarputile snažíte obhájit neobhajitelné. Nestačilo by místo těch urážek a vymýšlení nesmyslných rádobyobhajob říct prostě "jo, tohle je sprasený, ale dá se s tím žít"?

Vy si stěžujete, že 1+"1" není 2, ale absolutně popíráte fakt, že jestli děláte takový prasárny, tak byste se neměl snažit programovat.
Porovnání dvou hodnot různého typu není žádná prasárna. Zvlášt v dynamickém jazyce. Když funkce dostane dva parametry (neví jaké), tak je prasárna je porovnat?!

To je ale vaše ignoranství a ne problém těch jazyků.
Ignorantství je, když něco nevím. Ne když něco vím a kritizuju to.

Ne, snažím se vám vysvětlit, že plácáte páté přes deváté. Neúspěšně.
Nesnažíte se nic vysvětlit. Snažíte se obhájit neobhajitelné pomocí matení pojmů (v lepším případě) nebo neznalosti pojmu "relace" (v horším případě). Relace je definovaná na nějaké množině. Pro operátor == je tou množinou množina všech hodnot daného jazyka. Neexistuje žádný speciální operátor pro porovnání stringů a speciální pro porovnání čísel.

A pokud má být == použitelný, musí být tranzitivní na celé této množině. Tranzitivita na podmnožině je k ničemu a vůbec nemá smysl o ní mluvit.

Tak si trpělivě přečtěte specifikaci jazyka, než začnete nadávat na něco, co neznáte.
To jsem právě udělal už udělal a pocítil silnou nevolnost.

Každý může posoudit sám, jaký matroš musí člověk brát aby s vážnou tváří napsal tohle: http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

Ekvivalence je ekvivalence a značí se takto ===. Pokud nechcete používat JS, protože to jedno = je pro vás moc komplikovaný myšlenkový pochod, tak prosím. Ale není to chyba jazyka, ale spíš vaše neschopnost.

== ekvivalencí není a nikde není řečeno, že by měla. Nebo v céčku si taky stěžujete, že řetězce nemůžete porovnávat pomocí ==?? (Perl to má taky jinak, Pascal taky, ....).
Plus je plus a značí se takto *+*. Pokud nechcete používat JS, protože ty dvě * je pro vás moc komplikovaný myšlenkový pochod, tak prosím. Ale není to chyba jazyka, ale spíš vaše neschopnost.

+ plusem není a nikde není řečeno, že by mělo. Nebo v céčku si taky stěžujete, že řetězce nemůžete porovnávat pomocí ==??
« Poslední změna: 27. 04. 2017, 09:24:40 od Mirek Prýmek »

Re:Node.js a multiplexed IO obecně
« Odpověď #104 kdy: 27. 04. 2017, 09:21:38 »
obecné generátory se bez yield píší špatně, ale to lze považovat také za syntaktický cukr.
Píší se bez yield naprosto v pohodě, pokud mám k dispozici channely, které fungují prakticky stejně jako yield. Navíc oproti yield se práce s channelem dá snadněji paralelizovat. Pokud bych si měl vybrat mezi yield a channelem, určitě bych volil channel.