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  -  
[   ]Makefile20-Jan-2020 11:16 1.9K 
[   ]family-tree.zip26-May-2021 12:47 34KSource package (tools needed)
[   ]postings09-May-2006 13:50 66KNewsgroup postings and mails containing data used in tree.fs
[   ]timeline-paged.eps26-May-2021 12:47 111KLetter-format printable timeline
[   ]timeline-paged.pdf26-May-2021 12:47 31KLetter-format printable timeline
[   ]timeline.eps26-May-2021 12:47 78KTimeline in one big picture
[   ]timeline.fs26-May-2021 12:47 2.9Kgenerated file (timeline y-coordinates)
[IMG]timeline.gif26-May-2021 12:47 181KTimeline in one big picture
[   ]timeline.map26-May-2021 12:47 9.0KImage map data (generated)
[   ]timeline.neato26-May-2021 12:47 20KGraphviz input file (generated)
[   ]tree-a6.ps01-May-2006 12:04 53K 
[   ]tree.dot26-May-2021 12:47 19KGraphviz input file (generated)
[   ]tree.eps26-May-2021 12:47 81KFamily tree
[   ]tree.fs18-Dec-2021 16:28 33KSource for tree and timeline
[IMG]tree.gif26-May-2021 12:47 79KFamily tree
[   ]tree.map26-May-2021 12:47 8.9KImage map data (generated)
[   ]tree.pdf26-May-2021 12:47 23KFamily tree

Anton Ertl