To Rev or not to Rev

Geoff Canyon geoff at runrev.com
Wed May 4 10:43:31 EDT 2005


On May 2, 2005, at 8:02 AM, Dennis Brown wrote:

> On May 2, 2005, at 10:25 AM, Geoff Canyon wrote:
>
>
>> I'm not sure how to catalog Forth, but it's not OO (inherently --  
>> there are OO implementations). It's procedural, certainly, but the  
>> inherent stack gives it a definite functional feel.
>>
>
> Forth is not really a high level language any more than assembler  
> is.  It is an alternative machine language based on a double stack  
> architecture.   There have been hardware implementations of Forth  
> as the native machine instruction set.  When emulated, the "Code"  
> just consists of a list of addresses to the actual machine code for  
> the native functions, or addresses of  "higher level" defined  
> function (uses a flag bit to tell which).  This makes it execute  
> much faster than "byte code".  You can implement a higher level  
> language within the syntax of Forth because of its extensible  
> nature.  "Words" are defined from other words in an interpretive  
> environment.  Because of the double stack architecture, data  
> arguments are passed and returned on one stack and return addresses  
> are in the other stack.  It makes a very efficient and powerful  
> architecture for developing real time machine controllers with a  
> tiny amount of memory.  You are free to define "words" that  
> implement an OO environment if you choose.  You could even create  
> Rev using this as the lower level "P code", or an operating system  
> for that matter.

I understand how Forth works. I'm just not sure how I would  
categorize it. On further reflection, I would say that Forth is  
functional in about the same way that Revolution is Object-Oriented.  
In other words, loosely. ;-)

I disagree that Forth is no more high-level than assembler is. The  
built-in extensibility of Forth syntax makes it much more than just a  
convenient way of handling machine language.

gc


More information about the use-livecode mailing list