-------- Original Message --------
Subject: Re: [clean-list] Clean versus Haskell
Date: Thu, 15 Oct 2009 06:41:20 +0100
From: Adrian Hey <[email protected]>
To: Philippos Apolinarius <[email protected]>
References: <[email protected]>

Hello Philippos,

GHC has a long standing performance bug for garbage collection and
mutable arrays:

http://hackage.haskell.org/trac/ghc/ticket/650

For some reason they haven't (can't?) fixed it. I guess the
authors of Haskell/ghc shootout entries are aware of this so don't
use native mutable arrays in their entries (at least not those that
show haskell/ghc to be "fast" :-)

Regards
--
Adrian Hey

Philippos Apolinarius wrote:
I wrote a very simple program to check whether Haskell improved its array 
processing libraries or not. Here is how to compile and run the program arr.hs 
in Haskell (I have used the GHC compiler):

ghc -O arr.hs -o arr.exe

$ time arr.exe +RTS -K32000000
2.8e8

real    0m3.938s
user    0m0.031s
sys     0m0.000s

The same program in Clean:
C:\Clean 2.2\exemplos\console>arraytest.exe
280000000
Execution: 0.01  Garbage collection: 0.01  Total: 0.03

C:\Clean 2.2\exemplos\console>arraytest.exe
280000000
Execution: 0.01  Garbage collection: 0.01  Total: 0.03

This means that Clean is 390 times faster than Haskell in this particular 
problem. These results makes me worder whether Haskell is safer than Clean. It 
turns out that Haskell checks index out of range at runtime, exactly like 
Clean. Larger problems make the difference between Clean and Haskell even 
worse. For instance, neural networks like the one described in Schmidtt et al. 
run 400 times faster in Clean.

Haskell seems to be slow, and not safe. For instance, GHC compiler does not at a program trying to write into a closed handle.
module Main where
 import System( getArgs )
 import IO

main = do args <- getArgs
          if (length args /= 2)
        then putStr "Usage: f1a f2a <n>"
            else (do
              fromHandle <- openFile (head args)  ReadMode
              contents   <- hGetContents fromHandle
              toHandle <- openFile (head (tail args)) WriteMode
              hClose toHandle  -- Comment this line
              hPutStr toHandle contents
              hClose toHandle
              putStr "Done.")

The Clean equivalent program is somewhat smaller. In my opinion it is easier to 
understand. What is more important, Clean compiler balks at closed handles.

module cleancopy
import StdEnv, ArgEnv

Start w
  # argv= getCommandLine
| size argv < 3 = abort "Usage, etc." # (ok, f, w)= fopen argv.[1] FReadText w
      (contents, f)= freads f 64000
      (ok, f, w)= fopen argv.[2] FWriteText w
      f= fwrites contents f
  = fclose f w

Below you will find the array examples. You can check that Clean is really much 
faster than Haskell. I wonder why the Benchmarks Game site does not report such 
a large difference between Haskell and Clean performances. I believe that 
people who wrote Haskell benchmarks for the Benchmarks Game site cheated in 
using foreign pointers to access arrays.

-- arr.hs
import Control.Monad.ST
import Data.Array.ST
main = print $ runST
(do arr <- newArray (1,2000000) 137.0 :: ST s (STArray s Int Double)
              a <- readArray arr 1
              b <- readArray arr 1
              fn 2000000 arr 0.0 )


fn i a acc | i < 1 = do (return acc) fn i a acc= do b <- readArray a i
             writeArray a i (b+3.0)
             c <- readArray a i
             fn (i-1) a (acc+c)

//Clean version
module arraytest
import StdEnv
fn i a acc | i<1 = acc
fn i a=:{[i]=b} acc
  # a= {a&[i]= b+3.0}
  # (c, a)= a![i]
  = fn (i-1) a (c+acc)
Start= fn 2000000 vt 0.0
where
   vt:: .{#Real}
   vt = createArray 2000001 137.0



--- On Mon, 10/12/09, rinus plasmeijer <[email protected]> wrote:

From: rinus plasmeijer <[email protected]>
Subject: [clean-list] Re: Clean
To: "Henrique" <[email protected]>
Cc: [email protected]
Received: Monday, October 12, 2009, 1:22 AM




Hi Henrique

Is this e-mail still working? http://clean.cs.ru.nl/
Yes.

I want to know more about Clean: news?
updates?
What is the future of Clean?
See: http://wiki.clean.cs.ru.nl/Latest_developments We are working on a new version which allows you to mix Clean and Haskell 98 code. It is a lot of work, it will still take some time.
Is Haskell killing Clean?
Haskell is certainly much more used, which is also the raison for adding a Haskell front end.

I would like to
learn and test Clean, and maybe then use it commercially.
Where do I
can download it? I send e-mail to [email protected] , asked for Clean at the site above, but I got no answer.

We did not got your email.
To download browse to: http://clean.cs.ru.nl/Download/main/main.htm
Obs: I am using windows platform.
Thats fine, it should work on any windows platform.
Greetings,
Rinus -----Inline Attachment Follows-----

_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list



      __________________________________________________________________
Make your browsing faster, safer, and easier with the new Internet Explorer® 8. 
Optimized for Yahoo! Get it Now for Free! at 
http://downloads.yahoo.com/ca/internetexplorer/

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email ______________________________________________________________________


------------------------------------------------------------------------

_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list


_______________________________________________
clean-list mailing list
[email protected]
http://mailman.science.ru.nl/mailman/listinfo/clean-list

Reply via email to