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-12 15:41:27 +00:00
|
|
|
dst is a functional programming language and vm. It is a variant of
|
2017-04-25 22:22:43 +00:00
|
|
|
Lisp with several native useful datatypes. Some of the more interesting and
|
|
|
|
useful features are first class functions and closures, immutable and mutable
|
|
|
|
hashtables, arrays, and bytebuffers, macros (NYI), tail-call optimization,
|
2018-01-12 15:41:27 +00:00
|
|
|
and continuations (coroutines, error handling). The runtime and
|
2018-01-24 22:59:00 +00:00
|
|
|
compiler are written in C99.
|
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)
|
|
|
|
* Byte code interpreter with an assembly interface, as well as bytecode verification
|
|
|
|
* Proper tail calls for functional code
|
|
|
|
* Direct interop with C
|
|
|
|
* REPL (read eval print loop)
|
|
|
|
|
|
|
|
The code can be compiled to be either a bytecode interpreter and runtime, or
|
|
|
|
a full language.
|
2018-01-12 15:41:27 +00:00
|
|
|
|
2017-04-25 22:22:43 +00:00
|
|
|
## Compiling and Running
|
|
|
|
|
2018-01-19 17:37:37 +00:00
|
|
|
To build the runtime and run test, run
|
2017-04-25 22:22:43 +00:00
|
|
|
```sh
|
2018-01-19 17:37:37 +00:00
|
|
|
make test
|
2017-04-25 22:22:43 +00:00
|
|
|
```
|
|
|
|
|
2018-01-19 17:37:37 +00:00
|
|
|
A repl can also be run with
|
|
|
|
```sh
|
|
|
|
make repl
|
2017-04-25 22:22:43 +00:00
|
|
|
```
|
|
|
|
|
2017-06-10 21:44:02 +00:00
|
|
|
## Todo
|
|
|
|
|
2017-07-02 02:46:56 +00:00
|
|
|
* Documentation, with the caveat that things may change.
|
2017-06-10 21:44:02 +00:00
|
|
|
* Use serialization to allow creation of bytecode files that can be loaded.
|
2017-07-02 02:46:56 +00:00
|
|
|
This includes defining a file format for the bytecode files. This mostly done.
|
|
|
|
The byte code serialization could also be useful for the module system for loading artifacts.
|
|
|
|
* Pattern matching/regex library, as well as string formatting functions. This
|
|
|
|
would also be useful for implementing better error messages.
|
2017-06-10 21:44:02 +00:00
|
|
|
* Better error messages, expecially for compilation. This probably means string
|
|
|
|
formating functions.
|
|
|
|
* Macro/specials system that happens before compilation
|
2017-07-02 02:46:56 +00:00
|
|
|
* Module system. Something similar to node's require.
|
2017-09-09 18:39:51 +00:00
|
|
|
* Change name (dst is the name of many projects, including GNU Smalltalk).
|
2017-06-10 21:44:02 +00:00
|
|
|
Maybe make logo :)?
|
|
|
|
* Change C API to be stack based for fewer potential memory management
|
|
|
|
problems. This could mean making current C API internal and use separate
|
|
|
|
API externally.
|
|
|
|
* Store source information in parallel data structure after parsing
|
|
|
|
* Use source information during compilation
|
|
|
|
* Use Lua style memory alocator backend C API (one single function for
|
|
|
|
allocating/reallocating/freeing memory).
|
|
|
|
* More builtin libraires.
|
|
|
|
* Fuzzing
|
|
|
|
|