# `ink` `ink` is a minimalistic interpreted programming language, tentatively implemented exclusively in C89. It features coroutines and can currently only manipulate integers. Part of the code may not be compliant with C89 and I will try to fix that in time. It is fully self-contained and doesn't rely on a working standard library beyond the following: - `malloc` - `realloc` - `free` - `putchar` To make the library not use the standard library, build it with `NOSTDLIB` defined as a preprocessor directive. All of these functions need to work for `ink` to work. It is easy to add new functions to the interpreter. I added a garbage collector to handle cleaning dynamically allocated resources. It is possible to segregate unsafe allocations (allocations that should be hidden from the interpreter) by setting the `inner_` versions of the library functions to different allocation functions. ## Limits - Token size is limited to 127 bytes (see `ink_lex`) - Values and indices are limited to the platform size of `int` - Main function has a size limit of 256 tokens (see `ink_compile`) - Functions have a size limit of 256 tokens (see `ink_parse`) - Functions have a count limit 128 labels (see `ink_parse`) - Only non-main functions can use labels