Hacker Timesnew | past | comments | ask | show | jobs | submitlogin

I'm sorry I used a trivial example -- the point was to show how the assembly corresponded to the fused loop, which necessitated a simple example. And this is the internet, so everyone tries to find a closed form for everything. Which misses the point!

Of course, the Haskell:

   print (sum (enumFromTo 1 n))
isn't exactly bad. And you can use any of these other 134 functions to get fused loops: http://hackage.haskell.org/packages/archive/vector/0.5/doc/h...

And there's lots of interesting problems you can solve with that rich a set of primitives.

This isn't an example benchmark, it's an example translation, so you can see the optimization at work. Bigger examples yield assembly that no casual reader could follow -- so don't get distracted by the fact there's a closed form!!



Glad to see there is a prettier way of doing it in Haskell!

Do I understand then that this basically building up a sort of parallel language for expressions in Haskell which optimize really, really well?


In a way. It's a subset of Haskell focused on array operations that optimize really really well. You can use these instead of list operations, basically, and getter performance in all sorts of ways.


You could get very good performance when you do the fusion manually, too. The really exciting thing about fusion is that it allows really fast code that _composes_ well.

Composability is also what makes Haskellers excited about Monads and software transactional memory (STM). STM give composable concurrency --- in contrast with locks which are notoriously uncomposable.


> Glad to see there is a prettier way of doing it in Haskell!

Most Haskellers would write it a little differently from Don: 'main = print $ sum [1..n]'. The '..' is syntactic sugar over 'enumFromTo'.


I'd prefer

  main = print . sum $ [1..n]
But that's almost the same.


Yes, you can of course use lists. I'm interested in getting the compiler to produce the best code it can, hence I use slightly different libs and flags and such.


Your version is good. I just wanted to give a small sample of idiomatic Haskell code.

Colomon's post (and his subsequent enlightened reply) were good parts of the discussion, too.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: