2017-09-09 18:39:51 +00:00
|
|
|
# dst
|
2017-02-09 20:02:59 +00:00
|
|
|
|
2017-09-09 18:39:51 +00:00
|
|
|
[![Build Status](https://travis-ci.org/bakpakin/dst.svg?branch=master)](https://travis-ci.org/bakpakin/dst)
|
2017-06-25 23:56:17 +00:00
|
|
|
|
2018-01-29 20:46:26 +00:00
|
|
|
dst is a functional programming language and vm. The language is a lisp that replaces
|
|
|
|
the list with other data structures that have better realworld characteristics and performance.
|
|
|
|
The language can also easily bridge to native code, and
|
|
|
|
native useful datatypes. The bytecode vm is a register based vm loosely inspired
|
|
|
|
by the LuaJIT bytecode format.
|
2017-04-25 22:22:43 +00:00
|
|
|
|
2017-07-02 02:46:56 +00:00
|
|
|
There is a repl for trying out the language, as well as the ability
|
2017-04-25 22:22:43 +00:00
|
|
|
to run script files. This client program is separate from the core runtime, so
|
2017-09-09 18:39:51 +00:00
|
|
|
dst could be embedded into other programs.
|
2017-04-25 22:22:43 +00:00
|
|
|
|
2018-01-12 15:41:27 +00:00
|
|
|
## Features
|
|
|
|
|
2018-01-24 22:59:00 +00:00
|
|
|
* First class closures
|
|
|
|
* Garbage collection
|
|
|
|
* Lexical scoping
|
|
|
|
* First class green threads (continuations)
|
|
|
|
* Mutable and immutable arrays (array/tuple)
|
|
|
|
* Mutable and immutable hashtables (table/struct)
|
|
|
|
* Mutable and immutable strings (buffer/string)
|
2018-01-29 20:46:26 +00:00
|
|
|
* Lisp Macros
|
2018-01-24 22:59:00 +00:00
|
|
|
* Byte code interpreter with an assembly interface, as well as bytecode verification
|
2018-01-29 20:46:26 +00:00
|
|
|
* Proper tail calls.
|
2018-01-27 20:15:09 +00:00
|
|
|
* Direct interop with C via abstract types and C functions
|
|
|
|
* Dynamically load C libraries
|
2018-01-29 20:46:26 +00:00
|
|
|
* REPL
|
2018-01-24 22:59:00 +00:00
|
|
|
|
2017-04-25 22:22:43 +00:00
|
|
|
## Compiling and Running
|
|
|
|
|
2018-01-29 20:46:26 +00:00
|
|
|
Dst is built using CMake. There used to be a hand-written Makefile, but in the interest of
|
|
|
|
easier Windows support I have switched to CMake.
|
|
|
|
|
|
|
|
On a posix system using make, compiling and running is as follows (this is the same as
|
|
|
|
most CMake based projects).
|
|
|
|
|
|
|
|
### Build
|
2017-04-25 22:22:43 +00:00
|
|
|
```sh
|
2018-01-29 20:46:26 +00:00
|
|
|
cd somewhere/my/projects/dst
|
|
|
|
mkdir -p build
|
|
|
|
cd build
|
|
|
|
cmake -DCMAKE_BUILD_TYPE=Release ..
|
|
|
|
make
|
2018-01-19 17:37:37 +00:00
|
|
|
make test
|
2017-04-25 22:22:43 +00:00
|
|
|
```
|
|
|
|
|
2018-01-29 20:46:26 +00:00
|
|
|
The repl can also be run with the CMake run target.
|
2018-01-19 17:37:37 +00:00
|
|
|
```sh
|
2018-01-29 20:46:26 +00:00
|
|
|
make run
|
2017-04-25 22:22:43 +00:00
|
|
|
```
|