\documentclass[a4paper,twocolumn]{article} \usepackage[utf-8]{inputenc} % \usepackage[latin1]{inputenc} \usepackage[german]{babel} \usepackage{url} \usepackage{alltt} \usepackage{multicol} \parskip4pt %llncs float params \setcounter{topnumber}{3} \def\topfraction{.9} \setcounter{bottomnumber}{1} \def\bottomfraction{.3} \setcounter{totalnumber}{3} \def\textfraction{.15} \def\floatpagefraction{.85} \setcounter{dbltopnumber}{3} \def\dbltopfraction{.85} \def\dblfloatpagefraction{.85} \renewcommand{\code}[1]{\texttt{#1}} %\wfig{content}{label}{caption} \renewcommand{\wfig}[3]{ \begin{figure*}\hrule\vspace{1ex} \centerline{#1}\vspace{1ex} \hrule \caption{#3} \figlabel{#2} \end{figure*} } %\nfig{content}{label}{caption} \renewcommand{\nfig}[3]{ \begin{figure}\hrule\vspace{1ex} \centerline{#1}\vspace{1ex} \hrule \caption{#3} \figlabel{#2} \end{figure} } \renewcommand{\figlabel}[1]{\label{fig-#1}} \renewcommand{\figref}[1]{\ref{fig-#1}} \renewcommand{\fig}[1]{Abb.~\figref{#1}} \renewcommand{\Fig}[1]{\figurename~\figref{#1}} \renewcommand{\sectref}[1]{\ref{sect-#1}} \renewcommand{\sect}[1]{Section~\sectref{#1}} \renewcommand{\Sect}[1]{Section~\sectref{#1}} \title{Der Forth-Stammbaum}%[Der Forth-Stammbaum] \author{M.~Anton Ertl} \begin{document} \maketitle In der Mitte des Hefts ist ein Stammbaum von Forth-Systemen und Forth-Standards zu sehen. Der Stammbaum enthält zwei Arten von Knoten: \begin{description} \item[Systeme] (normale Schrift) Ausführbare Forth-Systeme. \item[Standards] (fett gedruckt) Spezifikationen der Sprache Forth. \end{description} Der Stammbaum enthält drei Arten von Kanten: \begin{description} \item[Abstammen] (schwarz voll) Ein System (das Kind) enthält beträchtliche Mengen Code eines anderen Systems (des Elternsystems), oder zumindest war das am Anfang der Entwicklung des Kindes so. Bei Standards wird Text oder zumindest Forth-Wörter vom Eltern-Standard übernommen. \item[Erfüllen] (schwarz strichliert) Ein System erfüllt einen Standard; man kann auch sagen, das System implementiert den Standard. \item[Inspiriert] (grau voll) Wörter oder Konzepte von einem Forth-System wurden in ein anderes Forth-System übernommen, ohne Code zu übernehmen. Nur die wichtigsten Inspirationskanten werden gezeigt, um eine weitere Überfrachtung der Graphik zu vermeiden. \end{description} \subsection{Aber das Forth-System X fehlt!} Das liegt daran, dass mir noch niemand Daten über X geschickt hat. Nicht aufregen, einfach die Information senden (siehe unten). \subsection{Aktualisierung und Online-Version} Dieser Stammbaum ist nicht endgültig, sondern er wird erweitert, wenn neue Daten dazukommen. Die jeweils aktuelle Version findet man auf \url{http://www.complang.tuwien.ac.at/forth/family-tree/}. Dort findet sich neben dem Stammbaum auch noch eine Timeline: eine Variante des Stammbaums, auf der die Forth-Systeme und Forth-Standards nach dem Zeitpunkt des Erscheinens auf einer Zeitlinie angeordnet sind (die Timeline ist aber leider für dieses Heft zu breit und daher nicht abgedruckt). Die Online-Version hat außerdem auch noch Tooltips mit Zusatzinformationen (z.B. über Autoren oder Features) und Links auf Informationen zu vielen der Systeme oder ihrer Geschichte (einfach auf den Namen des Systems oder des Standards klicken). \subsection{Wie schicke ich Information ein?} Am einfachsten schickst Du mir die Information einfach als Textbeschreibung (aber schon so, dass mir klar ist, was Abstammung ist und was Inspiration etc.), und ich schreibe dann den entsprechenden Code. Meine Email-Adresse ist \url{anton@mips.complang.tuwien.ac.at}. \subsection{Wie verstehe ich \code{tree.fs}?} Die Quelldatei der beiden Graphen ist \path{tree.fs}. Falls Du sie verstehen oder selbst damit experimentieren willst: Zunächst muss man die Knoten (Systeme/Standards) definieren, und zwar wie folgt: \begin{verbatim} s" " name-implementation s" " standard \end{verbatim} Das Jahr ist dabei das (erste) Erscheinungsjahr. \path{} steht für den (Eigen-)Namen der Implementation oder des Standards, der in der Graphik angezeigt wird. \path{} steht für den Knotennamen, der in den Kantendefinitionen verwendet wird. Für den Eigennamen ist die Syntax sehr frei; dagegen darf ein Knotenname nur so ausschauen wie ein Name in C, er darf also nur aus Buchstaben, Ziffern, und \path{_} bestehen, aber nicht mit einer Ziffer anfangen. Wenn der Eigenname eines Systems schon diesen Kriterien entspricht, kann man die Definition auch abkürzen: \begin{verbatim} implementation \end{verbatim} \noindent Beispiele: \begin{verbatim} 2002 s" 4IM" name-implementation fourIM 1994 s" ANS Forth" standard Forth94 1996 Implementation Gforth \end{verbatim} Man kann eine URL und eine Kurzinformation (für den Tooltip) hinzufügen, indem man unmittelbar \emph{vor} der Knotendefinition Folgendes schreibt: \begin{verbatim} \U \I \end{verbatim} Diese Informationen werden in der Online-Version benutzt. Übrigens braucht man eine URL, damit der Tooltip-Text angezeigt wird. Wenn man die Knoten definiert hat, kann man sie auch verwenden, um Kanten zu definieren. \begin{verbatim} begot \ Abstammen conforms-to \ Erfüllen inspired \ inspiriert \end{verbatim} \noindent Beispiel: \begin{verbatim} \U http://www.jwdt.com/~paysan/gforth.html \I Free, portable and fast 1996 Implementation Gforth Gforth conforms-to Forth94 BigForth begot Gforth figForth inspired Gforth F83 inspired Gforth \end{verbatim} Weitere Informationen sind, wenn vorhanden, in Kommentaren untergebracht. \addtocounter{page}{2} \subsection{Wie funktioniert es?} Die Quelldatei ist \path{tree.fs}, ein Forth-Programm, das mittels Gforth ausgeführt wird und \path{tree.dot} ausgibt; Letzteres ist die Eingabe für \path{dot} (ein Programm aus der Graphviz-Suite zur graphischen Darstellung von gerichteten Graphen); \path{Dot} kann Graphiken für den Graphen in mehreren Formaten ausgeben, u.a. Postscript. Weiters gibt \path{dot} Y-Koordinaten für die Knoten aus, die dann in einem weiteren Lauf von \path{tree.fs} verwendet werden, um \path{timeline.neato} zu erzeugen; das ist im Prinzip die gleiche Datei wie \path{tree.dot}, nur sind die Knotenpositionen festgelegt: die X-Koordinate durch das Erscheinungsjahr, und die Y-Koordinate durch die Position im tree-Graphen. \path{Neato} (ein weiteres Graphviz-Werkzeug) verarbeitet dann \path{timeline.neato} und produziert die Timeline. Weiters erzeugen \path{dot} und \path{neato} noch andere Formate, insbesondere \path{.gif} und \path{.map} (client-side image map) für die Web-Version, und eine auf mehrere Seiten aufgeteilte Version der Timeline. Aus den Postscript-Versionen wird PDF erzeugt. \subsection{Heimwerken} Wenn Du selbst an dem Stammbaum herumbasteln oder einen eigenen Stammbaum erzeugen willst, kannst Du Dir den Quellcode von der oben angegebenen Adresse holen, \path{tree.fs} editieren und \path{make} aufrufen. An Werkzeugen brauchst Du GNU make, Gforth, graphviz, Ghostscript, awk und die netpbm-Werkzeuge, wenn man das aktuelle Makefile verwendet (weniger, wenn man nicht alle Formate erzeugen will). \subsection*{Danksagung} Viele Leute haben mir Informationen geschickt, die in dem Stammbaum dargestellt sind. Ich habe leider nicht alle notiert, die dazu beigetragen haben, aber darunter sind: Astrobe, John Doty, Marcel Hendrix, Doug Hoffman, George Hubert, Guy Macon, Alex McDonald, Ward McFarland, Krishna Myneni, Stephen Pelc, Friederich Prinz, Elizabeth Rather und Klaus Schleisiek. Eine weitere Quelle war der Artikel über die Geschichte von Forth \cite{rather+96}, der sehr empfehlenswert und online\footnote{\url{http://www.forth.com/resources/evolution/}} verfügbar ist. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\bibliographystyle{alpha} %\bibliography{../d} \begin{thebibliography}{RCM96} \bibitem[RCM96]{rather+96} Elizabeth~D. Rather, Donald~R. Colburn, and Charles~H. Moore. \newblock The evolution of {Forth}. \newblock In {\em History of Programming Languages}, pages 625--658. ACM Press/Addison-Wesley, 1996. \end{thebibliography} \end{document}