--- gforth/Attic/gforth.ds 1995/11/28 18:45:28 1.25 +++ gforth/Attic/gforth.ds 1995/12/23 16:21:57 1.28 @@ -2528,9 +2528,14 @@ The next invocation of a parsing word re Compiles a recursive call to the defining word not to the defined word. @item argument input source different than current input source for @code{RESTORE-INPUT}: -!!???If the argument input source is a valid input source then it gets -restored. Otherwise causes @code{-12 THROW}, which, unless caught, issues -the message "argument type mismatch" and aborts. +@code{-12 THROW}. Note that, once an input file is closed (e.g., because +the end of the file was reached), its source-id may be +reused. Therefore, restoring an input source specification referencing a +closed file may lead to unpredictable results instead of a @code{-12 +THROW}. + +In the future, Gforth may be able to retore input source specifications +from other than the current input soruce. @item data space containing definitions gets de-allocated: Deallocation with @code{allot} is not checked. This typically resuls in @@ -2602,14 +2607,17 @@ Not checked. As usual, you can expect me None. @item operator's terminal facilities available: -!!?? +After processing the command line, Gforth goes into interactive mode, +and you can give commands to Gforth interactively. The actual facilities +available depend on how you invoke Gforth. @item program data space available: @code{sp@ here - .} gives the space remaining for dictionary and data stack together. @item return stack space available: -!!?? +By default 16 KBytes. The default can be overridden with the @code{-r} +switch (@pxref{Invocation}) when Gforth starts up. @item stack space available: @code{sp@ here - .} gives the space remaining for dictionary and data @@ -2930,7 +2938,10 @@ System dependent; @code{REPRESENT} is im function @code{ecvt()} and inherits its behaviour in this respect. @item rounding or truncation of floating-point numbers: -What's the question?!! +System dependent; the rounding behaviour is inherited from the hosting C +compiler. IEEE-FP-based (i.e., most) systems by default round to +nearest, and break ties by rounding to even (i.e., such that the last +bit of the mantissa is 0). @item size of floating-point stack: @code{s" FLOATING-STACK" environment? drop .}. Can be changed at startup @@ -3232,7 +3243,10 @@ Also, if you @code{include} @file{etags. contains the definitions of all words defined afterwards. You can then find the source for a word using @kbd{M-.}. Note that emacs can use several tags files at the same time (e.g., one for the Gforth sources -and one for your program). +and one for your program, @pxref{Select Tags Table,,Selecting a Tags +Table,emacs, Emacs Manual}). The TAGS file for the preloaded words is +@file{$(datadir)/gforth/$(VERSION)/TAGS} (e.g., +@file{/usr/local/share/gforth/0.2/TAGS}). To get all these benefits, add the following lines to your @file{.emacs} file: @@ -3641,15 +3655,21 @@ Sieve benchmark on a 486DX2/66 than Gfor However, this potential advantage of assembly language implementations is not necessarily realized in complete Forth systems: We compared -Gforth (compiled with @code{gcc-2.6.3} and @code{-DFORCE_REG}) with -Win32Forth 1.2093 and LMI's NT Forth (Beta, May 1994), two systems -written in assembly, and with two systems written in C: PFE-0.9.11 -(compiled with @code{gcc-2.6.3} with the default configuration for -Linux: @code{-O2 -fomit-frame-pointer -DUSE_REGS}) and ThisForth Beta -(compiled with gcc-2.6.3 -O3 -fomit-frame-pointer). We benchmarked -Gforth, PFE and ThisForth on a 486DX2/66 under Linux. Kenneth O'Heskin -kindly provided the results for Win32Forth and NT Forth on a 486DX2/66 -with similar memory performance under Windows NT. +Gforth (direct threaded, compiled with @code{gcc-2.6.3} and +@code{-DFORCE_REG}) with Win32Forth 1.2093, LMI's NT Forth (Beta, May +1994) and Eforth (with and without peephole (aka pinhole) optimization +of the threaded code); all these systems were written in assembly +language. We also compared Gforth with two systems written in C: +PFE-0.9.11 (compiled with @code{gcc-2.6.3} with the default +configuration for Linux: @code{-O2 -fomit-frame-pointer -DUSE_REGS}) and +ThisForth Beta (compiled with gcc-2.6.3 -O3 -fomit-frame-pointer; +ThisForth employs peephole optimization of the threaded code). We +benchmarked Gforth, PFE and ThisForth on a 486DX2/66 under +Linux. Kenneth O'Heskin kindly provided the results for Win32Forth and +NT Forth on a 486DX2/66 with similar memory performance under Windows +NT. Marcel Hendrix ported Eforth to Linux, then extended it to run the +benchmarks, added the peephole optimizer, ran the benchmarks and +reported the results. We used four small benchmarks: the ubiquitous Sieve; bubble-sorting and matrix multiplication come from the Stanford integer benchmarks and have @@ -3661,12 +3681,12 @@ other words, it shows the speedup factor other systems). @example -relative Win32- NT This- - time Gforth Forth Forth PFE Forth -sieve 1.00 1.30 1.07 1.67 2.98 -bubble 1.00 1.30 1.40 1.66 -matmul 1.00 1.40 1.29 2.24 -fib 1.00 1.44 1.26 1.82 2.82 +relative Win32- NT eforth This- +time Gforth Forth Forth eforth +opt PFE Forth +sieve 1.00 1.39 1.14 1.39 0.85 1.78 3.18 +bubble 1.00 1.33 1.43 1.51 0.89 1.70 +matmul 1.00 1.43 1.31 1.42 1.12 2.28 +fib 1.00 1.55 1.36 1.24 1.15 1.97 3.04 @end example You may find the good performance of Gforth compared with the systems @@ -3678,6 +3698,11 @@ method for relocating the Forth image: l the actual addresses at run time, resulting in two address computations per NEXT (@pxref{System Architecture}). +Only Eforth with the peephole optimizer performs comparable to +Gforth. The speedups achieved with peephole optimization of threaded +code are quite remarkable. Adding a peephole optimizer to Gforth should +cause similar speedups. + The speedup of Gforth over PFE and ThisForth can be easily explained with the self-imposed restriction to standard C (although the measured implementation of PFE uses a GNU C extension: global register @@ -3692,9 +3717,11 @@ machine registers by itself and would no register declarations, giving a 1.3 times slower engine (on a 486DX2/66 running the Sieve) than the one measured above. -The numbers in this section have also been published in the paper -@cite{Translating Forth to Efficient C} by M. Anton Ertl and Martin -Maierhofer, presented at EuroForth '95. It is available at +In @cite{Translating Forth to Efficient C} by M. Anton Ertl and Martin +Maierhofer (presented at EuroForth '95), an indirect threaded version of +Gforth is compared with Win32Forth, NT Forth, PFE, and ThisForth; that +version of Gforth is 2\%@minus{}8\% slower on a 486 than the version +used here. The paper available at @*@file{http://www.complang.tuwien.ac.at/papers/ertl&maierhofer95.ps.gz}; it also contains numbers for some native code systems. You can find numbers for Gforth on various machines in @file{Benchres}.