The Journal of Forth Application and Research
ISSN: 0738-2022

Forth Institute Editorial Board Author's Guidelines
Authors Index
Volume 7
Volume 6
Volume 5
Volume 4
Volume 3
Volume 2
Volume 1

Valid XHTML 1.0 Strict
Valid CSS!

Volume Five


Introduction:
Number 1 - Lawrence P. Forsley
Number 2 - Lawrence P. Forsley
Number 3 - James D. Basile
Number 4 - James D. Basile
Letters:
Nicholas Solntseff
Articles:
Fortran is Dead! Long Live Forth
J. V. Noble
Abstract
Many scientists, engineers and others using computers for numerical analysis and various forms of scientific computation have found Forth to be a strong contender as the scientific programming language of the future. One reason is that its extensibility permits Forth to handle floating-point and complex-number arithmetic as expeditiously and transparently as FORTRAN. And Forth has advantages, described below, over FORTRAN's antiquated ways.

Although previous reports of FORTRAN's demise have been exaggerated, avant garde number crunchers feel that Forth is poised to displace FORTRAN as the pre-eminent number crunching language. For this to happen, the Forth community will have to accept some standards for floating-point and other "scientific" data types.

Logarithmic Number Representation in Forth
Dennis L. Feucht
Abstract
The log-point representation is an alternative to floating point. Whereas floating point combines linear and logarithmic scales, log point is purely logarithmic. It maintains a constant precision over its range, thus minimizing the accumulation of round-off error. Log-point characteristics are demonstrated, compared to floating-point, and a Forth implementation of a log-point word-set is provided.
A Solver for f(x) = 0
Nathaniel Grossman
Abstract / Errata
A Brent-type solver for real equations f(x) = 0, with enhancements for root bracketing and low resolution curve sketching, is implemented in Forth-83 augmented by floating point words.
Flexible Exception Handling in Forth-83
John Roye
Abstract
This paper presents a Forth-83 implementation of flexible exception handling. Flexibility is achieved by allowing an exception to pass a value on the data stack so that the exception handling code can determine what to do. This makes selective handling and upward propagation of exceptions easy, without reference to global variables. It also allows many exceptions to be handled by one exception handler. This Forth-83 implementation is designed to be transportable across systems since it relies on only one simple system dependent word (RP@).
Forth Standards: An Update
Gerald A. Shifrin
Abstract
Perhaps the most important current development in Forth is the effort to develop an ANSI (American National Standards Institute) standard under the auspices of the X3 committee of the Computer and Business Equipment Manufacturers Association (CBEMA). It has been underway since October, 1986. This paper, describing the progress to date, is the first of a series. Future articles will describe future developments.

This is in no way an official release from CBEMA or ANSI. The information and any opinions are solely the responsibilities of the author.

32 Bit RTX Chip Prototype
Philip J. Koopman, Jr.
Abstract
This unrefereed paper was presented at the 1988 Rochester Forth Conference and has been included here at the discretion of the editors. It does not appear in the Conference Proceedings.

WISC Technologies and Harris Semiconductor have jointly developed a 32-bit member of the Harris Real Time Express (RTX) family. The result is the RTX 32P, a prototype implementation of the WISC Technologies CPU/32 processor that was previously implemented using discrete components. The RTX 32P is now fabricated and operational as a 2-chip microprocessor. It is being used as a research tool for a commercially available implementation now under development.

An Efficient Algorithm for Locating the Global Maximum of an Arbitrary Univariate Function
Richard E. Haskell, Gabriel Castelino and Bahram Mirshab
Abstract
A Forth implementation of an algorithm for locating the maximum of an arbitrary univariate function using a global search technique is presented. The algorithm is based on a method suggested by Kushner. The method discussed in this paper will not get stuck on local maxima And does not depend on the function being well-behaved or easy to calculate or measure. For the case where the value of the global maximum is known a priori (a not uncommon case) the algorithm becomes very simple and efficient. Using a discrete test function that has two local maxima with values very close to the global maximum and experiment was performed in which the location of the global maximum was shifted to all possible values within a specified fixed range of the independent variable. The average number of search points needed to locate the global maximum was found to be 12% of the total number (compared to 50% for an exhaustive search) and the maximum number of search points needed (worst case) was found to be 25% (compared to 100% for the exhaustive case).
Symbolic Stack Addressing
Adin Tevet
Abstract
Data on the stack can be given symbolic names for fetching and storing while not significantly increasing execution times. Symbolic names compile addresses relative to the top of the stack, thereby avoiding the run-time cost of setting up and dismantling stack frames. Data is fetched from the stack by PICK and stored into the stack by a new word POST. The compiler can know the run-time stack height from the change in stack height induced by each word in the dictionary.
From Russia With Forth – Mahlon G. Kelly
The Forth Language and Its Implementation
S. N. Baranoff and N. R. Nozdrunoff
Abstract
This book is the first in Russian on Forth. This language became popular abroad (especially for personal computer programming) and attracted attention for Soviet programmers due to its methodological peculiarities. The Forth language combines the merits of both compiling and interpreting systems and is oriented for dialog usage. The book contains a great number of examples.

The book is recommended to a wide community of programming engineers and may be useful for computer users without special training in programming.

Forth in the U.S.S.R.
S. N. Baranoff
Abstract
Although the Forth programming language was first introduced to the USSR beginning in the early 80's, several researchers had already developed systems based-upon threaded interpreters, address and text interpreters, and continuous toggling between compiling and interpreting states. The August 1980 Byte magazine issue on Forth and FIG and Laxen-Perry F83 models were the basis for subsequent work. Since then Forth has been written for a variety of computers including ones based-upon the IBM 360, DEC PDP-11 and Intel 8080 processors. It has been used for a variety of applications including symbolic computing, compiler writing, embedded applications and video games. — (Lawrence P. Forsley)
Forth for IBM Mainframe Computers
S. N. Baranoff
Abstract
The FORTH-ES system is described. It is an implementation of the Forth language (Forth-83 standard) for the ES Ryad 1 and Ryad 2 mainframes (IBM 360 and IBM 370 compatibles). The system is substantially modular, with the same Forth nucleus running in different operating environments.
Symbolic Computations on a Personal Computer
S. N. Baranoff
Abstract
This paper describes an approach that allowed a rather developed system for symbolic computations, SAC-2, to be moved to an IBM PC XT, with the addition of natural dialog features. The size of the compiled system diminished from 700 to 64K in size while the run-time was only doubled.
Long Island University's 1987 Computer Technology Symposium: Knowledge Engineering Using Forth – James Basile
Alternative Knowledge Acquisition: Developing A Pulse-Coded Neural Network
W. B. Dress
Abstract
After a Rip-van-Winkle nap of more than 20 years, the ideas of biologically motivated computing are re-emerging. Instrumental to this awakening have been the highly publicized contributions of Jon Hopfield and major advances in the neurosciences. In 1982, Hopfield showed how a system maximally coupled neuron-like elements described by a Hamiltonian formalism (a linear, conservative system) could behave in a manner startlingly suggestive of the way humans might go about solving problems and retrieving memories. Continuing advances in the neurosciences are providing a coherent basis in suggesting how nature's neurons might function.

The paper describes a particular model for an artificial neural system designed to interact with (learn from and manipulate) a simulated (or real) environment. The model is based on early work at Sandia Laboratories by Iben Browning. The Browning model, designed to investigate computer-based intelligence, contains a particular simplification based on observations of frequency coding of information in the brain and information flow from receptors to the brain and back to effectors. The ability to act on and react to the environment was seen as an important principle, leading to self-organization of the system.

List Processing and Object-Oriented Programming Using Forth
Dennis L. Feucht
Abstract
The list data structure has significant advantages for symbolic computing and can be implemented easily in Forth. Primitive operations in Forth, list-space management, and list structure for object-oriented programming are briefly presented, as well as an overview of semantic networks, some of their logic, and advantages of implementing them in Forth.

Some unique advantages of Forth for object-oriented programming are suggested.

The Prolog Interpreter Algorithm
Dennis L. Feucht
Abstract
Prolog is an unusual language in that it has only one procedure, the Prolog interpreter. This interpreter carries out an inference procedure that results in a depth-first search through a database of facts and rules. A Prolog program is a set of these facts and rules, or clauses. By applying the facts to the rules, new facts are generated as conclusions of the rules.
Language Coprocessor Boosting the Execution Speed of Threaded Code Programs
Eddy H. Debaere
Abstract
Threaded code is an interpretive language implementation technique which favors execution speed and program representation size. However, it causes considerable overhead when executed on standard microprocessors. In this letter we propose a coprocessor accelerating the execution of programs represented in threaded code, while maintaining hardware and software compatibility with the existing microprocessor environment.
Parallel Forth
John E. Dorband
Abstract
The extension of Forth into the realm of parallel processing on the Massively Parallel Processor (MPP) is described. The extended language, MPP Parallel Forth, is a derivative of Forth-83 with extensions designed by the author as philosophically similar to serial Forth as possible. This paper first discusses the MPP hardware characteristics, as viewed by the Forth programmer, and then presents a description of MPP Parallel Forth along with a detailed example developed by the author showing how the bitonic sort is implemented in this language.
An Arithmetic-Stack Processor for High Level Language Execution
Rodney M. Goodman and Anthony J. McAuley
Abstract
We describe a 32-bit Arithmetic-Stack Processor, the ASP chip, designed to be a simple, flexible, yet powerful building block for a high level language computer.

The ASP is a 3 micron CMOS chip which runs high level programs at 25 Mips, employing Forth as its machine code. It is less sophisticated than a RISC or CISC microprocessor, but when combined with the right hardware and compiler, will run procedural language programs more efficiently. The ASP is similar to a bid-slice or building block CPU, though it has a very different architecture. It therefore requires extra hardware to build a complete system, and so it would be mainly used where speed is critical. However, compared with current bit-slice or building block computers, the hardware and software design are greatly simplified.

The Architecture of the SC32 Forth Engine
John R. Hayes and Susan Lee
Abstract
We have designed a 32 bit microprocessor that directly executes the Forth programming language. This is the third in a series of Forth Reduced Instruction Set Computers (FRISCs). The SC32 Forth engine improves on our previous designs in its more efficient load, store, literal, and branching instructions; better support of multiplication and division; and a better approach to stack caching. The processor's instruction set consists of eight instruction types in three formats. The 32 bit wide data path contains two stack caches. The top portion of the parameter and return stacks are cached in the microprocessor to improve performance while retaining a single data path between memory and the CPU. The processor spends less than 1% of its time managing the stack caches on typical Forth programs.
Error-Free Statistics in Forth
Leonard F. Zettel
Abstract
Methods for the one-pass, error-free calculation of the mean and standard deviation of a set of numbers are presented along with code for their implementation in Forth and an accuracy analysis.
ANS Standard Meetings:
Minutes of X3J14 Meeting #1
ANS Forth Technical Committee
August 3-4, 1987, Washington D.C.
Minutes of X3J14 Meeting #2
ANS Forth Technical Committee
November 11-12, 1987, San Jose, CA
Minutes of X3J14 Meeting #3
ANS Forth Technical Committee
February 10-12, 1988, Redondo Beach, CA
Minutes of X3J14 Meeting #4
ANS Forth Technical Committee
May 25-28, 1988, Rochester, NY
Minutes of X3J14 Meeting #5
ANS Forth Technical Committee
August 10-13, 1988, Portland, Oregon
Minutes of X3J14 Meeting #6
ANS Forth Technical Committee
October 26-29, 1988, Greenbelt, Maryland
Conference Abstracts:
1987 euroFORML Conference
1987 FORML Conference
1988 Australian Forth Conference
1988 Rochester Forth Conference / Errata
1988 euroFORML Conference
1988 ASYST International Conference
Conference Proceedings:
1987 Rochester Forth Conference on Comparative Computer Architectures
Errata
For Number 2
For Number 3
Call for Papers
1989 Rochester Forth Conference on Industrial Applications
1990 ACM Special Interest Group on Forth