- Monday, August 6: Chapter 16 hosted by Charlottesville Haskell Book Reading Group in Charlottesville, va, USA
- Monday, August 6: Combinating - The Weekly Function hosted by Orange Combinator - Functional Programming In OC in Irvine, CA
- Tuesday, August 7: Techniques in Functional JavaScript hosted by NoFUN - New Orleans Functional Programming in New Orleans, USA
- Tuesday, August 7: [Lightning talks / Show and tell](https://www.meetup.
| #!/usr/bin/env stack | |
| -- stack --resolver lts-12.10 script | |
| {-# OPTIONS_GHC -Weverything -Wno-unsafe -Wno-implicit-prelude #-} | |
| module Main ( main ) where | |
| import qualified Control.Concurrent as Concurrent | |
| import qualified Control.Monad as Monad | |
| import qualified Control.Monad.Catch as Catch | |
| import qualified Control.Monad.IO.Class as IO | |
| import qualified Data.Map as Map | |
| import qualified Data.Maybe as Maybe |
| #!/usr/bin/env stack | |
| -- stack --resolver lts-10.0 script | |
| module Main | |
| ( main | |
| ) | |
| where | |
| import qualified Control.Monad as Monad | |
| import qualified Data.ByteString as ByteString |
| replays/0ad2.replay Offline | |
| replays/000b.replay Private | |
| replays/1a12.replay Offline | |
| replays/1ae4.replay Offline | |
| replays/1bc2.replay Offline | |
| replays/1d1d.replay Offline | |
| replays/1ef9.replay Private | |
| replays/1f37.replay Offline | |
| replays/2cfe.replay Online | |
| replays/3abd.replay LAN |
| #!/usr/bin/env stack | |
| -- stack --resolver nightly-2018-06-01 script --compile | |
| -- To run this, first install Stack: <https://haskellstack.org>. | |
| -- Then run this from the command line: `stack edit-replay.hs input.replay output.replay` | |
| module Main ( main ) where | |
| import qualified Data.ByteString.Lazy as L | |
| import qualified Data.Map as M |
| { | |
| "packages": [ | |
| { | |
| "location": "https://hackage.haskell.org/package/3d-graphics-examples", | |
| "name": "3d-graphics-examples" | |
| }, | |
| { | |
| "location": "https://hackage.haskell.org/package/3dmodels", | |
| "name": "3dmodels" | |
| }, |
I'm back with more bit-level benchmarks in Haskell. The goal here is to do some work on each bit in a large string of bytes. The time to beat is about 5 ms, which is how long Rust takes to do this. Unfortunately it looks like Haskell isn't quite up to the task:
| Type | Time |
|---|---|
| ByteString | 483.8 ms |
| Vector Bool (boxed) | 315.9 ms |
| Vector Word8 (boxed) | 500.3 ms |
| 0008: Decoded 0.090 MB in 156.435 ms at 0.575 MB/s | |
| 000b: Decoded 0.356 MB in 411.709 ms at 0.864 MB/s | |
| 07e9: Decoded 0.029 MB in 20.839 ms at 1.376 MB/s | |
| 0ad2: Decoded 0.027 MB in 17.437 ms at 1.529 MB/s | |
| 1205: Decoded 0.440 MB in 624.863 ms at 0.704 MB/s | |
| 160c: Decoded 0.539 MB in 685.560 ms at 0.786 MB/s | |
| 16d5: Decoded 0.029 MB in 20.244 ms at 1.446 MB/s | |
| 18d6: Decoded 0.021 MB in 14.670 ms at 1.430 MB/s | |
| 1a12: Decoded 0.094 MB in 77.999 ms at 1.208 MB/s | |
| 1ae4: Decoded 0.025 MB in 17.057 ms at 1.450 MB/s |
| Type | Time (ns) |
|---|---|
[Bool] |
65060000 |
[Word8] |
12520000 |
Vector Word8 |
186800 |
U.Vector Word8 |
183200 |
ByteString |
176300 |
Vector Bool |
92630 |
U.Vector Bool |
86580 |
I am the maintainer of Rattletrap, a Rocket League replay parser written in Haskell. Recently I became aware of @nickbabcock's Boxcars project, which is also a Rocket League replay parser but it's written in Rust. I generally think of Haskell as Fast Enough ™️ for a high-level language. I was curious to see how much faster Rust would be for this particular application. You can see some casual benchmarks here: nickbabcock/boxcars#6.
This Gist benchmarks four basic operations in both Haskell and Rust. I am a Haskell programmer and want to see it triumph, but it turns out Rust is at least an order of magnitude faster in these benchmarks. However, in the benchmark that actuall does something (the CRC benchmark), Haskell and Rust are within one millisecond of each other. If you think there are any problems with the benchmark, please let me know.