Overview of files in Io's reorganised distribution

Io's build system and file layout have been changed. Here are some notes I made while exploring the changes.

Key changes

Files at the top level

Files in the Io tarball or darcs repo are part of Io's

Source

Three folders hold the code for the Io interpreter and the addons.

libs
libiovm, the core of Io, and the libs it depends on: basekit, coroutine, garbagecollector, and skipdb
tools
main.c files and scripts for building executables without addons
addons
typically wrappers for C libraries. Typical examples are: ZLib, OpenGL, Sockets and embedded Python

Building the vm and addons

Io's build system is split into two parts. The Makefiles build an Io interpreter without addons. The interpreter then builds the addons using the build.io script.

Makefile
Makefile.lib
build
Io's build system for addons and executables using addons
build.io
script for kicking off the building of the addons and executables using them
_build
build output

Darcs's files

_darcs
darcs repo. Not in the tarball
boring
ignore list for darcs

Other things in the distribution

docs
html and pdf versions of the Io guide
readme.txt
README file
projects
a hodgepodge of handy stuff. Contains syntax highlighting for editors
samples
simple (old) examples of Io. Some may still work
tests
a few old tests which should no longer be here

libs folder: IoVM and libraries it depends on

iovm
The heart of Io. libiovm contains the interpreter, parser and primitive objects. IoVM is Io.
basekit
Utilities that are used to implement Io. Utilities include lists, stack, byte array, perfect hashes, sorting, random number generator, command line argument parser, dates and durations and portable versions of common Unix functions. Will be released as a standalone library.
garbagecollector
Incremental garbage collector. Implemented using the tri-colour, Baker treadmill, write-barrier algorithm. Available as a standalone library.
coroutine
Simple stack switching coroutine implementation. Uses ucontext and windows fibers when available. Available as a standalone library.
skipdb
A BerkeleyDB style database. Uses skip lists instead of b-trees. Available as a standalone library.

tools folder: main.c for libiovm

Executables for Io.