The only problem we Forthers have is that each time someone tells us he has found something new, we answer: "Oh, I know three guys, none of them has a CS degree, and each one invented this independently 10 years ago, but they had a much better approach than you". He'll hate you for that.
People have often dreamed of programming computers with a natural language such as English, but the problem of ambiguity remains insuperable. Forth, like English, is made up of words separated by spaces but it has a simpler syntax, made possible by the use of a stack. Unlike other computer languages there are no lists of parameters enclosed in brackets. Instead of saying 2+2 or +(2,2) we say 2 2 +. Each word stands on its own. When we say + the computer does not have to wait to discover what to add, because it is already there, on the stack. The noun always comes before the verb that acts on it, as is natural in English whenever urgent commands are issued.
Programming consists of defining new words, using those the computer already knows. Forth encourages short definitions which can be tested as soon as they are written. In that way, when a bug appears, you can be pretty sure it is in the last word you defined, not somewhere in several pages of code.
A trivial example:
The word . prints the number on the stack
: DOUBLE 2 * ; defines a word which doubles the number
on the stack.
3 DOUBLE DOUBLE . prints 12
Since the entire language structure is embodied in words, the application
programmer can "extend" Forth to add new operators, program constructs,
or data types at will. The Forth "core" includes operators for integers,
addresses, characters, and boolean values; string and floating-point operators
may be optionally added. Forth has been called "a language for writing
languages" - by defining new words you create the language that best describes
the problem in hand. Indeed, most of a Forth system is itself written in
Forth, and the essential core is so small and simple that it is perfectly
possible for an amateur to write their own Forth.
As a complete newbie to Forth experienced in several other languages I can say that:
Forth is a unique language.
It is based on two types of data structures: dictionaries and stacks.
You use stacks to push numeric data on them and have them processed. Neat side-effect: that way you can use RPN for all your operations, you don't need no temporary variables yada yada. Short, you don't need parentheses. Gosh!
The dictionary (or several of them, called modules, vocabularies or wordlists) are linked lists of words. A word is a named piece of memory that contains at least a pointer to the next word and a pointer to some code. You can define words and allocate memory to them to have pointers, data or code stored in them at your heart's content. That way, defining "subroutines" as well as close-to-arbitrary data structures is possible.
A Forth system (that's the terminology because it is more than just an interpreter or compiler) swallows source code consisting of definitions and compiles them into words. When you call some word from the source file or from an interactive session with the system, it is executed. Executing a word means that the system mainly follows pointers to code and keeps addresses on a return stack. At the lowest level, these pointers point to assembly implementations of basic words.
The kernel of a Forth system may well be not bigger than 8 KB.
Forth systems normally contain in addition:
As you can see, with a Forth system you don't need an OS anymore. That doesn't prevent people from writing Forth systems for all major and especially for a LOT of "minor" platforms. Forth is a language used very much in embedded systems programming as well as a fast, clean, consistent general-purpose language.
Hope this helps.
All you gurus: tell me if I got something wrong up there, please.
Discourse on all manner of Forth-related topics can be found in the lively comp.lang.forth newsgroup. The comp.lang.forth FAQ is published in seven parts, which are updated monthly. The seven parts are:
|General questions||Books and Periodicals||Online resources||The ANS Standard|
|Forth systems||Forth groups & organizations||Forth vendors|
These FAQs are intended to be a brief overview of the tools and information available for the new FORTHer.