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

## Presentation on theme: "World’s first Forth compiler for the.NET platform Valer BOCAN, PhD."— Presentation transcript:

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  First 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 20 9

 DROP – drops the topmost element on the stack 33 20 9 9

 SWAP – swaps the two topmost elements on the stack 33 20 9 33 9

 OVER – duplicates the second topmost element on the stack 33 20 9 33 20 9

 ROT – rotates the three topmost elements on the stack 33 20 9 33 20 10 9

 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" ; : 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 ; 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 ; : main\ Entry point."GCD of " num1.." and " num2.." is " num1 num2 gcd cr ; 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 ; : 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/deltaforthnetvaler@bocan.ro

Download ppt "World’s first Forth compiler for the.NET platform Valer BOCAN, PhD."

Similar presentations