A minimalistic programming language written in C89.
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
Ludovic 'Archivist' Lagouardette 5411462218 C-ified some less antiquated constructs to the antiquated form pirms 4 mēnešiem
.idea added type support pirms 4 mēnešiem
test Garbage collector and arrays work! pirms 4 mēnešiem
.gitignore Initial commit pirms 4 mēnešiem
CMakeLists.txt Added README.md contents pirms 4 mēnešiem
LICENSE Added README.md contents pirms 4 mēnešiem
README.md added more docs pirms 4 mēnešiem
bench.c Added coroutine handling pirms 4 mēnešiem
ink.h Added garbage collection (and a memory corruption bug) pirms 4 mēnešiem
lib.c C-ified some less antiquated constructs to the antiquated form pirms 4 mēnešiem
main.c Added garbage collection (and a memory corruption bug) pirms 4 mēnešiem

README.md

ink

ink is a minimalistic interpreted programming language, tentatively implemented exclusively in C98. It features coroutines and can currently only manipulate integers. Part of the code may not be compliant with C98 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. In the future, I will add 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