Forth Family Tree and Timeline

This is an incomplete family tree and timeline of Forth implementations and standards. There are two graphs:
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 implementation/standard.
The graphs contain two kinds of nodes:
(shown in red). These are specifications for a language and not executable.
(shown in black). These are executable code.
They contain three kinds of edges:
(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 clutter.

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).

family tree

Forth Timeline

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
\U <URL>
\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, 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, 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 formats.

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 formats).


[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[   ]timeline.map12-Dec-2011 17:57 8.2KImage map data (generated)
[   ]family-tree.zip12-Dec-2011 17:57 33KSource package (tools needed)
[   ]tree.map12-Dec-2011 17:57 8.1KImage map data (generated)
[IMG]tree.gif12-Dec-2011 17:57 74KFamily tree
[IMG]timeline.gif12-Dec-2011 17:57 159KTimeline in one big picture
[   ]timeline-paged.pdf12-Dec-2011 17:57 30KLetter-format printable timeline
[   ]timeline-paged.eps12-Dec-2011 17:57 105KLetter-format printable timeline
[   ]timeline.eps12-Dec-2011 17:57 77KTimeline in one big picture
[   ]tree.pdf12-Dec-2011 17:57 21KFamily tree
[   ]timeline.neato12-Dec-2011 17:57 18KGraphviz input file (generated)
[   ]timeline.fs12-Dec-2011 17:57 2.7Kgenerated file (timeline y-coordinates)
[   ]tree.eps12-Dec-2011 17:57 76KFamily tree
[   ]tree.dot12-Dec-2011 17:57 18KGraphviz input file (generated)
[   ]tree.fs12-Dec-2011 17:57 31KSource for tree and timeline
[   ]Makefile02-Jun-2006 21:40 1.9K 
[   ]tree-a6.ps01-May-2006 12:04 53K 
[   ]postings18-Aug-2005 17:25 66KNewsgroup postings and mails containing data used in tree.fs

Anton Ertl