Skip to content

A more flexible version of the Rust `scoped-tls` library

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

Diggsey/scoped-tls-hkt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

scoped-tls-hkt

CI

Documentation

A more flexible version of scoped-tls, allowing the following additional features:

  • Storage of references to dynamically sized types.
  • Storage of mutable references.
  • Storage of types containing unbound lifetime parameters (higher-kinded types).
  • Some combination of the above.
# Cargo.toml
[dependencies]
scoped-tls-hkt = "0.1"

Scoped thread-local storage

A thread-local variable will appear distinct to each thread in a program. Values stored from one thread will not be visible to other threads and vice versa.

Scoped thread-local storage builds on this concept by storing a new value into a thread-local variable when a block of code is entered, and then restoring the original value when execution leaves that block.

By ensuring that the original value is restored, even if the code inside the block panics, this allows non-static data (ie. types with lifetimes, such as references) to be temporarily (and safely) stored in a thread-local variable.

Scoped TLS is useful because it allows code deep within a program to access data such as configuration or other contextual information set at the top level, without having to thread additional parameters through all of the functions in-between. In some cases, such as where a library does not provide the ability to pass through additional data, scoped TLS can be the only viable option.

However, it should be used sparingly, because this implicitness can make it harder to understand and debug your programs. Furthermore, access to TLS can have a measurable performance impact, partly because some platforms do not have efficient implementations of TLS, and partly because TLS is opaque to the compiler, so it will often inhibit compiler optimizations that would have otherwise applied.

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in scoped-tls-hkt by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

A more flexible version of the Rust `scoped-tls` library

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages