Rychlost Haskell vs. C++

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #285 kdy: 04. 09. 2018, 01:28:59 »
Jasně, a teď prosím ukaž, jak budeš chytat undefined v non-IO monadu. Exceptiony normálně chytat jdou a je to pure:

Viz např: http://hackage.haskell.org/package/exceptions-0.10.0/docs/Control-Monad-Catch.html.

Jsem jedno velké ucho...

Proč bych to jako měl dělat? Vůbec to nepotřebuju. Mně stačí chytit výjimku v IO. Je jasně specifikované, že v IO se výjimky chytat dají. NENÍ to implementation dependent, jak ses snažil nesmyslně tvrdit. Příště si přečti specifikaci, než začneš zase psát hovadiny.

Mimochodem co máš pořád s tím undefined? Já nechytám undefined. Chytám aritmetickou výjimku, to není undefined.


andy

Re:Rychlost Haskell vs. C++
« Odpověď #286 kdy: 04. 09. 2018, 01:50:32 »
Jasně, a teď prosím ukaž, jak budeš chytat undefined v non-IO monadu. Exceptiony normálně chytat jdou a je to pure:

Viz např: http://hackage.haskell.org/package/exceptions-0.10.0/docs/Control-Monad-Catch.html.

Jsem jedno velké ucho...

Proč bych to jako měl dělat? Vůbec to nepotřebuju. Mně stačí chytit výjimku v IO.
Nojo... víš, to je tak: pokud v tom programu provedeme výměnu IO za třeba "Either SomeException" obalené nějakým WriterT, kde si odchytíme ty putStrLn, a všechny ty funkce budou na stejné vstupy dávat stejné výstupy, pak by tvůj program měl ve výsledku udělat totéž. To je tak nějak základem pure programování. Takže pokud taková transformace není možná, pak je tvůj program nekorektní. A vzhledem k tomu, že ty tvrdíš, že je korektní, tak bych očekával, že mi ukážeš, jak se to krásně udělá. Nebo zase jenom něco tvrdíš a skutek utek?

Citace
Je jasně specifikované, že v IO se výjimky chytat dají. NENÍ to implementation dependent, jak ses snažil nesmyslně tvrdit. Příště si přečti specifikaci, než začneš zase psát hovadiny.
No jo, ale popis libc není popis chování jazyka C, stejně tak popis knihovních funkcí není popisem Haskellu. A "base" je normální knihovna.....

Citace
Mimochodem co máš pořád s tím undefined? Já nechytám undefined. Chytám aritmetickou výjimku, to není undefined.
Jasně, ukaž jak rozlišíš v pure kódu undefined a aritmetickou výjimku. Třeba můžeš začít s tím MonadCatch, rovnou mi na to napiš unit test. Těším se.

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #287 kdy: 04. 09. 2018, 10:21:52 »
Nojo... víš, to je tak: pokud v tom programu provedeme výměnu IO za třeba "Either SomeException"...
Když IO vyměním za australského klokana, tak to taky nebude fungovat. Vypovídá to o něčem? Ne. Nevymýšlej blbosti a drž se specifikace jazyka: https://www.haskell.org/tutorial/io.html
The use of the name main is important: main is defined to be the entry point of a Haskell program (similar to the main function in C), and must have an IO type, usually IO ().

No jo, ale popis libc není popis chování jazyka C, stejně tak popis knihovních funkcí není popisem Haskellu. A "base" je normální knihovna.....
Už ti asi 20 stránek vysvětluju, jak fungují výjimky v Haskellu a pořád jsi to nepochopil a jsi schopen psát takové blbosti, jakože je to implementation dependent. Tak si přečti relevantní specifikace, než se k něčemu začneš vyjadřovat. O člověku, který nezná standardní C knihovnu, se fakt nedá říct, že umí C, i když si třeba pure akademik myslí opak.

Jasně, ukaž jak rozlišíš v pure kódu undefined a aritmetickou výjimku. Třeba můžeš začít s tím MonadCatch, rovnou mi na to napiš unit test. Těším se.
Nic ti ukazovat nebudu, nepotřebuju v pure kódu chytat aritmetickou výjimku. Nebudu dělat každou blbost, kterou si vymyslíš. Výjimku chytám v IO, tak jak se to má dělat a jak je to obvyklé. Hotovo. Tečka.

Dr. Heinz Doofenshmirtz

Re:Rychlost Haskell vs. C++
« Odpověď #288 kdy: 04. 09. 2018, 15:03:03 »
Mohli byste mi napsat kdo z vás má pravdu, nechce se mi to číst celé :)

Jak je to s jazyky rychlejšími než C++
« Odpověď #289 kdy: 04. 09. 2018, 16:40:56 »
Citace
Mohli byste mi napsat kdo z vás má pravdu, nechce se mi to číst celé

To už je takový evergreen, že Java/Haskell/cokoli je rychlejší než C/C++. Zbožné přání milovníků toho kterého jazyka. K tomu většinou také přísluší cinknutý benchmark, který to dokazuje - to je také evergreen.

Na to, aby jazyk X mohl být rychlejší než C/C++, potřebujete mít splněny dvě podmínky:

1) Mít ve zdrojovém kódu programovacího jazyka X více informací pro optimalizaci než má C/C++. Ne že by to byl až takový problém mít takový programovací jazyk vytvořit, ale moderní trend už hodně dlouho je tvořit jazyky přesně opačné.

2) Dát do vývoje optimalizovaného kompilátoru programovacího jazyka X dostatečné prachy. Musíte konkurovat astronomickým částkám, které byly dány do vývoje optimalizovaných C/C++ kompilátorů.

Zejména podmínce ad 2) se hodně blbě konkuruje.


andy

Re:Rychlost Haskell vs. C++
« Odpověď #290 kdy: 04. 09. 2018, 17:41:15 »
Já myslím, že je problém v tom, že jsi se neobtěžoval odpovědět na tu otázku ohledně toho, co považuješ za korektnost programu. Ta otázka byla v tom stylu, jestli, za předpokladu, že ten program dává správné výsledky a v jazyce neexistují konstrukce s nedefinovaným chováním, jestli vůbec je možné v takovém jazyce napsat nekorektní program. Vypadá to, že ta odpověď by měla znít "ANO", ale ty jako židle trváš na svém a strašně se bojíš mi na cokoliv takového odpovědět.

Stejně tak otázka byla, jestli ten program s těmi chybnými typy, ale který lze přeložit s defer-type-check je korektní a opět by odpověď měla být ANO. Ale ty se prostě bojíš diskutovat. Člověk by čekal, že si za svým názorem budeš stát, ale ty se bojíš.

Navíc když se podíváš do těch 20 let starých paperů, kde ty výjimky zaváděli, tak ti lidi v té době přesně takhle, jako ty, mysleli. Akorát že od té doby uteklo hodně vody a dneska se ten náhled trošku změnil. S bottom se strašně blbě pracuje, to, co před 20 lety vypadalo jako skvělý nápad se ukázalo jako v zásadě naprosto nepoužitelné. Ona to prostě je chyba programu. No a dneska s různými snahami o formální verifikace a odstranění chybných stavů se od toho totálně upustilo. Naopak se hodně pracuje s různými zaměnami typů, čistě prakticky pak s tím, jak jednoduše vyrábět třeba ty unit-testy na non-pure kód apod. A tohle všechno prostě přestane fungovat, pokud ten program dojde do nekorektního stavu.

Ono to fakt je něco ve stylu null-pointer-exception. Vzhledem k tomu, že na UNIXu je to všechno definované, pak lze tímto způsobem (na UNIXu) vyrobit korektní program. Splňuje všechny tvé požadavky... které se domnívám, že bereš pod pojmem "korektní".

Takže ano, z hlediska operational-semantics to korektní je. Což už říkám asi tak od začátku. Z hlediska smyslu těch rovnic nikoliv. Což taky říkám od začátku. Ano, je to akademické. Ono vůbec Haskell je takový akademický. Není pro lopaty.

Citace
Mimochodem co máš pořád s tím undefined? Já nechytám undefined. Chytám aritmetickou výjimku, to není undefined.
Celý rozdíl mezi undefined a aritmetickou výjimkou je to, že to je jiný typ. Tak asi na té úrovni, že z jednoho vylítně "UserError" a z druhého "ArithException". V pure kódu se to chytnout nedá, v IO se to liší akorát v typu. Já tu větu pochopil, že se to v něčem zásadním liší... a vysvětlil bys mi teda v čem?

Ale víš, tohle je sranda - fakt mě baaaaví, jak píšeš že tomu nerozumím, to je fakt psina... ale teď jsem si prošel svoje zdrojáky, a kromě toho, že v těch starších místo "throwIO . userError" používám přímo "error" (protože holt se člověk učí..), tak asi tak v 95% případů v pure funkcích tam u toho jsou popisky "internal errror, cannot happen", v 5% "nebudu řešit chybu v dekódování toho, co jsem sám zakódoval, slítni" a v 0% ve stylu "signalizuj něco někam, kde se to chytá".

Takže když tady přijdeš s tím, že Haskell je strašný jazyk, jak XStrict může rozbít kód...tak mi to připadá...poněkud úsměvné. Programy, které to rozbije, si to zaslouží, jakýkoliv náznak nějaké formální verifikace by je vyhodil z okna i s tím programátorem.

andy

Re:Rychlost Haskell vs. C++
« Odpověď #291 kdy: 04. 09. 2018, 17:50:40 »
Citace
Ta otázka byla v tom stylu, jestli, za předpokladu, že ten program dává správné výsledky a v jazyce neexistují konstrukce s nedefinovaným chováním, jestli vůbec je možné v takovém jazyce napsat nekorektní program. Vypadá to, že ta odpověď by měla znít "ANO", NE ale ty jako židle trváš na svém a strašně se bojíš mi na cokoliv takového odpovědět.
Ještě se to po sobě naučím číst....
 ;)

andy

Re:Rychlost Haskell vs. C++
« Odpověď #292 kdy: 04. 09. 2018, 20:40:28 »
Někdy je potřeba se zamyslet....

Proč ten tvůj program není v Strict korektní?

Protože "seq" není pure, pokud je první parametr bottom. Proč "seq" není pure? Protože bottom není observable a seq mění chování v závislosti na tom, jestli to bottom je nebo není. Takže není pure. Používání non-pure funkcí v pure kontextu v haskellu má nedefinované chování (non-pure -> má chování). Lze snadno vyrobit třeba i pomocí unsafePerformIO.

Stačí takhle?

JSH

Re:Jak je to s jazyky rychlejšími než C++
« Odpověď #293 kdy: 04. 09. 2018, 21:18:13 »
Citace
Mohli byste mi napsat kdo z vás má pravdu, nechce se mi to číst celé

To už je takový evergreen, že Java/Haskell/cokoli je rychlejší než C/C++. Zbožné přání milovníků toho kterého jazyka. K tomu většinou také přísluší cinknutý benchmark, který to dokazuje - to je také evergreen.
Tak příspěvky, že je Haskell rychlejší než c++, by v tomhle flamu napočítal na jedné ruce i nešikovný truhlář. Ten flame je úplně o něčem jiném.

Re:Jak je to s jazyky rychlejšími než C++
« Odpověď #294 kdy: 04. 09. 2018, 21:37:29 »
Citace
Tak příspěvky, že je Haskell rychlejší než c++, by v tomhle flamu napočítal na jedné ruce i nešikovný truhlář. Ten flame je úplně o něčem jiném.

Jo, připadl jsem si s tou odpovědí jako mimoň, i když reagovala na nadpis tématu.

Pak je tu diskuse dvou lidí o tom, co subjektivně považují dle názoru za korektní a co nikoli. Nicméně Haskell neznám natolik, abych mohl posoudit.

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #295 kdy: 04. 09. 2018, 21:41:12 »
Někdy je potřeba se zamyslet....

Proč ten tvůj program není v Strict korektní?

Protože "seq" není pure, pokud je první parametr bottom. Proč "seq" není pure? Protože bottom není observable
Zamyslel ses asi málo. Bottom jako výjimka je v Haskellu observable, dá se chytit. Což je přesně to, co dělám.

top

Re:Rychlost Haskell vs. C++
« Odpověď #296 kdy: 04. 09. 2018, 21:53:28 »

Re:Rychlost Haskell vs. C++
« Odpověď #297 kdy: 04. 09. 2018, 22:08:11 »
Což je přesně to, co dělám.

Možná bys to právě dělat neměl :D

andy

Re:Rychlost Haskell vs. C++
« Odpověď #298 kdy: 04. 09. 2018, 22:08:36 »
Někdy je potřeba se zamyslet....

Proč ten tvůj program není v Strict korektní?

Protože "seq" není pure, pokud je první parametr bottom. Proč "seq" není pure? Protože bottom není observable
Zamyslel ses asi málo. Bottom jako výjimka je v Haskellu observable, dá se chytit. Což je přesně to, co dělám.
Bottom není observable v pure kódu. Ty to chytáš v IO. Ale ono je to dokonce ještě jednodušší, funkce seq má signature:
Kód: [Vybrat]
seq :: a -> b -> bTahle funkce má pouze 2 možné implementace (Free theorems):
Kód: [Vybrat]
seq a = id
seq a = bottom
Ten polymorfní typ říká, že ta funkce (seq) o tom prvním parametru vůbec nic neví. No a tady výsledek té funkce evidentně na tom parametru závisí.


lopata

Re:Rychlost Haskell vs. C++
« Odpověď #299 kdy: 04. 09. 2018, 22:19:55 »
Andy, seq v Haskellu je "magic": https://stackoverflow.com/questions/6442019/how-does-seq-force-functions

seq cannot be implemented in Haskell. Instead, it is a primitive "hook" into evaluation to weak-head normal form in whatever runtime your Haskell is running on. E.g. on GHC it is compiled to a case in GHC Core, which triggers evaluation to the outermost constructor.

Hele, nechceš se na to už vykašlat? Není lepší jít za holkama, dát si pivo, nebo si třeba jít zaběhat? Nejen computer science živ je člověk. Já s dovolením půjdu za těma holkama.