A minimalistic programming language written in C89.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
Ludovic 'Archivist' Lagouardette df8b2a7f05 Fixed a bug where routine list was not properly resized il y a 6 mois
test The most practical way to print "Hello World" il y a 6 mois
.gitignore Fixed a bug where routine list was not properly resized il y a 6 mois
CMakeLists.txt Fixed a bug where routine list was not properly resized il y a 6 mois
LICENSE Added README.md contents il y a 6 mois
README.md Fixed a bug where routine list was not properly resized il y a 6 mois
bench.c Added coroutine handling il y a 6 mois
ink.h Fixed a bug where routine list was not properly resized il y a 6 mois
lib.c Fixed a bug where routine list was not properly resized il y a 6 mois
main.c Added garbage collection (and a memory corruption bug) il y a 6 mois

README.md

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