Document fait avec Nvu Document made with Nvu




Introduction to FORTH

Working in the National Look-out post of Radio astronomy of the United States at the beginning of the 70s, Charles Moore was charged to schedule the first minicomputers 16 bits (typify IBM 360) for the purchase of scientific data and the maintenance of equipment.

The high-level languages of time as the FORTRAN (not to confuse with the object of this paragraph) was too heavy for the execution of real-time software packages. Machine language was, as for him, indigestible enough to venture to realize always more complex programs.

And so Charles MOORE had the idea to create a revolutionary language the instructions of bases of which corresponded to a single line of code in machine language.

This allowed not only to write programs in high-level language with almost the performances of machine language but besides reducing at most size memory which was extremely weak at the time.

Charles MOORE wanted to record his language under the name of FOURTH for language of fourth generation but the computer which he used authorizing only names of 5 letters, he called it: FORTH.

Well to understand and to use at most performances inferred by the language FORTH, it is important to master inverted Polish notation used also with calculators made by Hewlett-Packard. The transmission of parameters makes essentially by a last in-firs out stack. This notion is what allowed Charles Moore to pull the maximum of performances of its language because it is necessary to know that any processor deserving of this name possesses memory manipulation instructions under shape of stack of this type.

Besides the classic stack of return from subroutines administered intrinsically with most of the processors, the idea to use the same instructions for parameters transfers drove to create a data stack of which some basic instructions are the following ones:

  • DUP piles the copy of the number being at the top of the stack: n - > n, n (the summit of the stack is to the right),
  • DROP depilates the number being at the top of the stack: n - > - (line means that the stack is empty with regard to the previous level),
  • SWAP inverts the 2 numbers of the summit of the stack: n1 , n2 - > n2 , n1
  • OVER piles the copy of the number situated in the second rank of the summit of the stack: n1 , n2 - > n1 , n2 , n1
  • ...

Operations such as comparisons or additions will directly consume the numbers situated at the top of the stack:

  • > Compare the 2 numbers at the top of the stack and leave a boolean: n1 , n2 - >-1 if n1 > n2 , 0 otherwise
  • -Complete subtraction such as: n1 , n2 - > n1-n2
  • * Signed complete reproduction such as: n1 , n2 - > n1*n2
  • ...

The most control basic structure is the set formed with IF, ELSE AND THEN. IF tests the number at the top of the stack by pulling it. If it is different from 0, instructions placed between IF and ELSE are executed then program connects following the word THEN. If it is zero, program connects directly in instructions being following the word ELSE. Several structures of this type can be obviously been linked.

In FORTH, all the instructions can be programs and mutually. They are introduced into the memory according to their compilation. Put in by some instructions which manipulate the return stack as the structures of control for example, all the instructions can be interpreted at any time what gives considerable opportunities of settling for developers. Useless to write another main program and to redo a compilation to see if it is subroutine which works badly . It is enough to launch his execution with adequate parameters.

Instructions or programs or subroutines are inserted into the memory with pointers' system which connect them among them to allow the interpreter (or in the compiler according to the mode of functioning) to find them. Search begins by leaving of the last compiled instruction and by raising until the first which is often DUP. If instruction does not exist, the interpreter / compiler looks if it is a number and piles it at the top of the stack in interpretation mode or compiles it in the instruction in compilation mode. To create an instruction, one uses 2 instructions (except those that describe the sequence to be executed):

  • : Follow-up of the name of the instruction and which spends from interpretation to compilation mode,
  • ; Which ends instruction and so goes back in interpretation mode.

Finally, not to be too exhaustive in this presentation, know that FORTH language allows to write recurse procedures what makes a really very evolved language of it. Here is the example of factorial calculation program of an integer appealing to this notion of recursion:

: FACTORIELLE
 DUP 1 >
  IF
   DUP 1 - FACTORIELLE *
 THEN
;

 To illustrate this introduction in the language FORTH, here is a screen presenting the development of this instruction:


The window of interpretation (in light gray) gives values calculated by the factorials of 5, 4 and 10 after compilation of the file contained in the window of edition (in blue). The window of display of the memory (in dark gray) shows size occupied by this instruction which is of 46 bytes.

To have more information on FORTH, I invite you to consul the Page of links making reference to the main sites of the net.