aisamanra/rust-haskell-ffi

Toy example of calling Rust from Haskell

Haskell

132

3 commits

updated Jun 10, 2015

See the code

README

Rust-Haskell FFI Example

A lot of Haskell people I've talked to are excited about the prospect of using Rust as a replacement for C in certain speed-critical or low-level parts of their application. To that end, and in light of the recent (as of this writing) Rust 1.0 alpha release, I've shown here a small example of calling Rust from Haskell.

This contains a single Haskell file and two Rust libraries which Haskell can call out to. The first Rust library is contained in fact.rs and implements a simple factorial, which is easier to wrap; the second is contained in point.rs and demonstrates allocating memory in Rust, passing it to Haskell, using wrapped Rust functions to manipulate it, and finally allowing Haskell's GC to call back into Rust to free it.

This of course requires GHC and a reasonably recent version of rustc installed. This version has been tested with GHC versions 7.8.4 and 7.10.1, and the following rustc versions:

1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)

All the examples here I release into the public domain.

Contributors

aisamanra

3 commits

aisamanra/rust-haskell-ffi

Toy example of calling Rust from Haskell

Haskell

132

3 commits

updated Jun 10, 2015

See the code

README

Rust-Haskell FFI Example

A lot of Haskell people I've talked to are excited about the prospect of using Rust as a replacement for C in certain speed-critical or low-level parts of their application. To that end, and in light of the recent (as of this writing) Rust 1.0 alpha release, I've shown here a small example of calling Rust from Haskell.

This contains a single Haskell file and two Rust libraries which Haskell can call out to. The first Rust library is contained in fact.rs and implements a simple factorial, which is easier to wrap; the second is contained in point.rs and demonstrates allocating memory in Rust, passing it to Haskell, using wrapped Rust functions to manipulate it, and finally allowing Haskell's GC to call back into Rust to free it.

This of course requires GHC and a reasonably recent version of rustc installed. This version has been tested with GHC versions 7.8.4 and 7.10.1, and the following rustc versions:

1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)

All the examples here I release into the public domain.

Contributors

aisamanra

3 commits

Languages

Haskell

52.6%

Rust

37.7%

Makefile

9.8%