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 ... 81 82 [83] 84 85 ... 618
1231
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 16:35:36 »
Jenže on neporovnává dvě čísla, ale dvě reference.
V tom ale ten problém není, to tady všichni chápeme, i když se vám třeba zdá, že ne. Problém je v tom poolu konstant, u kterého nikdy nevím (?), jestli tam to číslo je nebo ne.

protože operátory jsou vždy v nějakém případě kontraintuitivní
Můžete uvést příklad z Elixiru nebo Rustu?

moznych jinych reseni
lepších řešení?
Nebyl jste to vy, kdo mi vyčítal, že mluvím za vás a podsouvám vám něco, co jste netvrdil?

1232
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 14:47:02 »
Tak dalsi mozne reseni by bylo (pokud jsem spravne pochopil princip) nemit ten pool pro "mensi cisla"?
...anebo ho naopak mit povinne (tak to ma treba Erlang s atomy - zarucene vzdycky jsou stejne atomy "unifikovane"). Proste aby se to chovalo tak nebo tak, ale konzistentne, predvidatelne.

1233
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 14:43:48 »
Hloupé je to, že uvádí jeden okrajový příklad, a zdá se, že vůbec nechápe podstatu.
Porovnani dvou cisel mi neprijde nijak okrajove. A jestli chape nebo nechape podstatu, 1. neumim z niceho odvodit, 2. je to irelevantni - porad je ta vec kontraintuitivni.

To, že operátor == v Javě porovnává hodnoty primitivních typů a reference u objektů mi nijak neintuitivní nepřipadá.
Je to kontraintuitivni - jestlize o Jave nic nevim, muzu si rict tak leda "WTF" - vubec me nenapadne, proc by se to jednou melo chovat tak a jindy jinak.

Uz to samotne vase "jenom pro větší čísla" ukazuje na neco, co vypada divne. "Vetsi cisla"? To je co? Vime to? Je to nekde v dokumentaci? Nebo se to chova "nahodne" (podle toho, jak velky je zrovna ten pool)?

Napadají mne jen dvě srovnatelně dobrá řešení a žádné lepší. Jedno řešení by bylo pro objekty == udělat jako alias pro equals() a ošetřit null hodnoty. Druhé řešení by bylo == pro objekty úplně zakázat. V obou případech by na porovnání referencí musel existovat nějaká systémová metoda.
Tak dalsi mozne reseni by bylo (pokud jsem spravne pochopil princip) nemit ten pool pro "mensi cisla"?

Jinak existuje urcite aspon pet, ne-li vic moznych jinych reseni, ale nektere z nich by vyzadovaly nejake featury, ktere aktualne Java asi nema.

1234
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 12:59:33 »
V jazyce, který umožňuje používat hodnoty i reference, musí programátor znát rozdíl mezi hodnotou a referencí. To je celé, nic dalšího k tomu není potřeba dodávat, kdo ten rozdíl chápe, chápe i hloupost vašich příspěvků.
Na upozornění na kontrainutitivnost nějakého prvku jazyka není nic hloupého.

1235
Vývoj / Re:Ideálny programovací jazyk
« kdy: 15. 05. 2019, 11:51:00 »
No jenže pokud ale mají oba pouze 50 Kč, pak opravdu jo:
Vždyť jo - pokud má Pepa a Franta jenom 50Kč, tak jsou to socky a pro javisty je socka jako socka.

1236
Vývoj / Re:Ideálny programovací jazyk
« kdy: 13. 05. 2019, 16:44:32 »
Tak, jaks to napsal, to vypadá, že async/await je pro tebe jen syntaktický cukr. Ono jde ale hlavně o runtime, třeba v tom JS je obzvlášť důležité, že “blokující” volání kooperativně přenechá jediné vlákno jiné části kódu.
Možná jsem to napsal nejasně, ale myslel jsem "čistě z hlediska výkonu". Když to řeknu úplně polopaticky: pokud něco jde dělat paralelně a udělám to paralelně, získám výkon. Žádný jiný magický mechanismus pro získání výkonu tam není.

I u promisů je to to samé - odstartuju HTTP get a zatímco se na pozadí vyřizuje, běží něco jiného. Ale pořád tohle jde jenom pokud to paralelně běžet může. Pokud ne (jsou tam vazby), tak se stejně musí čekat, s tím nikdo nic magicky nenadělá. Pokud jsou v algoritmu vazby, bude i "neblokující" kód blokovaný.

1237
Vývoj / Re:Ideálny programovací jazyk
« kdy: 13. 05. 2019, 16:26:37 »
Tady jsi to nepochopil ty, u async/await nejde o promisy, ale korutiny.
Tohle nechápu, můžeš to nějak rozvést?

V případě NIO nebo třeba semaforů je to skutečně “magický mechanismus”. Výhoda oproti callbackům jsou kromě přehlednosti rozumně ošetřitelné chyby.
Ok, rozumně ošetřitelné chyby můžou být, to je spíš interní věc jazyka. Ale jinak na tom nic magického není, pořád je to starý dobrý kooperativní multitasking, navíc s jenom potenciální paralelizací. Můžeš si to klidně napsat ručně, pokud máš k dispozici nějaký mechanismus, na kterém se dá stavět (multithreading, green threads, coroutiny, ...)

Jediná výhoda async/await je v tom, že to ručně psát nemusíš a překladač to udělá za tebe.

1238
Vývoj / Re:Ideálny programovací jazyk
« kdy: 13. 05. 2019, 11:04:01 »
Nemůžu si pomoci, ale podle mne je await špatný koncept. Ten nápad „asynchronní kód je pro programátora složitější, uděláme to, aby to vypadalo, že o žádný asynchronní kód nejde“ staví na tom, že ta komplikovanost vzniká jenom strukturováním kódu. Jenže podle mne by si programátor měl být vědom toho, že pracuje s asynchronním kódem,
Vidím to přesně stejně. Imho pokud se má asynchronní programování nějak zjednodušovat, tak cestou explicitních greenthreadů/coroutin, kde:
1. je naprosto explicitní a zjevné, co může (potenciálně) běžet zaráz a co ne
2. programátor v klidu může použít blokování, pokud ho potřebuje ( sleep(3000) ), a je mu bezprostředně jasný jeho význam, protože se dá nad programem jako celkem relativně snadno uvažovat (to reason about)

1239
Vývoj / Re:Ideálny programovací jazyk
« kdy: 13. 05. 2019, 10:48:17 »
To by se u normalniho stavoveho stroje s await async nemelo stat, protoze tam bezi jenom jeden thread.
Pokud pisete  komponentu, kde vam chodi paralelne requesty, tak mate zparalelizovane uz ty requesty. Nepotrebujete paralelizovat i ukoly v ramci jednotlivych requestu, to je nesmysl.
Protoze k tomu abyste z toho opravdu dokazal tezit, tak potrebujete mit drtivou vetsinu metod await async - a proto nemuzete vyrabet novy thread pokade kdyz se vola nejaka metoda.

Neber si to osobně, ale tohle je dost odstrašující příklad přístupu k asynchronnímu programování.

1. chci používat jazyk s mutabilními strukturami (navíc OOP!)
2. async/paralelizaci si představuju tak, že všude možně prsknu async a await
3. očekávám, že to po mně nebude nic chtít, protože to bude "jakože běžet v jednom vlákně"
4. díky tomu, že mám sem tam ten async a await, to bude automagicky škálovat

Prvně by asi nebylo od věci si uvědomit, že

1. async/await není nic jiného než syntaktický cukr, který z programátora jenom snímá nutnost používat napřímo promisy (nebo jiný podobný mechanismus) a překladač je tam doplňuje sám. Takže všechno, co platí pro promisy (popř. ten jiný podobný mechanismus), platí i pro async/await kód.

2. neexistuje žádný zázračný "neblokující kód", který automagicky vede k vyššímu výkonu. Celý je to zcela prostý: pokud mám operace A, B, C, kde A a B jsou vzájemně nezávislé a C je závislé na A i B, tak se hodí A a B spustit zaráz a C až potom, co A i B doběhnou. Zázračný "neblokující kód" je samozřejmě při čekání na A+B blokovaný :) To je celý princip a je úplně jedno, jaká syntaktická wifikundace se použije k jeho zápisu.

3. díky async/await zápisu sice kód vypadá jako seriový (synchronní), ale to jenom vypadá a pořád je potřeba myslet na to, že smyslem té celé srandy je to, aby A a B mohly běžet potenciálně paralelně, protože to jediné je zdrojem toho potenciálního nárůstu výkonu, žádnej jinej magickej zrychlovací mechanismus tam není a být nemůže.

1240
Vývoj / Re:Ideálny programovací jazyk
« kdy: 11. 05. 2019, 12:38:56 »
už ti tu několikrát vysvětlili, že v Ruby makra nejsou*. Proč to pořád opakuješ?

* teoreticky AST makra jsou možná, ale nikdo je nepoužívá. Narozdíl od Crystalu nebo Elixiru.
Odstrašující je to, jak se používají obraty, které by se v jiném jazyce dělaly makry (DSLka apod.) - tj. všechno, co umožňuje napsat krátký "hezký" kód, u kterého je ale děsně komplikované zjistit, co a jak vlastně dělá.

Makra slouží ke generování kódu před překladem. U jazyka, který se nepřekládá, samozřejmě striktně vzato neexistují, ale existují obraty, pomocí kterých se dosahuje stejného efektu (kód generuje kód, akorát ne před překladem, který tam prostě není).

1241
Vývoj / Re:Jak funguje Call/CC?
« kdy: 11. 05. 2019, 11:56:11 »
Erlang call/cc neumí.
To jsem ani netvrdil.

1242
Vývoj / Re:Ideálny programovací jazyk
« kdy: 11. 05. 2019, 11:50:30 »
Nevím o vážně míněné oprávněné kritice.
Já za nejpádnější považuju tohle: https://codegolf.stackexchange.com/questions/1956/generate-the-longest-error-message-in-c :))

...ale nechci se do C++ moc navážet, jak říkám, rozešli jsme se před nejmíň deseti lety a nepotřebuju se k téhle epizodě  z mládí vracet :)

1243
Vývoj / Re:Ideálny programovací jazyk
« kdy: 11. 05. 2019, 11:39:01 »
Na šablony v C++ nikdo nenadává.
To je velice smělé tvrzení! ;)

1244
Vývoj / Re:Ideálny programovací jazyk
« kdy: 11. 05. 2019, 11:24:01 »
Jo, ještě jedna podstatná věc: raději bych viděl strukturální než nominální typování. Mj. proto, že nominální se dá v případě potřeby snadno simulovat právě pomocí product types, ale naopak ne (když mám nominální typování, jsem ve zlaté kleci, ze které není úniku ;) ).

1245
Vývoj / Re:Ideálny programovací jazyk
« kdy: 11. 05. 2019, 11:17:20 »
Ono je to dejme tomu jako Maybe v Haskellu. Je to sám o sobě typ, tj. to svým způsobem vynutí s tím "Maybe" pracovat správně. Ale ano, null u pointerů se tím člověk nevyhne, a není to třeba tak hezké jako v tom Haskellu.
Z mýho pohledu nemusí být Option nějak zvlášť "hezký". Je to prostě parametrizovaný sum type jako jakýkoliv jiný (který v jazyce tak jako tak chci - tj. Option je speciální jenom v tom, že je ve standardní knihovně a používá se všude).

Za nutný ale považuju, aby byl všude, protože jenom tak má smysl - protože za hlavní smysl Option považuju striktní oddělení kódu, kde null může být a kde už ne (už jsem ho ošetřil, dál nemohl probublat). Pokud je Option optional ( ;) ), tak typový systém neumí tyhle dvě situace odlišit, čili nemá informaci, kterou by (snadno) mít mohl a úplně zbytečně ztrácí sílu.

Stejnýho efektu se dá dosáhnout i nějakým atributem "nullable", ale to mi přijde jako zbytečný zaplevelování syntaxe, protože parametrizované sum types chceme tak jako tak...

Stran: 1 ... 81 82 [83] 84 85 ... 618