aboutsummaryrefslogtreecommitdiff

slang

…is a experimental Forth-like stack language implemented in D.

Example

1 i $

§ incr dup @ 1 + swp $ ;
§ withinBounds @ 100 < ;

§ fizz? @ 3 % 0 = ;
§ buzz? @ 5 % 0 = ;

§ fizzbuzz_or_fizz     buzz? if fizzbuzz then fizz else . pop ;
§ buzz_or_print    dup buzz? if pop buzz then @    else . pop ;

§ branch dup fizz? if fizzbuzz_or_fizz then buzz_or_print else ;

§ loop i withinBounds if i branch i incr loop then else ;

loop

This listing implements the common FizzBuzz example in slang. It may be executed by compiling the REPL using dub build in the project directory and running ./slang example/fizzbuzz.slang.

Words

Currently implemented primitives:

Word Description
§ Custom word definition
$, @ Single token variable binding, resolution
if, then, else Conditional primitives
+, *, /, % Common artithmetics
. Non destructive printing of top-of-stack
pop Remove uppermost stack element
dup Duplicate top-of-stack
swp Swap the first two stack elements
ovr Place a copy of the second stack element on top-of-stack
rot Rotate the top three stack elements
true Write true boolean value to top-of-stack
false Write false boolean value to top-of-stack
not Negate boolean value
and Boolean and
or Boolean or
< Compare size of two integers
= Compare equality of two stack values
# Debug word printing the whole stack to stdout

Further words are implemented in library/base.slang.