0% found this document useful (0 votes)
233 views22 pages

Delta Forth

Forth is a procedural, stack-based programming language invented in the 1970s. It is compiled and interpreted simultaneously. The Delta Forth .NET compiler allows developers to write Forth code targeting the .NET platform. It was implemented in only 5 weeks. The document discusses Forth's use of reverse polish notation and stack-based operations. It provides examples of Forth code for common algorithms like finding prime numbers and Euclid's algorithm.

Uploaded by

galkys
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
233 views22 pages

Delta Forth

Forth is a procedural, stack-based programming language invented in the 1970s. It is compiled and interpreted simultaneously. The Delta Forth .NET compiler allows developers to write Forth code targeting the .NET platform. It was implemented in only 5 weeks. The document discusses Forth's use of reverse polish notation and stack-based operations. It provides examples of Forth code for common algorithms like finding prime numbers and Euclid's algorithm.

Uploaded by

galkys
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 22

Worlds 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 1950s 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

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
* 4 +

10 6 5 42 2 7

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 33 20 9 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

20 33 20 9 33 20 9

ROT rotates the three topmost elements on the stack

10 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" ;

Finding prime numbers (up to 400 in this case)


: 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 / > ;

Euclids algorithm
\ The first number \ The second number over over > if swap then over - 0 then until then then ; : main \ Entry point ."GCD of " num1 . ." and " num2 . ." is " num1 num2 gcd cr ;

4330 constant num1 8235 constant num2

( 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

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

www.bocan.ro/deltaforthnet [email protected]

You might also like