WIP: Jim Tcl bindings to the sled embedded key-value database.
Install Jim Tcl libraries and the jimsh interpreter by cloning and running
git clone https://github.com/msteveb/jimtcl
cd jimtcl
# configure some useful extensions
./configure --with-ext="oo tree binary sqlite3" --enable-utf8 --ipv6 --disable-docs
make
sudo make install
jimsh # the jim tcl interpreter
Build the rust extension (this project) as a shared library, and copy to /usr/local/lib/jim/sled.so
git clone https://gitlab.com/keyvalue/sled-jimtcl.git
cd sled-jimtcl
cargo build
sudo cp $(pwd)/target/debug/libsled_jimtcl.so /usr/local/lib/jim/sled.so
Note that the shared library's path under target will be different if you
use cargo build --release.
A naming scheme is required to allow the jimsh to find your extension. For
example, to create a package named foo, the name should be the same across
several locations in Tcl, Rust (or C) code, and on disk.
- Users of your package call
package require fooin Tcl - Build artifact is named foo.so (or .tcl), located at /usr/local/lib/jim/foo.so
- Init function (in Rust or C) is named
Jim_<name>Initand has signaturepub fn Jim_fooInit(interp: *mut Jim_Interp) -> c_int - In Rust, Init and command functions are marked
#[no_mangle]so C can find them.
Sled is a file-based database, like rocksdb or leveldb. This extension behaves
like the sqlite extension: a single command sled is created on import, and
we use this command to create a db command, which we conventionally call db.
package require sled
sled db /some/path/to/dbSled supports basic key-value operations: put, get, scan, delete. Pass these to db, along with appropriate arguments.
db put foo baz
db put foo:foo2:foo3 baz
db scan foo { k v } {
# we expect 2 iterations here over the "foo" keyspace
puts "got key: $k"
puts "got val: $v"
}
set x [db get foo]
puts "a single get: $x"Use a symlink so you can avoid copying the .so file after every cargo build,
e.g. debug builds. Note that we rename the shared object to comply with the
Jim Tcl extension naming scheme.
sudo ln -s $(pwd)/target/debug/libsled_jimtcl.so /usr/local/lib/jim/sled.so
You will need to restart the Jim Tcl interpreter if you rebuild this extension.
The main repo is on GitLab