Delta Forth .NET Presentation (PowerPoint)

jadesoreAI and Robotics

Nov 13, 2013 (3 years and 8 months ago)

61 views

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