Rychlost Haskell vs. C++

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #195 kdy: 30. 08. 2018, 13:47:04 »
[Garance jazyka platí pouze za předpokladu definovaných hodnot. Error je undefined, takže veškeré garance jazyka končí.
Pořád vycházíš z chybného předpokladu, že volání error v Haskellu je bottom. Jenomže není, protože: A call to error terminates execution of the program.

Přechod Strict -> Lazy provede nějakou transformaci kódu (odstranění seq). Jazyk garantuje, že tohle je ekvivalentní transformace.
Jazyk to garantuje za předpokladu, že error je bottom. V Haskellu error není bottom.


andy

Re:Rychlost Haskell vs. C++
« Odpověď #196 kdy: 30. 08. 2018, 13:50:59 »
[Garance jazyka platí pouze za předpokladu definovaných hodnot. Error je undefined, takže veškeré garance jazyka končí.
Pořád vycházíš z chybného předpokladu, že volání error v Haskellu je bottom. Jenomže není, protože: A call to error terminates execution of the program.
To je popis chování, nikoliv hodnoty. Dobře, doména toho volání je Float+bottom. Když to není bottom, tak kolik to teda je?

andy

Re:Rychlost Haskell vs. C++
« Odpověď #197 kdy: 30. 08. 2018, 13:53:49 »
Jazyk to garantuje za předpokladu, že error je bottom. V Haskellu error není bottom.

Citace
Errors during expression evaluation, denoted by ⊥ (“bottom”), are indistinguishable by a Haskell program from non-termination. Since Haskell is a non-strict language, all Haskell types include ⊥. That is, a value of any type may be bound to a computation that, when demanded, results in an error. When evaluated, errors cause immediate program termination and cannot be caught by the user. The Prelude provides two functions to directly cause such errors:

error     :: String -> a 
undefined :: a
Je.

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #198 kdy: 30. 08. 2018, 14:03:04 »
To je popis chování, nikoliv hodnoty.
Ano ten kód závisí na popisu chování.

Dobře, doména toho volání je Float+bottom. Když to není bottom, tak kolik to teda je?
Nevím. Doména toho volání je Float+bottom. A volání error dělá něco jiného... Neptej se mě proč, já chování error nedefinoval.

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #199 kdy: 30. 08. 2018, 14:06:57 »
Errors during expression evaluation, denoted by ⊥ (“bottom”), are indistinguishable by a Haskell program from non-termination
Znovu opakuji, tohle v Haskellu neplatí. V Haskellu jde rozlišit volání error od non-termination protože: A call to error terminates execution of the program. Proto taky ten můj program může dělat všechny ty hnusné věci. Kdyby v Haskellu nešlo rozlišit volání error od bottom, potom by je dělat nemohl.


JSH

Re:Rychlost Haskell vs. C++
« Odpověď #200 kdy: 30. 08. 2018, 14:22:20 »
Errors during expression evaluation, denoted by ⊥ (“bottom”), are indistinguishable by a Haskell program from non-termination
Znovu opakuji, tohle v Haskellu neplatí. V Haskellu jde rozlišit volání error od non-termination protože: A call to error terminates execution of the program. Proto taky ten můj program může dělat všechny ty hnusné věci. Kdyby v Haskellu nešlo rozlišit volání error od bottom, potom by je dělat nemohl.
To byla citace z https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-230003.1

Opravdu trváš na tom, že to co se píše v dokumentaci v Haskellu neplatí?  ::)

Re:Rychlost Haskell vs. C++
« Odpověď #201 kdy: 30. 08. 2018, 14:56:58 »
Tak teď jsem opravdu zvědavý na odpověď.

Bacsa

Re:Rychlost Haskell vs. C++
« Odpověď #202 kdy: 30. 08. 2018, 18:41:57 »
Errors during expression evaluation, denoted by ⊥ (“bottom”), are indistinguishable by a Haskell program from non-termination
Znovu opakuji, tohle v Haskellu neplatí. V Haskellu jde rozlišit volání error od non-termination protože: A call to error terminates execution of the program. Proto taky ten můj program může dělat všechny ty hnusné věci. Kdyby v Haskellu nešlo rozlišit volání error od bottom, potom by je dělat nemohl.
Čekáme na reakci, lopato.

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #203 kdy: 30. 08. 2018, 22:34:48 »
Dokumentace Haskellu je prostě nekonzistetní. Program v Haskellu může chytit ErrorCall exception a odlišit tak volání error od bottom. Když koukám na Control.Exception, tak jsou tam další zajímavé věci. Takže si asi dáme další nekonečné kolečko teoretizování o bottom a invariantnosti strict -> lazy transformace v Haskellu:
Kód: [Vybrat]
{-# LANGUAGE ScopedTypeVariables #-}

import Control.Exception

main = catch
        (do
            putStrLn "Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo"
            input <- getLine
            let n = (read input :: Int)
            let a = div 1 n
            putStrLn "Tímto číslem lze dělit"
        )
        (\(err :: ArithException) -> putStrLn "Tímto číslem nelze dělit")

Strict:
Kód: [Vybrat]
ghc -O2 -XStrict test.hs
./test
Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo
0
Tímto číslem nelze dělit

Lazy:
Kód: [Vybrat]
ghc -O2 test.hs
./test
Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo
0
Tímto číslem lze dělit

Re:Rychlost Haskell vs. C++
« Odpověď #204 kdy: 30. 08. 2018, 23:04:04 »
Ty s tím nedáš pokoj, i když ti tu bylo stokrát vysvětleno, v čem máš chybu?

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #205 kdy: 30. 08. 2018, 23:17:33 »
Ty s tím nedáš pokoj, i když ti tu bylo stokrát vysvětleno, v čem máš chybu?
Cikádo, já jsem prostě lopata. Mám problém, potřebuju vydělit čísla, jak to sakra udělám? Stack oveflow nikdy nezklame!
https://stackoverflow.com/questions/20822365/how-to-catch-a-divide-by-zero-error-in-haskell?answertab=votes#tab-top
Tak jsem to z toho slepil. Nemůže to být špatně, je to na stack overflow a má to 9 upvotes!

andy

Re:Rychlost Haskell vs. C++
« Odpověď #206 kdy: 30. 08. 2018, 23:51:53 »
Dokumentace Haskellu je prostě nekonzistetní. Program v Haskellu může chytit ErrorCall exception a odlišit tak volání error od bottom.

Citace
Errors during expression evaluation, denoted by ⊥ (“bottom”), are indistinguishable by a Haskell program from non-termination.

catch :: Exception e => IO a -> (e -> IO a) -> IO a
Pomohlo?

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #207 kdy: 31. 08. 2018, 00:00:20 »

andy

Re:Rychlost Haskell vs. C++
« Odpověď #208 kdy: 31. 08. 2018, 00:06:32 »

lopata

Re:Rychlost Haskell vs. C++
« Odpověď #209 kdy: 31. 08. 2018, 00:08:31 »
IO akce není "expression evaluation".
A?