Feature Flags

By default, the glsp crate's only transitive dependencies are smallvec, owning_ref, stable_deref_trait, fnv, and the Rust standard library.

$ cargo tree
glsp v0.2.0
+-- glsp-engine v0.2.0
|   +-- fnv v1.0.7
|   +-- owning_ref v0.4.1
|   |   +-- stable_deref_trait v1.1.1
|   +-- smallvec v1.4.0
+-- glsp-proc-macros v0.2.0
|   +-- glsp-engine v0.2.0 (*)
+-- glsp-stdlib v0.2.0
    +-- glsp-engine v0.2.0 (*)
    +-- glsp-proc-macros v0.2.0 (*)
    +-- smallvec v1.4.0 (*)

All large or non-essential dependencies are feature-gated, and all features are disabled by default.

"unsafe-internals"

By default, glsp's implementation doesn't use any unsafe code at all. This is guaranteed using #![forbid(unsafe_code)].

With the "unsafe-internals" feature enabled, a small amount of unsafe code is switched on in the glsp-engine crate. This makes the interpreter run roughly twice as fast.

Note that glsp's public API is always intended to be safe, even when the "unsafe-internals" feature is enabled. The purpose of this feature flag is to mitigate the safety impact of any undetected bugs which are internal to the glsp crate.

Even with "unsafe-internals" disabled, glsp may depend on crates which themselves use unsafe internally - currently smallvec, owning_ref and optionally bincode. As usual, you shouldn't trust this crate's safety unless you also trust its dependencies.

"serde"

Introduces a dependency on the serde crate, but not serde_derive.

Implements Serialize and Deserialize for Val, Root, Arr, Tab, Str and Sym. Note that the serializer will gracefully fail if it encounters a non-representable type, or a type which contains reference cycles. Gensyms and textually-ambiguous symbols can be serialized and deserialized, even though they're not representable.

"compiler"

Introduces a dependency on the "serde" feature, as well as the crates bincode, flate2, syn, quote, proc_macro2 and serde_derive.

This feature flag enables GameLisp source code to be pre-compiled into an efficient binary format. Provides the compile! and eval! macros, and the glsp::load_and_compile and glsp::load_compiled functions. See the Compilation chapter for more information.