2015-04-16 21:37:32 +08:00
|
|
|
[![travis][travis-badge]][travis-url]
|
|
|
|
[![rustdoc][rustdoc-badge]][rustdoc-url]
|
|
|
|
|
2015-07-23 05:16:49 +08:00
|
|
|
[travis-badge]: https://img.shields.io/travis/edef1c/libfringe/master.svg?style=flat-square
|
2015-04-16 21:37:32 +08:00
|
|
|
[travis-url]: https://travis-ci.org/edef1c/libfringe
|
|
|
|
[rustdoc-badge]: https://img.shields.io/badge/docs-rustdoc-brightgreen.svg?style=flat-square
|
|
|
|
[rustdoc-url]: https://edef1c.github.io/libfringe
|
|
|
|
|
|
|
|
# libfringe
|
|
|
|
|
|
|
|
libfringe is a low-level green threading library for Rust.
|
|
|
|
It's usable in freestanding environments (like kernels),
|
|
|
|
but it can also provide an easy-to-use stack allocator using
|
|
|
|
your operating system's memory mapping facility.
|
|
|
|
|
|
|
|
## Performance
|
|
|
|
|
2015-04-17 01:17:37 +08:00
|
|
|
libfringe does context switches in 3.5ns flat on x86_64!
|
2015-04-16 21:37:32 +08:00
|
|
|
```
|
|
|
|
test swap ... bench: 7 ns/iter (+/- 0)
|
2015-04-17 01:17:37 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
…and on x86, a mere 2.5ns!
|
|
|
|
|
|
|
|
```
|
|
|
|
test swap ... bench: 5 ns/iter (+/- 1)
|
2015-04-16 21:37:32 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
## Limitations
|
|
|
|
|
2015-04-17 01:20:58 +08:00
|
|
|
libfringe currently doesn't work on anything but x86 and x86_64,
|
2015-04-16 21:37:32 +08:00
|
|
|
and is untested on anything but Linux.
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
|
|
|
libfringe is a [Cargo](https://crates.io) package.
|
|
|
|
It's not stable software yet, so you'll have to use it as a git dependency.
|
|
|
|
Add this to your `Cargo.toml`:
|
|
|
|
```toml
|
|
|
|
[dependencies.fringe]
|
|
|
|
git = "https://github.com/edef1c/libfringe.git"
|
|
|
|
```
|
|
|
|
|
|
|
|
### Feature flags
|
|
|
|
|
|
|
|
[Cargo's feature flags]: http://doc.crates.io/manifest.html#the-[features]-section
|
|
|
|
libfringe provides several optional features through [Cargo's feature flags].
|
|
|
|
Currently, all of them are enabled by default.
|
|
|
|
|
|
|
|
#### `valgrind`
|
|
|
|
|
|
|
|
[Valgrind]: http://valgrind.org
|
|
|
|
[Valgrind] integration. libfringe will register context stacks with Valgrind.
|
|
|
|
|
|
|
|
#### `os`
|
|
|
|
|
|
|
|
[Built-in stack allocator]: https://edef1c.github.io/libfringe/fringe/struct.OsStack.html
|
|
|
|
[Built-in stack allocator] using your your operating system's anonymous memory mapping facility.
|
|
|
|
Currently only available for Unix.
|
|
|
|
|