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 ... 200 201 [202] 203 204 ... 618
3016
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 18:20:00 »
Dobře, můžeš tvrdit, že IO Monad se vyhodnocuje nějak "líně" tím, že se tam protahuje přes všechny funkce RealWord#, ale to je prostě nějaké teoretické zdůvodnění - prakticky se to prostě vyhodnocuje "eager" (teda mě není vůbec moc jasné, co vlastně v případě monadu má znamenat "lazy" a "strict"....)
To není teoretické zdůvodnění, to je princip, jakým to funguje.

Mohlo by to být i jinak, třeba že bys generoval list IO operací a ty potom realtime provedl přesně v tom pořadí, v jakém v listu jsou. Ale to by bylo mimo jazyk. Ten jazyk sám o sobě by zůstal pořád líný.

Prostě pokud v líném jazyce chceš vynutit pořadí, uděláš to třeba pomocí monády a pokud chceš vynutit línost v nelíném jazyce, uděláš to třeba pomocí futures. Oboje jde a ani jedno neporušuje línost/nelínost toho jazyka. Je to jenom způsob, jak ho nějakou fintou donutit udělat něco, co by jinak "sám od sebe" negarantoval.

...no a to je právě ta pointa: mně přijde, že pořadí potřebujeme častěji, proto je lepší ho mít jako default a finty používat na línost, ne naopak.

3017
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 18:13:19 »
Ale, ale.
Kód: [Vybrat]
int foo() { for (;;); }

int bar(a, b) { return a; }

bar(1,foo());
a zase mas ⊥ (jenom tomu proste Ceckar tak nerika, protoze zije v jinem svete)
To je ale úplně jiný případ. Tím jsi jenom ilustroval, že se v céčku dá napsat kód, který se zacyklí.

3018
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 18:06:28 »
efektové části musí být v monadu a ten se líně nevyhodnocuje...
Jaktože ne?

3019
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 18:02:13 »
To je naprosto normalni semantika striktniho jazyka.
Kind of. Céčko třeba žádné nekonečné listy nemá, čili to jeho sémantika není. A ano, je nesmyslná. Protože první tři prvky z nekonečného listu jsou dobře definované první tři prvky. Není to nedefinovaná hodnota jako třeba 1/0.

Čili pokud budeš vědět, že k tomuhle problému by u tvého jazyka mohlo dojít, tak tam vůbec nekonečné listy nedáš, nebo je tam dáš v symbolické formě, u které k zacyklení dojít nemůže (tak to má např. Elixir, který je eager, nekonečné listy má a nezacykluje se na nich).

Spotreba pameti. Dokud nedojde na ⊥, tak se u striktnich jazyku lepe resi pametova narocnost.
To už ale mluvíš o implementaci, ne o jazyku.

3020
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 17:25:15 »
take(3,[1..])
ma jinou hodnotu podle toho, jaky mas jazyk. Muze to byt [1,2,3] nebo ⊥
Ok, beru. Jistě můžu mít jazyk s libovolně nesmyslnou sémantikou. Třeba takovou, že 1+1 = ⊥ nebo take(3,[1..]) = ⊥. Takže formálně máš pravdu, uznávám. Bavíme se ale o tom, jestli by takový jazyk mělo smysl vytvářet. Já říkám, že si nedovedu moc představit, k čemu by bylo dobré mít pure jazyk bez línosti.

Jaký význam má pojem "nelínost" u pure jazyka? Že se občas zacyklí na něčem, na čem by se zacyklit nemusel? Vlastnost líný/nelíný prostě zásadně ovlivňuje chování u ne-pure jazyků, ale u pure jazyků nemá na nic vliv (kromě tohodle případu, kde je jenom na škodu).

U ne-pure jazyků totiž výraz musím vyhodnotit pokaždé, kdy mě zajímá jeho hodnota. U pure jazyka mi stačí ho vyhodnotit jednou. Proto je mi celkem jedno, kdy to udělám. V principu bych tu tvoji sémantiku mohl korektně naplnit i tak, že si předem zjistím, že se program nutně dostane k vyhodnocování take(3,[1..]), takže se na celý program vykašlu a hned spustím "for( ; ; ) ;"

3021
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 17:06:55 »
Ne.
Co ne? Není venku slunečno? Souhlasím :)

3022
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 17:05:19 »
tak už tady byl zmíněn ten PureScript
Jenže tam to je z toho implementačního (meta) důvodu, který byl taky zmíněn - transpilace do čitelného JS.

3023
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 17:03:53 »
Jak (a zda) to skonci zalezi na tom, zda je jazyk liny nebo ne.
Ty výrazy mají přesně definovanou hodnotu a jakým způsobem se na ni převedou (jestli korektně nebo nekorektně) je jenom o implementaci, ne o jazyku. To je to, co říkal zboj.

Pokud by se program na těch výrazech zasekl, tak ten jazyk nesplňuje referenční transparentnost, což je definiční znak pure jazyka.

3024
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 15:50:56 »
To je právě ono, laziness je v takovém případě irelevantní a vztahuje se jen na implementaci (kde má smysl o ní uvažovat). Proto píšu, že jsou to koncepty ortogonální. Asi jsem se špatně vyjádřil, považuju za poněkud nešťastné o "(non)laziness" vůbec uvažovat, protože při zachování rozumných vlastností (především té již zmíněné čistoty) není smysluplné o ní mluvit.
Právě proto nerozumím tomu, proč jim říkáš ortogonální. Podle mě jsou naopak vzájemně závislé přesně z tohodle důvodu.

Ale to je jedno, nebudem slovíčkařit :) jinak si myslím rozumíme.

3025
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 15:35:19 »
Tak purity a laziness (sic!) jsou ortogonální koncepty, a zrovna ten druhý nepovažuju za příliš šťastnou volbu.
A jaký smysl by mělo mít jazyk, který by byl čistý ale ne lazy? Pokud je čistý, tak tam funguje referenční transparentnost, takže v čem by ta non-laziness (díky za upozornění na chybu!) měla spočívat?

3026
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 15:05:27 »
1. lazy a pure jsou jiné koncepty
Ale úzce spolu souvisí. Znáš nějaký default-lazy (call by name) jazyk, který není pure?

Kromě toho, k tomu, aby ti ty problémy s řazením IO vznikly, je lazyness podmínka dostačující:
Kód: [Vybrat]
a = print "a"
b = print "b"
f(a,b)
- pokud by ten jazyk byl lazy, v jakém pořadí vytiskne "a" a "b"? Na základě čeho?

3027
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 14:50:24 »
a to má být výhoda těch jiných jazyků?
1. Tohle téma se odpíchlo od Andyho otázky "Já fakt nechápu, co je za komplikace v default-lazy jazyku."
2. Někdo (třeba já) to za výhodu může považovat, protože si může myslet, že programování pomocí sousledných kroků je přirozenější lidskému myšlení a tudíž to chceme jako default a pomocí bižuterie chceme dosahovat lazyness, ne opačně.

Btw, když jsme nakousli to "Proč Haskell vznikl?", koukám na zajímavej paper http://haskell.cs.yale.edu/wp-content/uploads/2011/02/history.pdf a tam je jedna zajímavá informace v podobném duchu:

Citace
An anonymous reviewer supplied the following: “An interesting
sidelight is that the Friedman and Wise paper inspired Sussman and
Steele to examine lazy evaluation in Scheme, and for a time they
weighed whether to make the revised version of Scheme call-byname
or call-by-value. They eventually chose to retain the original
call-by-value design, reasoning that it seemed to be much easier to
simulate call-by-name in a call-by-value language (using lambdaexpressions
as thunks) than to simulate call-by-value in a call-byname
language (which requires a separate evaluation-forcing mechanism).
Whatever we might think of that reasoning, we can only
speculate on how different the academic programming-language
landscape might be today had they made the opposite decision.”
Dobrá perlička :)

1) Monády jsou složitý aparát? Dvě funkce a dvě rovnice, která musí splňovat, to mi přijde jako celkem málo.
No jo no, ale vidíš, jak se na tom lidi zasekávaj :)

2) Lambda kalkulus ale není programovací jazyk, right? I do Lispu při vší jeho jednoduchosti naplácali informatici různé ptákoviny (z matematického pohledu).
Ale matematici za to všechno můžou jako prvotní příčina! ;)

3028
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 14:34:04 »
takže v haskellu to jde stejně jako jinde, ale je to špatně, protože... proč? implementačními detaily se snad zabývat nemusíme, kdo si píše vlastní překladač?
Nejde to stejně jako jinde. V Haskellu se dá pomocí relativně složitého aparátu (monády) dosáhnout toho chování, které je v jiných FP jazycích defaultní. Ani jedno není vyloženě dobře nebo špatně. Prostě když si zvolím čistotu, tak mi to způsobuje komplikace. Udivuje mě, že je kolem toho tolik řečí, mně to přijde jako zjevná věc.

Jinak zrovna matematikům je nějaké programování u ř**i
Lambda calculus vymyslel matematik :)

3029
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 14:22:02 »
main = do
    vem_vejce
    rozklepni_ho
    utři_ho
popř. main = vem_vejce >> rozklepni_ho >> utři_ho
No ano, za tím je ta bižuterie, která je u Haskellu nutně potřeba, aby se dalo psát v sousledných krocích. U jiných jazyků potřeba není. To jsem přece říkal.

3030
Vývoj / Re:Má Haskell budoucnost?
« kdy: 15. 05. 2016, 13:32:36 »
FP má nemálo výhod - ale rozhodně to není způsob, jak lidé přirozeně přemýšlí.
Haskell imho nebyl vymyšlen tak, aby se podobal způsobu, jak lidi myslí, ale způsobu, jak myslí matematici ;)

Akorát bych byl trochu opatrnější se ztotožňováním FP s pure default-lazy jazykem. To je jenom podmnožina FP jazyků. A spíš menší: OCaml, Racket, F#, Erlang, Elixir - všechny jsou defaultně eager, čili by se tam normálně napsalo "vem vejce, rozklepni ho, utři ho"

Stran: 1 ... 200 201 [202] 203 204 ... 618