Forth Family Tree and Timeline
This is an incomplete family tree and timeline of Forth
implementations and standards. There are two graphs:
The graphs contain two kinds of nodes:
- just shows which implementation/standard took ideas from
which; the node position does not indicate anything else.
- is the same graph, but the x-coordinate of each node
reflects the release date (or some other significant date) for the
They contain three kinds of edges:
- (shown in red). These
are specifications for a language and not executable.
- (shown in black). These are executable code.
- (black lines). One implementation (the child) directly
incorporates (or got started by incorporating) significant amounts of
code from another implementation (the parent). For standards, text is
incorporated instead of code.
- (red lines). A Forth implementation conforms
to a standard; also known as implementing the standard.
- (green lines). Words or concepts from one Forth
implementation were incorporated in an implementation or standard.
Only the most significant "inspired" edges are shown, to avoid
But implementation X is missing
That's because you did not send me any data on X. Don't complain,
just send me the information (see below).
Forth family tree
This is a client-side image map. If your browser supports that
feature, clicking on an implementation will get you to a page about
that implementation or standard (in many cases; there are not pages
for all of them); also, your browser may display a tooltip for these
nodes with a few details (typically about authors or features).
This is a client-side image map; the links and tooltips are exactly
the same as in the family tree.
How to submit information (or understand tree.fs)
You can describe the information about an implementation and its
relations to other implementations informally; or you can describe it
formally as a Forth program (see below). Then email it to me, or post it in comp.lang.forth.
For the formal description, you first have to define all the nodes
(implementations/standards) involved, in one of the following ways:
<year> s" <proper name>" name-implementation <nodename>
<year> s" <proper name>" standard <nodename>
Node names have to be C-style names (starts with a letter or _,
contains only letters, digits, or _). If the proper name conforms to
the restrictions for nodenames, you can use
<year> implementation <nodename> \ nodename will be used as proper name
1978 s" fig-Forth" name-implementation figForth
1994 s" ANS Forth" standard Forth94
1996 Implementation Gforth
You can add an URL and a little bit of info (for a tooltip) for a node
by preceding the node definition with
\I <tooltip text>
This information is used in the image maps. Note that you have to
define an URL, or the tooltip text will be ignored.
Once you have defined node names, you can use them in edge definitions:
<nodename1> begot <nodename2>
<nodename2> conforms-to <nodename1>
<nodename1> inspired <nodename2>
If you have any additional information, include them in comments.
That's all there is to it.
How it works
The source file tree.fs runs (on Gforth), and produces tree.dot, the
input file for dot (the directed graph layout tool from the graphviz toolbox). Dot can produce
a layout for the graph, in various formats, among them Postscript; it
also produces y-coordinates for the nodes (which are processed into
timeline.fs), which are then taken by tree.fs in another run to
produce timeline.neato (basically a version of tree.dot, but with the
node positions fixed). This file is then processed by neato (another
graphviz tool) to produce the timeline in Postscript format.
Currently the GIF and PDF formats are produced from the Postscript
Doing your own tree and timeline
Just grab the source package, unpack,
edit the files for your needs, and say "make". You need GNU make, Gforth, graphviz, Ghostscript, awk, and the
netpbm tools with the current Makefile (less if you don't need all the
Name Last modified Size Description
Parent Directory -
Makefile 02-Jun-2006 21:40 1.9K
family-tree.zip 12-Dec-2011 17:57 33K Source package (tools needed)
postings 18-Aug-2005 17:25 66K Newsgroup postings and mails containing data used in tree.fs
timeline-paged.eps 12-Dec-2011 17:57 105K Letter-format printable timeline
timeline-paged.pdf 12-Dec-2011 17:57 30K Letter-format printable timeline
timeline.eps 12-Dec-2011 17:57 77K Timeline in one big picture
timeline.fs 12-Dec-2011 17:57 2.7K generated file (timeline y-coordinates)
timeline.gif 12-Dec-2011 17:57 159K Timeline in one big picture
timeline.map 12-Dec-2011 17:57 8.2K Image map data (generated)
timeline.neato 12-Dec-2011 17:57 18K Graphviz input file (generated)
tree-a6.ps 01-May-2006 12:04 53K
tree.dot 12-Dec-2011 17:57 18K Graphviz input file (generated)
tree.eps 12-Dec-2011 17:57 76K Family tree
tree.fs 12-Dec-2011 17:57 31K Source for tree and timeline
tree.gif 12-Dec-2011 17:57 74K Family tree
tree.map 12-Dec-2011 17:57 8.1K Image map data (generated)
tree.pdf 12-Dec-2011 17:57 21K Family tree