An embeddable, thread-safe implementation of the cubescript language
 
 
Go to file
Daniel Kolesa 29e833dae6 more extensive readme 2016-08-27 19:26:52 +01:00
.gitignore add .so to gitignore 2016-02-26 00:15:08 +09:00
COPYING.md trailing newlines 2016-02-07 21:22:39 +00:00
Makefile add cs_util with portable string->integer and string->float conversions 2016-08-15 02:19:59 +01:00
README.md more extensive readme 2016-08-27 19:26:52 +01:00
cs_gen.cc Revert "get rid of shared state for src_file/src_str" 2016-08-24 19:23:57 +01:00
cs_util.cc simplify float parsing 2016-08-17 17:10:55 +01:00
cs_util.hh cleanups 2016-08-15 18:55:22 +01:00
cs_vm.cc make src_file and src_str static vars (eventually thread_local) 2016-08-24 19:31:50 +01:00
cs_vm.hh make src_file and src_str static vars (eventually thread_local) 2016-08-24 19:31:50 +01:00
cubescript.cc move some implementations 2016-08-25 21:24:23 +01:00
cubescript.hh move some implementations 2016-08-25 21:24:23 +01:00
cubescript_conf.hh initial support for custom allocators 2016-08-21 01:34:33 +01:00
lib_list.cc initial support for custom allocators 2016-08-21 01:34:33 +01:00
lib_math.cc rename TaggedValue 2016-08-18 19:38:30 +01:00
lib_str.cc initial support for custom allocators 2016-08-21 01:34:33 +01: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 it's largely rewritten. Here are some of the benefits over the original implementation:

  • Independent implementation that can be embedded in any project
  • No global state - multiple Cubescripts can be present within a single program
  • Modern C++14 API (no macro mess like in the original)
  • C++14 lambdas can be used as commands (including captures and type inference)
  • Clean codebase that is easy to read and contribute to
  • Core types can be changed as needed at compile time (larger floats? no problem)
  • 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.

See COPYING.md for licensing information.