An embeddable, thread-safe implementation of the cubescript language
 
 
Go to file
Daniel Kolesa ce62593840 move idents/identmap into internal state 2016-09-12 20:04:59 +02:00
docs add support for several line editing approaches (pure stdin, linenoise, libedit, readline) 2016-09-01 17:50:02 +01:00
include/cubescript move idents/identmap into internal state 2016-09-12 20:04:59 +02:00
src move idents/identmap into internal state 2016-09-12 20:04:59 +02:00
tools move idents/identmap into internal state 2016-09-12 20:04:59 +02:00
.gitignore add .so to gitignore 2016-02-26 00:15:08 +09:00
COPYING.md add support for several line editing approaches (pure stdin, linenoise, libedit, readline) 2016-09-01 17:50:02 +01:00
Makefile allow for arbitrarily sized CsInt/CsFloat 2016-09-09 17:43:23 +02:00
README.md another update 2016-09-10 17:16:27 +02:00

README.md

libcubescript

Libcubescript is an embeddable implementation of the CubeScript scripting language. CubeScript is the console/config language of the Cube engines/games (and derived engines/games). It's a simplistic language defined around the idea of everything being a string, with Lisp-like syntax (allowing various control structures to be defined as commands).

Libcubescript is originally based on the implementation from the Cube 2 engine, but largely rewritten. Here are some of the benefits over the original implementation:

  • Independent implementation (can be embedded in any project)
  • No global state (multiple CubeScripts in a single program)
  • Modern C++14 API (no macros, strongly typed enums, lambdas, ranges etc.)
  • C++14 lambdas can be used as commands (including captures and type inference)
  • Error handling including recovery (protected call system similar to Lua)
  • No manual memory mangement, values manage themselves
  • Clean codebase that is easy to read and contribute to
  • Support for arbitrary size integers and floats (can be set at compile time)
  • Allows building into a static or shared library, supports -fvisibility=hidden

Upcoming features:

  • Thread safety (safely call into a single Cubescript state from multiple threads)
  • Custom allocator support (control over how heap memory is allocated)

The API is currently unstable and a work in progress. The codebase itself is also changing very quickly.

The only dependency is OctaSTD:

https://git.octaforge.org/tools/octastd.git/
https://github.com/OctaForge/OctaSTD

If OctaSTD can work on your system, so can libcubescript.

The supplied Makefile builds a static library on Unix-like OSes. Link this library together with your application and everything should just work. It also builds the REPL.

The project also bundles the linenoise line editing library which has been modified to compile cleanly as C++ (with the same flags as libcubescript). It's used strictly for the REPL only (you don't need it to build libcubescript itself). The version in the repository tracks Git revision c894b9e59f.

See COPYING.md for licensing information.