Small languages (was Re: Lua, Lunatic and Python
Julian V. Noble
jvn at nowhere.virginia.edu
Thu Dec 18 13:13:19 EST 2003
Alaric B Snell wrote:
>
> Paul Rubin wrote:
> > Forth is such a contorted language though, it's best to avoid it
> > unless you're desperate.
>
> That's in the eye of the beholder - any unfamiliar type of language will
> look contorted until you learn it.
>
> Good comments, sensible names for things, and indentation to show
> structure always help!
>
> Compare the following FORTH:
>
> : memory-remaining ( -- n )
> ( Count how many allocation units of memory remain unused )
> MAX-MEM @
> ALLOC-PTR @
> - ( Subtract allocation pointer from end-of-ram pointer to
> see what remains inbetween )
> ;
>
> : low-memory? ( -- b )
> ( Returns true iff there is less than 1024 cells of memory left )
> memory-remaining
> 1024 CELLS
> <
> ;
>
> : warn-if-memory-low
> low-memory? IF
> WARN "We are running low on memory"
> ENDIF
> ;
>
> ...to the following semantically equivelant FORTH:
>
> : check-mem
> ALLOC-PTR MAX-MEM @ @ 1024 CELLS - < IF
> S" We are running low on memory" WARN THEN
> ;
>
> FORTH looks contorted to many people due to the postfix arithmetic
> thing, mainly. But that's not at all hard to learn, and it simplifies
> the language a lot (no operator precedence, no nonuniformity between
> 'operators' and 'functions', etc).
>
> When FORTH really shines is when you use the fact that the compiler is
> extensible to extend the language with a domain-specific sublanguage for
> your application and use that.
>
> Eg, I am experimenting with state machines, and am planning to throw
> together a FORTH library that will allow me to write my algorithms as
> state transition diagrams.
>
> In most languages, it has to be done like these guys are:
>
> http://smc.sourceforge.net/
>
> You write source code in a special state machine language, which you run
> through the external tool to generate C source, which you then compile
> into your program.
>
> In FORTH, you can define a word such as MACHINE{ that is marked
> specially so when the compiler encounters it, it hands control to your
> own parsing code which then parses up to the matching }MACHINE
> statement, compiles the state machine (using the platform independent
> compiler backend), then returns control to the FORTH compiler. This does
> away with all the complexity of invoking the external tool; the state
> machine compiler is just imported as a FORTH library. Also, rather than
> needing to put state machines in seperate source files, you can include
> them inline, which is great for small and simple state machines used in
> only one context:
>
> ... some code ...
> MACHINE{ ... a state machine ... }MACHINE
> ... more code ...
>
> So like the other guy said, how contorted FORTH code looks often depends
> on how sensible the author was in defining their application-domain toolkit.
>
> Anyway, it's really really dangerous to say bad things about a popular
> language, OS, or editor on Usenet - it all just ends in flames :-)
>
> ABS
Since you are interested in state machines, may I refer you to my
article "Finite State Machines in Forth"
http://www.jfar.org/article001.html
It is based on the tabular representation of FSMs rather than the
transition diagram representation. I couldn't think of a way to
compile a graphical representation ;-)
--
Julian V. Noble
Professor Emeritus of Physics
jvn at lessspamformother.virginia.edu
^^^^^^^^^^^^^^^^^^
http://galileo.phys.virginia.edu/~jvn/
"Science knows only one commandment: contribute to science."
-- Bertolt Brecht, "Galileo".
More information about the Python-list
mailing list