mirror of
https://github.com/janet-lang/janet
synced 2024-12-26 08:20:27 +00:00
63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# dst
|
|
|
|
[![Build Status](https://travis-ci.org/bakpakin/dst.svg?branch=master)](https://travis-ci.org/bakpakin/dst)
|
|
[![Appveyor Status](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true)](https://ci.appveyor.com/project/bakpakin/dst)
|
|
|
|
Dst is a general purpose functional programming language and bytecode interpreter. The syntax
|
|
resembles lisp (and the language does inherit a lot from lisp), but lists are replaced
|
|
by other data structures with better utility and performance (arrays, tables, structs, tuples).
|
|
The language can also easily bridge to native code, and supports abstract datatypes
|
|
for interfacing with C. Also support meta programming with macros.
|
|
The bytecode vm is a register based vm loosely inspired by the LuaJIT bytecode format.
|
|
|
|
There is a repl for trying out the language, as well as the ability
|
|
to run script files. This client program is separate from the core runtime, so
|
|
dst could be embedded into other programs.
|
|
|
|
Implemented in mostly standard C99, dst runs on Windows, Linux and macOS.
|
|
The few features that are not standard C (dynamic library loading, compiler specific optimizations),
|
|
are fairly straight forward. Dst can be easily ported to new platforms.
|
|
|
|
## Features
|
|
|
|
* First class closures
|
|
* Garbage collection
|
|
* First class green threads (continuations)
|
|
* Mutable and immutable arrays (array/tuple)
|
|
* Mutable and immutable hashtables (table/struct)
|
|
* Mutable and immutable strings (buffer/string)
|
|
* Lisp Macros
|
|
* Byte code interpreter with an assembly interface, as well as bytecode verification
|
|
* Proper tail calls.
|
|
* Direct interop with C via abstract types and C functions
|
|
* Dynamically load C libraries
|
|
* Lexical scoping
|
|
* REPL
|
|
|
|
## Compiling and Running
|
|
|
|
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
|
|
```sh
|
|
cd somewhere/my/projects/dst
|
|
mkdir -p build
|
|
cd build
|
|
cmake -DCMAKE_BUILD_TYPE=Release ..
|
|
make
|
|
make test
|
|
```
|
|
|
|
The repl can also be run with the CMake run target.
|
|
```sh
|
|
make run
|
|
```
|
|
|
|
### Example
|
|
|
|
See the lin directory for some example dst code.
|