shared is a Nim library for shared types
Nim has a great string and seq implementation but sharing them across thread boundaries is problematic due to the thread local GC. This package attempts to provide basic shared types that can be used across threads.
The API attempts to be the same but not as extensive as the standard API. E.g. $ and & work as expected, but not every capability is being duplicated. Further, the implementation aims for safety and performance may not be the priority until later on. Every assignment results in realloc and copy to keep things simple.
Installation
shared can be installed via Nimble:
> nimble install shared
This will download and install shared in the standard Nimble package location, typically ~/.nimble. Once installed, it can be imported into any Nim program.
Usage
Detailed documentation here.
import shared/string
var
ss1 = newSharedString("abc")
echo ss1
ss1 = "def"
echo ss1
import shared/seq
var
sq1 = newSharedSeq(@[1, 2, 3])
sq2 = newSharedSeq(@["a", "b", "c"])
sq3: SharedSeq[string]
echo sq1
echo sq2
sq2.set(@["d", "e", "f"])
sq3 = sq2
Feedback
shared is a work in progress and any feedback or suggestions are welcome. It is hosted on GitHub with an MIT license so issues, forks and PRs are most appreciated.