This is a collection of examples of Dusk packages, that is, applications written in Dusk's Forth and wrapped through Dusk's Usermode to provide a portable executable that is small and fast.
This code is available from Dusk OS' files folder or as a Git repository (without SSL) at:
Dusk's Usermode runs natively on the host machine, but this means that it can only run on CPU architectures supported by Dusk. See Usermode README for details.
To build, you need curl, Make and a C compiler. Run
make in this project's
root directory. This will compile all examples. These executables are
All examples support freezing. Because it's not all host OSes that can build
them, they're not built by default. To freeze an example, use the
target. For example,
make hello_frozen will yield a frozen
./hello will print "Hello World!" and exit. Invoking it with a single
argument will greet that name instead. Other arguments are ignored.
This is a "Byte Sieve" benchmark as shown on the website's main page and
compiled with Dusk CC. You run it with
./sievec without arguments.
On most system, you can time it with a command that looks like
This is a good example of a more complex package because it uses a filesystem to load DuskCC. It embeds a tar of Dusk's files in the executable itself and uses this as a filesystem.
It's also a good example of an API extension: access to the tar data is done through an extra API function.
On top of that, it's a good example how we can be "smart" about freezing: if
you look at
sievec.c, you'll see that we've carefully
#ifdef-ed out the
tar embedding from the frozen executable because once frozen, we don't need
filesystem access anymore.
This is a "Byte Sieve" benchmark as shown on the website's main page.
You run it with
./sieve without arguments. On most system, you can time it
with a command that looks like
This timing will include "warm up" time, that is, the time Dusk needs to compile
itself up, then compile the