Gforth
Gforth is the Forth implementation of the GNU project
Current release 0.7.3
, have
a look to the
User Manual
). Source
distributions can be found on
GNU's Gforth directory
, source and binary
distributions for popular platforms such as Windows, GNU/Linux,
etc. can be found in
Home of Gforth
, as well as
snapshots
of the
development version
in the git repository on Savannah. Read the updated documentation for the
snapshots in
Gforth's snapshot manual
Gforth uses GCC to compile a fast direct or indirect threaded Forth;
Gforth is fully ANS FORTH compliant. Authors of Gforth are
Anton Ertl
Bernd Paysan
Jens Wilke
, Neal Crook, David Kühling and others.
The goal of the Gforth Project is to develop a standard model for ANSI
Forth. This can be split into several subgoals:
Gforth should conform to the ANSI/200x Forth standard.
It should be a model, i.e. it should define all the
implementation-dependent things.
It should become standard, i.e. widely accepted and used. This goal
is the most difficult one.
To achieve these goals Gforth should be
Similar to previous models (fig-Forth, F83)
Powerful. It should provide for all the things that are considered
necessary today and even some that are not yet considered necessary.
Efficient. It should not get the reputation of being exceptionally
slow.
Free.
Available on many machines/easy to port.
There's an
object oriented
package
, written in almost plain ANS Forth (now part of Gforth's
distribution).
News
User-visible changes between 0.7.2 and 0.7.3:
Bug fixes
Backported protection against glibc math functions clobbering TOS
User-visible changes between 0.7.1 and 0.7.2:
Bug fixes
Makefile fixes for installing
User-visible changes between 0.7.0 and 0.7.1:
Bug fixes
amd64 gdb disassembler works with syntax change (autodetected)
workaround for gcc 4.6 and 4.7 problems (newline and superinstructions)
Miscellaneous
changed repository from CVS to git
User-visible changes between 0.6.2 and 0.7.0:
Requirements:
: At run-time requires libtool and gcc (for the libcc C interface) and
gdb (for the disassembler (SEE)) on some platforms.
Installation:
support for DESTDIR, POST_INSTALL, INSTALL_SCRIPT
automatic performance tuning on building (--enable-force-reg unnecessary)
report performance and functionality problems at end of "make"
autogen.sh now exists
License:
Changed to GPLv3
Bug fixes
Now works with address-space randomization.
The single-step debugger works again in some engines.
Many others.
Ports:
AMD64, ARM, IA-64 (Itanium): better performance
PPC, PPC64: disassembler and assembler
Gforth EC: R8C, 4stack, misc, 8086 work
MacOS X: better support
Invocation:
New flags --ignore-async-signals, --vm-commit (default overcommit),
--print-sequences
Forth 200x:
X:extension-query: produce true for all implemented extensions
X:required REQUIRED etc. (not new)
X:defined: [DEFINED] and [UNDEFINED]
X:parse-name: PARSE-NAME (new name)
X:deferred: deferred words (new: DEFER@ DEFER! ACTION-OF)
X:structures: +FIELD FIELD: FFIELD: CFIELD: etc.
X:ekeys: new: EKEY>FKEY K-SHIFT-MASK K-CTRL-MASK K-ALT-MASK K-F1...K-F12
X:fp-stack (not new)
X:number-prefixes (partially new, see below)
Number prefixes:
0x is a hex prefix: 0xff and 0XfF now produces (decimal) 255
is a decimal prefix:
10 now produces (decimal) 10
Signs after the number prefix are now accepted, e.g,
-50.
' now only handles a single (x)char: 'ab is no longer accepted,
'a' now produces (decimal) 97
Unicode support (currently supports only uniform encoding):
added xchars words for dealing with variable-width multi-byte characters
provide 8bit (ISO Latin 1) and UTF-8 support for xchars
New words:
LIB-ERROR (complements OPEN-LIB)
OUTFILE-EXECUTE INFILE-EXECUTE BASE-EXECUTE (limited change of global state)
16-bit and 32-bit memory acces: UW@ UL@ SW@ SL@ W! L! W@ L@
NEXT-ARG SHIFT-ARGS (OS command-line argument processing)
NOTHROW (for backtrace control)
FTRUNC FMOD (undocumented)
SEE-CODE SEE-CODE-RANGE (show generated dynamic native code)
Improvements/changes of existing words:
S\", .\" now support
OPEN-FILE with W/O no longer creates or truncates files (no compat. file)
OPEN-LIB now understands at the start, like OPEN-FILE.
TRY...ENDTRY changed significantly, compatibility files available (see docs).
The disassembler (DISCODE) can now use gdb to disassemble code
Uninitialized defered words now give a warning when executed
Division is floored (disable with "configure --enable-force-cdiv")
Gforth (not gforth-fast) reports division by zero and overflow on division
on all platforms.
Newly documented words:
S>NUMBER? S>UNUMBER?
EKEY keypress names: K-LEFT K-RIGHT K-UP K-DOWN K-HOME K-END K-PRIOR
K-NEXT K-INSERT K-DELETE
CLEARSTACKS
FORM
Environment variable GFORTHSYSTEMPREFIX (used by word SYSTEM and friends)
C interface:
exported symbols now start with "gforth_" (for referencing them from C code)
libcc C function call interface (requires libtool and gcc at run-time)
alternative: undocumented libffi-based interface
Libraries:
depth-changes.fs: report stack depth changes during interpretation
ans-report.fs now reports CfV extensions
fsl-util.4th: FSL support files (undocumented)
regexp.fs for regular expressions (undocumented)
complex.fs for complex numbers (undocumented)
fft.fs for Fast Fourier Transform (undocumented)
wf.fs, a Wiki implementation (undocumented)
httpd.fs, a web server (undocumented)
status.fs, show interpreter status in separate xterm (undocumented)
profile.fs for profiling (undocumented, incomplete)
endtry-iferror.fs, recover-endtry.fs to ease the TRY change transition
test/tester.fs: Now works with FP numbers (undocumented)
test/ttester.fs: Version of tester.fs with improved interface (T{...}T).
compat library:
compat/execute-parsing.fs
Speed improvements:
automatic performance tuning on building
static stack caching (good speedup on PPC)
mixed-precision division is now faster
support for int128 types on AMD64
workarounds for gcc performance bugs (in particular, PR 15242)
branch target alignment (good speedup on Alpha).
User-visible changes between 0.6.1 and 0.6.2:
Bug fixes
(in particular, gforth-0.6.2 compiles with gcc-3.3)
New words:
LATEST, LATESTXT (LASTXT deprecated)
Operating environment:
Added optional support for a C interface built
on the ffcall libraries (more portable and powerful than the old
one, but still not documented). To use it, the ffcall libraries
have to be installed before building Gforth (see INSTALL).
Miscellaneous:
Gforth-fast now uses static superinstructions (some
speedup on some platforms); generally this is transparent (apart
from the speedup), but there are lots of command-line options for
controlling the static superinstruction generation.
User-visible changes between 0.6.0 and 0.6.1:
Bug fixes (installation on big-endian machines sometimes did not work)
User-visible changes between 0.5.0 and 0.6.0:
Changes in behaviour:
S"
: interpreted use now
ALLOCATE
s the string (they live until
BYE
).
Long word names (512MB on 32-bit systems) are now supported (change to
the header format).
New threaded code execution method: primitive-centric (allows the
following), hybrid direct/indirect threaded (easier portability),
with dynamic superinstructions (typical speedup on Athlon: factor
2). New engine gforth-itc for dealing with some potential
backwards-compatibility problems (see "Direct or Indirect Threaded?"
in the manual).
Operating environment:
Default dictionary size is now 4MB.
Large file support on OSs that support them (i.e., files with more
than 2GB on 32-bit machines).
Gforth can now deal well with broken pipes in most situations.
vi tags files can be built with
tags.fs
(usage like
etags.fs
).
gforth.el
mostly rewritten.
New image file format.
New words:
Keyboard input:
EDIT-LINE
K-PRIOR
K-NEXT
K-DELETE
File input:
SLURP-FILE
SLURP-FID
Programming tools:
ID. .ID WORDLIST-WORDS SIMPLE-SEE
Conditional execution:
[DEFINED]
[UNDEFINED]
Defining Words:
CONST-DOES>
]]
Input stream:
PARSE-WORD EXECUTE-PARSING EXECUTE-PARSING-FILE
String comparison:
STR= STR< STRING-PREFIX?
String literals:
S\" .\" \"-PARSE
Floating point output:
F.RDP F>STR-RDP F>BUF-RDP
Miscellaneous:
Generalized prims2x.fs into Vmgen (see README.vmgen etc.); used the
new capabilities in prims (e.g., automatic handling of the return
stack and instruction stream).
User-visible changes between 0.4.0 and 0.5.0:
Changes in behaviour:
There are now two engines: the fast engine (gforth-fast) is at
least as fast as gforth in earlier releases; the debugging engine
(gforth) supports precise backtracing for signals (e.g., illegal
memory access), but is slower by a factor of 1-2.
Block files now start at block 0 by default (instead of block
1). If you have block files around, prepend 1024 bytes to
convert them, or do a
1 OFFSET !
to establish the old
behaviour.
Gforth now does not translate newlines to LFs on reading.
Instead,
READ-LINE
now interprets LF, CR, and CRLF as
newlines. Newlines on output are in the OSs favourite format.
SEE
now disassembles primitives (or hex-
DUMP
s the code if no
disassembler is available).
>HEAD
(aka
>NAME
) now returns 0 (instead of the nt of ???) on failure.
Syntax of prim changed: stack effects are now surrounded by
parentheses, tabs are insignificant.
Operating environment:
Gforth now produces a backtrace when catching an exception.
On platforms supporting the Unix 98 SA_SIGINFO semantics, you
get more precise error reports for SIGSEGV and SIGFPE (e.g.,
"stack underflow" instead of "Invalid memory address").
Gforth now produces exit code 1 if there is an error (i.e.,
an uncaught
THROW
) in batch processing.
You can use "
gforthmi --application
..." to build an image that
processes the whole command-line when invoked directly (instead of
through
gforth -i
).
Ports:
AIX.
20% speedup on 604e under powerpc-unknown-linux-gnu,
19%-29% speedup on Celeron with gcc-2.95.
New words:
Missing ANS Forth words:
EKEY EKEY? EKEY>CHAR
Timing words:
CPUTIME UTIME
Vector arithmetic:
V*
FAXPY
FP comparison:
F~ABS
F~REL
Deferred words:
[IS]
Nested number output:
<<# #>>
Exception handling:
TRY RECOVER ENDTRY
Directory handling:
OPEN-DIR READ-DIR CLOSE-DIR FILENAME-MATCH
Other:
]L PUSH-ORDER
Miscellaneous:
Significant extensions to the manual (added an introduction,
among other things), many of them due to a new team member: Neal
Crook.
Added assemblers and disassemblers for 386, Alpha, MIPS (thanks to
contributions by Andrew McKewan, Bernd Thallner, and Christian
Pirker). Contributions of assemblers and disassemblers for other
architectures are welcome.
User-visible changes between 0.3.0 and 0.4.0:
Operating environment:
Path handling: "." at the start of the path represents the directory
the nearest enclosing file resides in (if there is none: the working
directory). "~+" indicates the working directory. The default path now
has "." in front.
gforth
and
gforthmi
is now more GNU standards compliant (wrt
command-line options).
New command-line-option:
--die-on-signal
Errors are now directed to stderr.
Stdout is now unbuffered, if it is a tty.
User input device redirection (for filters) is now possible.
Ports:
Now runs on IRIX (and other MIPS-based systems without
linker-flag -d). Direct threading now works on PowerPC (20% speedup on
604e). Better support for m68k (thanks to Andreas Schwab and Jorge
Acereda). It is possible to create executables that contain the image
(for non-OS systems).
Added a lot of embedded control (EC) stuff. Supported controllers
and small CPUs are Siemens C16x, 8086, 6502, Mixed-Mode's FPGA MISC,
Bernd Paysan's 4stack processor. Not finished: ShBoom alias PSC1000,
H8, AVR.
New, changed, and removed words:
Renamed
F0
to
FP0
(avoids unexpected behaviour in hex), added aliases
SP0
RP0
LP0
(recommended for future use) for
S0
R0
L0
Renamed
PARSE-WORD
into
SWORD
PARSE-WORD
is used with the meaning of
NAME
in OpenBoot and
dpans6 A.6.2.2008)
Added
FPICK
(suggested by Julian Noble).
Added
EXCEPTION
S" gforth" ENVIRONMENT?
now produces the version-string.
Changed representation of types in struct package, and
correspondingly changed names.
Miscellaneous:
Plain text documentation is now available in doc/gforth.txt.
Documentation improvements.
Wordlist structure changed.
Added mini-oof.
Reorganized files: added directories and reorganized many
files into them; renamed files into 8.3 format to work with
completely broken systems (but there are again some files
that won't work there).
Bug fixes.
Various changes without log information only known as
mega-patches. Cross compiler now also supports compilation
only for undefined or forward referenced words. Plugins to
support some native code generation (for PSC1000).
More files in the compat library.
Mailing List
There's a mailing list around Gforth-related topics:
gforth@gnu.org
Read old postings in the list archive of the
Gforth list
Subscribe by filling out the
Form
here.
Copyright © 1997-2013 Free Software Foundation, Inc.
This page is licensed under a
Creative Commons Attribution-NoDerivs 3.0 United States License
Created 21may1997. Last modified: 10nov2015 by
Bernd Paysan
US