world’s first forth compiler for the.net platform valer bocan, phd

22
Delta Forth .NET World’s first Forth compiler for the .NET platform Valer BOCAN, PhD

Upload: micah-skeete

Post on 14-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Delta Forth .NETWorld’s first Forth compiler for the .NET platform

Valer BOCAN, PhD

Page 2: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Agenda What is Forth anyway? Reverse Polish Notation Stack-based programming Delta Forth .NET Demonstration

Page 3: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

What is Forth anyway? 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

Page 4: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Where is Forth used? Popular for developing embedded

systems. Implemented on RISC processors Open Firmware boot ROMs used by

Apple, IBM, and Sun Microsystems First stage boot controller for FreeBSD Software that controlled the robotic arm

that repaired the Hubble Space Telescope

Page 5: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Implementing Forth 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

Page 6: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Agenda What is Forth anyway? Reverse Polish Notation Stack-based programming Delta Forth .NET Demonstration

Page 7: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Reverse Polish Notation (RPN) 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

Page 8: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

RPN Sample

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

Page 9: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Agenda What is Forth anyway? Reverse Polish Notation Stack-based programming Delta Forth .NET Demonstration

Page 10: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Stack-based programming 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

Page 11: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Forth primitives (1/5) DUP – duplicates the topmost element

on the stack

33

20

9

33

33

20

9

DUP

Page 12: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Forth primitives (2/5) DROP – drops the topmost element on

the stack

33

20

9

20

9

DROP

Page 13: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Forth primitives (3/5) SWAP – swaps the two topmost

elements on the stack

33

20

9

20

33

9

SWAP

Page 14: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Forth primitives (4/5) OVER – duplicates the second topmost

element on the stack

33

20

9

20

33

20

9

OVER

Page 15: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Forth primitives (5/5) ROT – rotates the three topmost

elements on the stack

33

20

9

33

20

10

9

ROT10

Page 16: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Agenda What is Forth anyway? Reverse Polish Notation Stack-based programming Delta Forth .NET Demonstration

Page 17: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Delta Forth .NET 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

Page 18: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Hello World in Forth Perhaps the most odd looking Hello

World out there: main \ Entry point

."Hello World"

;

Page 19: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Forth Sample (1/2) 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;

Page 20: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Forth Sample (2/2) Euclid’s algorithm

4330 constant num1 \ The first number8235 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;

Page 21: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Agenda What is Forth anyway? Reverse Polish Notation Stack-based programming Delta Forth .NET Demonstration

Page 22: World’s first Forth compiler for the.NET platform Valer BOCAN, PhD

Questions?

www.bocan.ro/[email protected]