Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

3  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

4  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

5  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

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

7  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

8 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

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

10  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

11  DUP – duplicates the topmost element on the stack 33 20 9 33 20 9

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

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

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

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

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

17  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

18  Perhaps the most odd looking Hello World out there : main\ Entry point."Hello World" ; : main\ Entry point."Hello World" ;

19  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 ;

20  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 ;

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

22 www.bocan.ro/deltaforthnetvaler@bocan.ro


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

Similar presentations


Ads by Google