Show HN: I built a minimal Forth-like stack interpreter library in C

22 Forgret 8 9/11/2025, 12:15:22 PM
This weekend I created stacklib.h - a single-header library that brings Forth-style stack operations to C. It implements a basic interpreter with:

- Stack operations (push/pop/dup/swap/over/drop) - Arithmetic (+, -, *, /) - Output (., emit, cr) - Stack inspection (.s, depth)

Example usage: Stack s; stack_init(&s); dict_init(); exec(&s, "10 20 + ."); // Prints "30" exec(&s, "1 2 3 4 .s"); // Shows stack contents

The library is self-contained, requires no dependencies, and handles basic error checking. It was inspired by wanting to understand how Forth works at a fundamental level while keeping the simplicity of C.

I'm curious what other stack-based or concatenative programming enthusiasts think about this approach. Has anyone else built something similar? What features would you add to make it more useful?

GitHub: https://github.com/Ferki-git-creator/stacklib

Comments (8)

gabrielsroka · 2h ago
1. You should add a URL when you you create a post on HN. You can indent code two spaces on HN, eg:

  Stack s;
  stack_init(&s);
  dict_init();
  exec(&s, "10 20 + ."); // Prints "30"
  exec(&s, "1 2 3 4 .s"); // Shows stack contents
2. Your readme mentions a repl but I don't see it in the source code.

3. I'm not an expert in C but I thought header files shouldn't have code in them. The code should be in a .c file

4. Maybe move the code from USAGE into its own .c file.

  #include "stacklib.h"
  
  int main() {
    Stack s;
    stack_init(&s);
    dict_init();
    exec(&s, "10 20 + .");
    printf("\n");
    return 0;
  }
zoezoezoezoe · 2h ago
technically, "header only libraries" can be exceptions to C code not being in header files. See STB as an example https://github.com/nothings/stb. The advantage theoretically is that you can #include this library and use its code and types from just one file, its a decent model IMHO, but it can be jarring to someone unfamiliar with header only libraries.
tdeck · 3h ago
If you're interested in learning more about how FORTH works I, I can recommend two very old books.

Starting FORTH https://archive.org/details/LeoBrodieStartingFORTHIntroducti...

Threaded Interpretive Languages https://archive.org/details/R.G.LoeligerThreadedInterpretive...

The latter doesn't even mention FORTH, and describes some very archaic CPU architectures, but I found it fascinating because it builds things from the ground up.

elcritch · 1h ago
In particular learning about threaded interpreters, sub-routine interpreters, etc is very eye opening. That and really internalizing that everything, even code, is really just numbers.
fjfaase · 4h ago
Interesting. I am currently in the process of writing an interpreter for a similar stack based language. I already wrote a compiler for this language to x86 assembly that can be compiled to an ELF. The language is used as an intermediate language for a C compiler that I am writing. It is maybe less Forth-like than your language. For more information see: https://github.com/FransFaase/MES-replacement For the interpreter have a look at: stack_c_interpreter.c

At WHY2025, I gave a talk about the reasons why am working on this. See: https://www.youtube.com/watch?v=akzyyO5wvm0

vdupras · 1h ago
Your experiment is certainly a good tool to grok stack mechanics, but that is only one element of what makes a Forth what it is. You're missing out on other crucial ingredients: colon definition and immediateness.

I wrote a series of articles that can help in that kind of discovery: http://tumbleforth.hardcoded.net/

bertili · 3h ago
Another thread on small forth interpreters from just 15 days ago:

https://news.ycombinator.com/item?id=45039301

Forth can be beautifully and efficiently implemented in portable c++ using the using continuation passing style via the clang musttail attribute.

Have a look at Tails (not my project):

[1] https://github.com/snej/tails

acidx · 1h ago
I recently wrote one, in C, using tail calls to implement dispatch with CPS: https://tia.mat.br/posts/2025/08/30/forth-haiku.html

It's already pretty efficient but I'm working on it to make it even more efficient so I can use it as some sort of primitive fragment shader for an art project. This Forth variant is intended to execute Forth Haikus, as defined by the Forth Salon website.