World’s first Forth compiler for the .NET platform
Valer BOCAN
, PhD
What is Forth anyway?
Reverse Polish Notation
Stack

based programming
Delta Forth .NET
Demonstration
Procedural, stack

based language that is
compiled and interpreted at the same time
Developed by Chuck Moore at the US National
Radio Astronomy Observatory in the early 1970s
Procedures are called
words
that are grouped in
vocabularies
.
Forth is a meta

language, as new words can form
new specialized Forth

like languages
Popular for developing embedded systems.
Implemented on RISC processors
Open Firmware boot ROMs used by Apple, IBM,
and Sun Microsystems
F
irst stage boot controller
for FreeBSD
Software that controlled the robotic arm that
repaired the Hubble Space Telescope
50

70% of a typical Forth implementation is
written in… Forth
Implementation effort is small; a single
developer can create a Forth system on a new
platform in months
Delta Forth .NET was implemented in just 5
weeks
What is Forth anyway?
Reverse Polish Notation
Stack

based programming
Delta Forth .NET
Demonstration
Invented by Charles Hamblin in 1950’s to enable
zero

address memory stores
In postfix notation, the operators follow their
operands, i.e.
3 + 5
becomes
3 5 +
RPN obviates the needs for parentheses
otherwise required by infix notation
Reading from left to right, calculations can occur
as soon as an operator is read
2
5
+
7
10
4

*
6
42
Take infix expression
(2 + 5) * (10
–
4)
This translates to postfix expression
2 5 + 10 4

*
See how the postfix expression is evaluated using
a stack

based algorithm
What is Forth anyway?
Reverse Polish Notation
Stack

based programming
Delta Forth .NET
Demonstration
Unusual programming style, close to machine
Forth uses two stacks:
Parameter stack, used to transmit parameters
between words
Return stack, used to hold the return address of the
word caller and some counter for loop functions
There are some powerful primitives to handle the
stacks
DUP
–
duplicates the topmost element on the
stack
33
20
9
33
33
20
9
DROP
–
drops the topmost element on the stack
33
20
9
20
9
SWAP
–
swaps the two topmost elements on the
stack
33
20
9
20
33
9
OVER
–
duplicates the second topmost element
on the stack
33
20
9
20
33
20
9
ROT
–
rotates the three topmost elements on the
stack
33
20
9
33
20
10
9
10
What is Forth anyway?
Reverse Polish Notation
Stack

based programming
Delta Forth .NET
Demonstration
Sequel of the Delta Forth for Java project (1997)
C# command

driven application
This dialect is not interpreted, the generated
code is fully managed
Supports Forth at the .NET consumer level (i.e.
no new .NET classes can be derived)
Supports interoperability with other .NET
libraries
Perhaps the most odd looking Hello World out
there
: main
\
Entry point
."Hello World"
;
Finding prime numbers (up to 400 in this case)
400 constant limit
:
isprime
\
Returns 1 if the
number on top of stack is a prime
number
2
begin
over
over
mod 0= 0=
rot
rot
dup >r
over 2 / > 0=
rot and r> swap
while
1+
repeat
over 2 / >
;
: main
\
Entry point
."Prime numbers up to " limit . .":
"
limit 1 do
i
isprime
if
i
. space then
loop
;
Euclid’s algorithm
4330 constant num1
\
The first number
8235 constant num2
\
The second number
( Word to test if value on top of stack is equal to
or less than 0 )
:
ZeroLessEqual
dup 0=
swap 0<
or
;
:
gcd
(num1 num2



)
over
ZeroLessEqual
if
(num1 is <= 0)
drop
drop
else
dup
ZeroLessEqual
if
(num2 is <= 0)
drop
drop
else
begin
over
over
=
if
(We've got the result)
.
else
over
over
>
if
swap
then
over

0
then
until
then
then
;
: main
\
Entry point
."GCD of " num1 . ." and " num2 . ." is " num1
num2
gcd
cr
;
What is Forth anyway?
Reverse Polish Notation
Stack

based programming
Delta Forth .NET
Demonstration
www.bocan.ro/deltaforthnet
valer@bocan.ro
Comments 0
Log in to post a comment