Follow Slashdot blog updates by subscribing to our blog RSS feed

 



Forgot your password?
typodupeerror
×
Programming Books Media Book Reviews IT Technology

Forth Application Techniques 260

oxgoad writes "Sun Microsystems, Federal Express, the National Radio Astronomy Observatory -- what do they have in common? All have used, or are currently using, the programming language Forth in critical subsystems of their products or processes. 'What is this language Forth?' you ask. Forth has been called 'One of the best-kept secrets in the computing world.' Read on for a review of the book Forth Application Techniques authored by Elizabeth D. Rather."
Forth Application Techniques
author Elizabeth D. Rather
pages 148
publisher Forth, Inc.
rating 5
reviewer oxgoad
ISBN 0966215613
summary A concise introduction to the Forth programming language.

Who & What

Elizabeth D. Rather, president of Forth, Inc., would appear to be the second Forth programmer in the universe. This distinction came about in 1971 when she was brought in at the Kitt Peak NRAO to maintain code written in a quirky language developed by Chuck Moore. Running on a DDP-116 and a H316, this code was responsible for controlling the telescope, data acquisition, and graphical display. After a few years, Moore and Rather, along with Edward K. Conklin, formed Forth, Inc. to attempt commercialization of the language.

Forth Application Techniques attempts to provide a comprehensive introduction to the language for the neophyte Forth programmer. I would say that it pretty much succeeds as such, quietly plodding away through each primitive and feature. It is written in workbook style with various sample problems for the reader to complete. You might not be a Forth coder after reading the book cover to cover; however, you will have a working knowledge of the language and should be able to walk through legacy code with a minimum of difficulty.

If I might step aside from my role as unbiased book observer for a moment, I would like to make a few comments about the state of programming languages in general. It seems that quite often we take for granted essential, but practically invisible, tradesmen such as plumbers and garbage collectors. (Fire your janitor and your web designer -- guess which one you will miss first. Guess which one will still be employable 15 years from now.) Yet, without their services, our daily quality of life would certainly fail to meet our expectations.

Likewise, Forth seems to be an invisible language. No flash, no e-commerce, and no glamour. Such is the nature of embedded systems -- even though every Federal Express delivery driver carries a Forth-based device on his belt. This appears to have resulted in a dearth of quality books dealing with Forth. Search your favorite online book retailer and note the dozens of Forth books that are no longer in print.

While Scheme is from the ivory tower and Forth might be said to be from the machine shop, they do have something in common that is a possible deterrent to the popularity of Forth. Like Scheme, you either get Forth -- or you don't. Stack-based languages leave some programmers dazed and confused. And, as with most languages, it is possible to write some truly obfuscated code. Any language that will allow you to define the number 4 as a word that places the number 3 on the stack can be a frightening weapon in the hands of the contrary.

Kudos

Forth Application Techniques can be commended on its consistency. Careful attention has been given to typefaces to distinguish interpreter output from user input. All primitives and defined words are covered in a clear and unambiguous manner. The book is spiral bound in a plastic binding, and this lay-flat binding is great when using it at your computer or while eating lunch.

Quibbles

The same lay-flat spiral binding that is such a boon when working at the computer can be somewhat of a nuisance when when attempting to hand-hold the book -- the book tends to flop about and feels very insubstantial.

While Forth Application Techniques is very complete and accurate, it is also extremely passionless. You might compare it to a biology textbook discussion of sexual reproduction with no mention of romance. There is no discussion or examples of using Forth in ways that will bring enlightenment. To be fair, in the preface it states that the purpose of the book is to support Forth classes taught at Forth, Inc. This is something that is not entirely clear when examining online retailers' display of the book.

Also of note is that there are occasional features specific to Forth Inc.'s SwiftForth product documented in the book. I would not consider this a real issue as all instances are clearly denoted with an icon. With the exception of chapter 9, which is entirely Forth Inc. specific, the readability is not affected in any way.

Crimes

Forth Application Techniques has no index. With its workbook styling, most will not consider this to be a tragedy. All the same, it would be convenient to look up primitives and defined words.

Conclusions

Should you buy this book? That depends on your desired end result. It is adequate for a quick introduction to Forth. If you are intending to write production code I believe Forth Programmer's Handbook (from the same publisher, review forthcoming) would be a better choice. If possible, I would supplement either with a used copy of Leo Brodie's Starting Forth -- an out-of-print classic.

Where I foresee this book to be a great benefit is in ordering a half-dozen copies for your programming team prior to taking on a legacy project or when considering Forth as a new development platform. The members of your team that "get it" can then enlighten the others with this invisible language.

Table of Contents

  • Preface: About This Book
  1. Introduction
  2. Simple Forth Primitives
  3. Structured Programming In Forth
  4. Data Storage
  5. Strings And Characters
  6. Number Conversion
  7. Vectored Execution
  8. Advanced Concepts
  9. Multitasking
  10. Style Recommendations

Disclosure

I received a review copy of this book from the publisher. Thus, my loyalties and opinions may be completely skewed. Caveat Lector.


Forth Application Techniques is available from Forth, Inc. and from some online merchants like Amazon. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

This discussion has been archived. No new comments can be posted.

Forth Application Techniques

Comments Filter:
  • Not that forth is dead by any means, but it has sort of lapsed into obscurity.

    Nice to see recent development is still happening,
    as forth always has been the best for what its designed for, controlling stuff. Probably always will.

    Plus its sooo cool :)
  • Every time I read about Forth it takes me back, I had a Jupiter Ace as a kid. Sad to say that it was easier to get my ZX81 to do cool stuff so it got kind of neglected. Shame.

    Maybe it's time to google up an emulator and indulge in a bit of notsalgia.
  • Jupiter Ace (Score:2, Interesting)

    by Anonymous Coward
    This was my first home computer - and it ran Forth. I won it in a competition in Popular Computing Weekly back in 1982. I never quite figured out how to program it, because my ZX-Spectrum 48k arrived the next day. Maybe if my sinclair had been delayed I would have taken the time learning how to write Forth, and perhaps by now I could have programmed my own Radio Telescope (which has to be the ultimate way to cheat at SETI@home) :-)
  • by redbaron7 ( 577469 ) on Thursday October 31, 2002 @10:43AM (#4571743) Homepage
    I bought this book a couple of years ago, when I had an idea for a project which I thought could benefit from a Forth-style system. In those days I did a lot more at-home dabbling which I just don't have time for now, and that idea has gone by the wayside.

    If you have any questions for Elizabeth Rather, she can be found on Usenet. When I asked for an "introductory book for modern Forth" I believe she recommended her own book! :-)

    Threaded Interpretive Languages (TILs) such as Forth have very elegant inner workings. I even wrote one as a kid. And I actually used it for a few months. Although my Forth-inspired TIL was limited to 16 bit integer math (on an 8086 I think it was), I still managed to get it to draw 3d wireframe graphics in real time on a PLUTO graphics card :-)

    RB

    • Indeed, due to the mindbending simplicity of the language... everything a stack op... writing compilers and interpreters are stupidly easy (actually a true forth compiler is a bit of a wierd gig when you think about it... forth sorta has the smalltalk-like "environment" vibe about it generally ...
      Remember whipping one up in Qbasic , of all things, to pump code for a little Z80 op system I was working on... Took an afternoon to get the compiler to work.. Toooooo easy.
  • No Thanks (Score:5, Funny)

    by acehole ( 174372 ) on Thursday October 31, 2002 @10:46AM (#4571754) Homepage
    Until I see a decent Language to switch to I'll stick to my punchcards.

  • Jupiter Ace (Score:3, Informative)

    by PHAEDRU5 ( 213667 ) <instascreed@gm a i l.com> on Thursday October 31, 2002 @10:48AM (#4571764) Homepage
    Back in the days of yore, when the world was still mostly in black and white, and strange man-eating beasts wandered the land, a small British company brought out a cute little computer called the Jupiter Ace.

    It was basically a Sinclair ZX-80, but with Forth in ROM, instead of BASIC. It was a fun little thing to play with.

    I may still have mine in a box in the attic. Must go check.
  • ha (Score:2, Funny)

    review forthcoming, eh? what a mad little punster you are. ;)
  • by LineGrunt ( 133002 ) on Thursday October 31, 2002 @10:51AM (#4571779)
    Postscript is based on Forth. You can "program" Postscript...

    Don't know why a non-printer driver person would want to, but you can...

    -LG
    • while it's true that PostScript and Forth use Lukasiewicz (Reverse Polish) notation, the former bears little resemblance in syntax to the latter. PostScript's a lovely and subtle language, but gets interesting when you're debugging an 800MB imposed printing plate ...
    • by Bazzargh ( 39195 ) on Thursday October 31, 2002 @11:41AM (#4572019)
      Er, I did [ibiblio.org].

      Back in the day (crikey was that really 8 years ago???) I wrote PSTab, a guitar tablature typesetter, in postscript. I'd been downloading tab for songs from the (defunct?) OLGA, and wanted to print some for use at home. However, ascii tab looked crap and took lots of space on the page; if you tried to shrink it to use less paper it just left blank space at the sides.

      We had an old Apple II laserwriter on the corridor, and I had written simple EPS diagramming tools for my thesis in awk (copy and paste programming)... so armed with borrowed copies of the red, green & blue books, I learned PS properly and wrote a typesetter that you could use as a header on simple input files (I'd spotted this was how the windows PS driver worked). Once I got to the stage I could wrap ascii-tab up to make *nice* output pages my itch was scratched[1].

      Best thing about it was getting an email from a guy in NZ who used it to produce camera-ready copy for a book of banjo music - there wasnt anything else out there that could handle 5-stringed instruments :) . And that the unplayable example song [rhein-zeitung.de] getting a life of its own in the GuitarTeX manual!

      -Baz

      [1] I know there are bugs. Some of these didnt show up until I saw the output on a higher quality printer. Bah.

    • For some boring stats course we had a programming assignment "in a programming language of your choice".... big mistake

      since it was basically a simple statistical experiment + graphical output, I wrote it in PostScript.

      Kinda cool, it was a report with the statistical experiments embedded, so if you printed it twice, all the graphs were different :-)
    • by bunratty ( 545641 ) on Thursday October 31, 2002 @11:45AM (#4572038)
      Postscript is based on Forth. You can "program" Postscript...

      Don't know why a non-printer driver person would want to, but you can...

      Using PostScript you can send a very small text file to the printer and have it print some amazing graphics. I used it years ago to draw dragon curves (a type of fractal), charts, and text that followed a wavy line for a poster.

      PostScript isn't really based on Forth. It's just another stack-based language, as is the language used for HP calculators, and virtual machines such as Java bytecode and .Net CIL.

      • by unfortunateson ( 527551 ) on Thursday October 31, 2002 @12:45PM (#4572272) Journal
        % Save this as dragon.ps for 15 pages of
        % fractal iteration -- commented even!
        % define constant of 1/sqrt(2)
        /Scalefactor 1 2 sqrt div def

        % Define Fractal subroutine
        % usage: lvl Fractal stroke
        % Examples below are as if called with a level of 5
        /Fractal { % 5
        dup % 5 5
        0 eq % 5 false
        {
        % True condition: draws line segment
        pop 300 0 rlineto % -
        }
        {
        % False condition: recurse routine
        % set the scale factor
        Scalefactor dup scale % 5
        % On alternate iterations, level is set negative. When negative, reverse the angles
        dup -90 exch % 5 -90 5
        0 lt % 5 -90 false
        { neg exch neg exch } if % 5 -90 false
        % Recurse one level lower
        dup 2 div % 5 -90 -45
        rotate exch 1 sub % -90 4
        % Actually call myself again
        dup Fractal % -90 4
        exch dup neg % 4 -90 90
        rotate exch neg % -90 -4
        % Call second time for second stroke
        Fractal % -90
        2 div % -45
        % set things back to the original scale and rotation
        rotate % -
        1 Scalefactor div dup scale % -
        }
        ifelse
        } bind def

        % Loop to iterate 15 pages of fractal
        currentlinewidth 4 div setlinewidth
        0 1 15 { 200 400 moveto Fractal stroke showpage } for
        • This discussion would not be complete without mention of the Obfuscated PostScript Programming Contest [mit.edu]. Of particular interest is this entry [mit.edu], a raytracer in ten lines of code.

          I prefer keeping some anonymity on Slashdot (lets me rant more easily), but if you come across me on the Internet otherwise, you'll recognize me by my .sig, which is a three-line PostScript program (albeit not nearly as cool as the raytracer).

          PostScript is an amazing language - completely changed the way I thought about programming. Bored with systems-level C programming? Give PostScript a try....

    • Then isn't everything from Next forth?
    • Postscript is based on Forth.

      No, it isn't.

      You can "program" Postscript...

      Yes

      Don't know why a non-printer driver person would want to, but you can...

      Mainly because it's fun. But also because you can make some useful scripts to process postscript. E.g. 2-up, double-sided to single-sided, adding page numbers, etc...

      But back to the first point. Postscript is to Forth as Python is to C (roughly). While Forth is an extremely low-level lanugage, Postscript requires a relatively heavy interpreter. A simple forth implementation can be made in a day, and a useful one in a week. PostScript requires much more effort (at least if you want it to be useful with a typical PostScript file). Forth is untyped, PostScript is dynamically typed. Forth has some nifty features making it a reflective extensible language (create does>), PostScript does not. In Forth, everything is a cell (pointer or signed or unsigned integer), PostScript has high-level datatypes like lists, code-blocks (anonymous functions), strings, fonts, etc... In Forth you typically allocate data on a stack, or once at the start of the program. PostScript is garbage collected. Forth is consistently minimal (whether you like it or not), PostScript is mostly high-level, but has some relatively unfriendly features such as fixed-size dictionaries to make it feel more unusable. Forth is easy to debug, and easy to crash your machine with. PostScript is hopeless to debug, but will rarely break anything serious. Forth is inherently unsafe, and is allowed to read/write any memory location, PostScript can be made safe enough to view random files on the web.

      I could go on, but it should be clear by now that about the only resemblance the two languages share is postfix syntax.

    • Forth and Postscript share that both use RPN (reverse polish notation), and as a consequence have some similarities for stack manipulation. So do HP calculators and the Java virtual machine. Beyond that, however, the languages couldn't be more different. Forth is a low-level language with no runtime safety and no dynamic typing. Postscript is a dynamically typed language with garbage collection. Except for the use of RPN notation, Postscript is really closer to languages like Lisp.
  • Ah this is great! (Score:4, Interesting)

    by TerryAtWork ( 598364 ) <research@aceretail.com> on Thursday October 31, 2002 @10:52AM (#4571781)
    FORTH is an incredible language!

    I ran Miller Microcomputer Forth on a TRS-80 back in the day and it was amazing.

    Forth is totally stack oriented. It is difficult to determine where the OS ends and the language begins.

    It is naturally recursive.

    DONE RIGHT you can do a LOT in a few lines.

    You can shoot yourself in the BULLET with Forth.

    And Spiderman would code in Forth because...
    • Re:Ah this is great! (Score:4, Interesting)

      by wkitchen ( 581276 ) on Thursday October 31, 2002 @11:35AM (#4571998)
      Forth is totally stack oriented. It is difficult to determine where the OS ends and the language begins.
      Operating systems are for wimps.

      Those old enough to remember early 8-bit home computers like the C64, TI99, and similar, may recall that many of these "booted" straight into a BASIC editor/interpreter that was stored in ROM. Nothing between you and the hardware except for this and some very low level rom code roughly equivalent to a BIOS. A VERY low-fat system. Compare that to the multiple levels of abstraction and bloat we have now.

      Ever think it might be sort of cool to run that kind of low-fat system on powerful modern hardware? Sort of like an ultimate C64 with, hundreds of megabytes of RAM, and many hundreds of MIPS. Maybe not pretty, but the raw computing horsepower at your fingertips would be awesome, provided you know the system well enough to use it. Replace that BASIC interpreter with the close-to-the-machine spartan efficiency of Forth, and it gets even leaner and meaner.

      Chuck Moore, the inventor of Forth, has created an interesting little critter called colorForth that does just this. Stick the floppy in the drive, turn on the power, and boot straight into colorForth. The system is at your command. No OS, other than colorForth itself. The most bloated piece of software on the machine is the BIOS.

      Just you. In complete control of your machine. What a concept.

      • url for colorForth (Score:3, Informative)

        by wkitchen ( 581276 )
        Chuck Moore's home page:

        http://www.colorforth.com [colorforth.com]
      • Ever think it might be sort of cool to run that kind of low-fat system on powerful modern hardware? Sort of like an ultimate C64 with, hundreds of megabytes of RAM, and many hundreds of MIPS. Maybe not pretty, but the raw computing horsepower at your fingertips would be awesome, provided you know the system well enough to use it

        Couldn't you do this by booting a modern PC into DOS? Running compiled C it would be blazingly fast, your program would get literally 100% of the machine's capacity.
      • Chuck Moore, the inventor of Forth, has created an interesting little critter called colorForth that does just this. Stick the floppy in the drive, turn on the power, and boot straight into colorForth. The system is at your command. No OS, other than colorForth itself. The most bloated piece of software on the machine is the BIOS.
        You still use a bloated BIOS? I just wire together transistors and program in machine code with switches. Of course, it takes me days to do what my coworkers can do in seconds, but at least I'm in complete control of every bit and every cycle.

        Wimps!

        • You are using wires and transistors? I'm preferring to use something I have complete control of, not to be at the whim of wire and transistor manufacturers. My computer is made out of a bunch of buckets, ropes, and a large supply or running water. Of course, it takes me years to do what you can do in a second, but at least I'm in complete control of every liter of water.
    • And Spiderman would code in Forth because...

      ... he hates web development?
  • by extremely ( 1681 ) on Thursday October 31, 2002 @10:53AM (#4571791) Homepage
    "Best kept secret" is actually a review for Forth, not the problem. If I'm going to have to deal with a stack, it should have butter and syrup on it.
  • Still Worth Learning (Score:5, Interesting)

    by Anonymous Coward on Thursday October 31, 2002 @10:53AM (#4571793)
    Forth is still great when resources are very limited... Palm OS programming [quartus.net], for instance. I've used it there and in several embedded systems projects without an underlying OS, and managed to run circles around a team coding for 8051-based systems in PL/M (I think that's the name of what they were using, but I'm not 100% certain).

    I also tried a version of Forth-83 for Windows by Ray Duncan's company, LMI. I tried to code up a DDE server, and while it worked, it was painful. I've come to believe that Forth is more trouble than its worth when interfacing to APIs designed for C. Such APIs are often poorly factored (relative to how you'd solve a problem in Forth), and take too many parameters of different sizes as arguments. Even with the Palm you jump through some of these hoops, but in that environment it's often worth the effort.

    The underlying principles of Forth are worth knowing no matter what language you program in... there's a lot of simplicity at its core, and it'll help you understand how to program for other stack based languages such as .NET's CIL. And nothing I've seen teaches factoring better than Forth (too bad Brodie's "Thinking Forth" is out of print).
    • Public domain pForth (Score:2, Informative)

      by senahj ( 461846 )
      If you want to fool around with FORTH
      on your own and for free, take a look at
      Phil Burk's [softsynth.com]
      public domain pForth [softsynth.com]

    • by Waffle Iron ( 339739 ) on Thursday October 31, 2002 @12:27PM (#4572200)
      It's also worth learning just because it's one of the few languages that is simple enough that you can actually understand the implementation top-to-bottom. You could write a simple Forth interpreter in assembly language in a couple of days, just to educate yourself on how languages work. (I did this once for 16-bit X86s about 15 years ago).

      Forth is also an excellent example of "emergent behavior". Even though the language implementation is simple, the dynamic behavior can quickly becom mind blowing. I still have a hard time completely understanding the way some of the compiling "words" (which dynamically add syntax to the language similar to Lisp macros) work in Forth.

      If nothing else, Forth will teach you to factor your code into small procdures, because making a function longer than about 5 lines quickly becomes unreadable :).

      • If nothing else, Forth will teach you to factor your code into small procdures, because making a function longer than about 5 lines quickly becomes unreadable :).

        True. One line is the recommended length -- but that one line holds something very different from what it would have to hold in C.

        Forth also has some interesting design details which result in function calls having much less overhead than function calls in C.

        -Billy
  • Open Firmware (Score:4, Informative)

    by Mikey-San ( 582838 ) on Thursday October 31, 2002 @10:53AM (#4571794) Homepage Journal
    Forth is still in heavy use, actually, as the language for Apple's Open Firmware (IEEE-1275) implementation:

    http://developer.apple.com/hardware/pci/

    Oh, huh? I was supposed to make a point? Whoops. :-)

    -/-
    Mikey-San
  • by Anonymous Coward
    ...unfortunately, it's got it's own acronym, MUF, short for Multi User Forth. It's used on a sub-set of on-line Multi User Dungeons known as MUCK's, specifically all those based on the FuzzBall variant, which at this point includes a couple of notable ones such as ProtoMUCK.

    As a quick pair of references, check out the ProtoMUCK and FBMuck projects on SourceForge.
  • and also (Score:3, Informative)

    by mirko ( 198274 ) on Thursday October 31, 2002 @10:55AM (#4571801) Journal
    Sun Microsystems, Federal Express, the National Radio Astronomy Observatory -- what do they have in common? All have used, or are currently using, the programming language Forth in critical subsystems of their products or processes."

    And also Adobe who really got inspired for this when designing the Postscript language too...

    Concerning Sun there have been at least 2 uses :
    1) for their boot manager
    2) for the Java Virtual Manager which is a stack language based-environment.
  • availability ? (Score:2, Informative)

    by mirko ( 198274 )
    I just went through amazon.com web site and I regret that most (if not all) Forth books written by Leo Brodie are out of stock...
    I remember waiting until 4 months to get a copy of "thinking forth", by the way.

    Now, if you want to learn forth, there seem to be the gforth manual [tuwien.ac.at], at least...
  • In the late '80s, there was a sweet Forth implementation for the Mac called Mach 2. It produced native 68000 code -- unusual because most Forths produced an interpreted byte-code, but possible because of the 68000's stack orientation -- and was cheap (about $50).

    While it wasn't the easiest thing in the world to use for building complete GUI apps, it was a great experimental tool because it was essentially an interpreted assembler/disassembler! You could experiment with OS traps that were recently published but hadn't made it to other compiler implementations, and see what machine opcodes would do the job minimally.

    You could then take those opcodes and drop them into, say Turbo Pascal (which was barely supported by Borland) as inline machine instructions. Way cool.

    The other place where Forth came in handy was a couple several years later when learning PostScript: as a stack-based language, PostScript was a cinch to pick up. Of course, if you've been using RPN calculators, it shouldn't be too bad either.

    Forth may be a little low-level in these days when Perl and Python provide such abstract data types, but it makes you think closer to the hardware. When hardware control is an issue (in devices like telescopes, barcode readers, etc.), Forth beats programming in assembler by a long shot.
  • Elizabeth Rather (Score:5, Informative)

    by Draoi ( 99421 ) <draiocht&mac,com> on Thursday October 31, 2002 @11:24AM (#4571949)
    I had the honour to meet Elizabeth at Apple during an OpenFirmware/FCode training course. She's an amazing teacher & is one of the first people ever to use the language, having worked with Chuck Moore in the late 60s ....

    She now works with Forth, Inc. Check out forth.com [forth.com]. They have an excellent history of the language here [forth.com]. BTW, there are free Forth interpreters for just about every platform out there. It's a cool language.

    Chuck Moore's own site is here [colorforth.com]

  • by Junks Jerzey ( 54586 ) on Thursday October 31, 2002 @11:35AM (#4571999)
    I keep seeing mentions of Forth being an interpreted language, but that's just an implementation choice. Most modern Forths, such as iForth, VFX Forth, and Forth Inc's own SwiftForth, generate machine code and do optimization to varying degrees. iForth and VFX Forth analyze stack operations and replace them with register operations where possible. Benchmarks have shown that iForth generates better floating point code than Microsoft's Visual C++ compiler (which already generates better floating point code than gcc).

    So why don't you hear about Forth much? A couple of reasons:

    1. Forth doesn't have much in the way of standard libraries, so you'll almost certainly get more bang for your time writing quickie applications in Perl or Python than Forth. Try writing a Forth program to read in a file of strings of arbitrary length and sort them, for example. This is a one liner in Perl.

    2. Forth has always been geared toward simplicity, but modern desktop environments (Linux, Windows, MacOS) are hugely complex. Forth arguably isn't the best match for such complexity. Embedded systems are different.

    3. Forth is best viewed as an interactive alternative to C or assembly language. Certainly from the interactivity alone Forth is a better choice for incrementally building a application than assembly language. This is why Forth gets a lot of use in embedded systems. But with desktop computer speeds being insanely high, it's hard to justify working on that kind of level under, say, Linux or Windows.

    (I fully expect this to be followed by "Not true!" rantings from a Forth zealot or two. But you really do have a hard time pointing to compelling applications written in Forth for modern desktop OSes. Python is a good language, so you see some amazing applications written in it (e.g. Zope), but despite all the religion surrounding Forth, you never see much to show for it on the desktop.)
    • You are absolutely right. Here is an example...

      I've written four production FORTH compilers for various machines, including m68k PPC and x86 (before that I wrote several threaded and direct interpreters). My compilers never manifest the stacks as stacks, and use state of the art (Briggs Chaiten) register allocators. You won't see these compilers because they are used as back end code generators for other languages! The advantage of FORTH is that the front end of the compiler can be retargeted to any machine with a FORTH compiler. The runtime system and library can be written (somewhat) portably in FORTH. It's an excellent technique, and I heartily recommend it.

    • Try writing a Forth program to read in a file of strings of arbitrary length and sort them, for example. This is a one liner in Perl.

      Why not just use the sort command? Then it would be a no-liner.

      • Why not just use the sort command? Then it would be a no-liner.
        The example may have been weak, but the point was to solve a problem programmatically. Nobody said that all one needed to do was sort some strings. More likely, these strings would need to be sorted before being massage in some other manner based on logic of some sort.
      • Try writing a Forth program to read in a file of strings of arbitrary length and sort them, for example. This is a one liner in Perl.
        Why not just use the sort command? Then it would be a no-liner.
        Forth sort_command does_not_have
    • Comment removed based on user account deletion
    • You are very right. However, at least I think it's important to note that a lot of Forth implementations are interpreters. Even when being interpreted, this Forth can often be faster than compiled C! Gotta love Forth!
  • by Anonymous Coward
    Part of the boot loader in FreeBSD is written in Forth!
  • ... And I certainly remember the joke about how in Forth you "Foot in yourself shoot."

    I did my Forthing many years ago (far, far too many). The usual thing, embedded systems work, but I actually did the programming on an IBM PC (original) using a Forth boot floppy (it had its own environment/OS). Then someone else did integration with the embedded system.

    It was a truly weird language, and it made it far too easy to create 'write-once' unmaintainable code. But it was my first introduction to many concepts, including a language that was truly 'cross-platform'. And it led to a short job at Aldus because I already understood stack-based languages, so Postscript wasn't a shock to me.

    In many ways Charles Moore is a seriously twisted genious. I have always rooted for him, despite the fact I prefer to use a cleaner, more readable language. (Can we say 'Python'? I knew we could.)

    So, in the end, I cannot say I think Forth should be in everyone's toolkit. For that reason I expect this review will be of limited use to most of us. (Attn. Moderators, notice how I managed to get this post on-topic in the last sentence. Now you have to mod me down as 'flamebait' or 'boring' or something.)

    Jack William Bell
    • In many ways Charles Moore is a seriously twisted genius. I have always rooted for him, despite the fact I prefer to use a cleaner, more readable language.

      Amen to that. A lot of Chuck's work, especially his new ColorForth, borders on the bizarre, but it's never drooling-in-the-corner bizarre -- it's always mad genius bizarre.

      That being said, Forth is a lot of fun to work with even if you never do anything remotely useful with it. The underlying dynamics of a Forth environment are simple enough that you can roll your own very quickly, which is not something you're going to do with C or C++ or Java. Ultimately, that's what probably kept Forth from becoming more popular: the temptation to create new Forth-like languages was easily satisfied by Forth programmers. Case in point, of course, is Chuck Moore himself, who apparently despises the standard version of Forth and who has never stuck with one version of the language for very long.

      Using Forth and building your own Forth environment is still a fascinating way to gain insight into interpreters and virtual machines, and the kind of thinking required for using Forth well is quite an enjoyable exercise. If you do want to use Forth for "real" work, it is worth bearing in mind that some very complex systems have been built very, very quickly by seasoned Forth programmers -- including air traffic control systems -- and the mode of bottom-up programming used in Forth basically ensures continuous unit testing, so Forth programs tend to require less debugging late in the development process.
  • by farrellj ( 563 ) on Thursday October 31, 2002 @12:07PM (#4572123) Homepage Journal
    Leo Brodie's is one of the best books to learn Forth with. And the cartoons in it are the funniest/best in a manual that I have seen since the first Wizardry Manual!

    ttyl
    Farrell
    • Speaking of Wizardry, one of the authors (Greenberg, I believe) prefers Smalltalk. You can go to the Squeak mailing lists at Yahoo and read his regular postings. I think he's a lawyer now.

      sean
  • FORTH IF HONK THEN
  • Did anyone own one of these? It was a wacky ZX81-like computer with a membrane keyboard and 4k. of memory. Instead of programming in BASIC you wrote in Forth. Needless to say it didn't catch on!
  • by dwheeler ( 321049 ) on Thursday October 31, 2002 @01:01PM (#4572347) Homepage Journal
    FORTH is truly a fabulous language when you need to be able to interactively develop a program, where both the programming and execution must run on a very tiny machine (e.g., 2-48K RAM and 1-10MHz), and you still need the program to run quickly. Not only can you write code quickly, and get lots of interaction, but many Forth implementations are extraordinarily small, so you can actually read _every_ line of machine/assemly code that's executed on your equipment if you need to. I remember some absolutely magical programs being written on Apple II and Atari 800 computers (32-64K RAM, 1MHz 6502 chips).

    The problem is, the situation that FORTH is great in is becoming increasingly rare. Most FORTHs still require programmers to constantly think about how to juggle the stack if they receive a number of parameters (yes, there are some extensions). FORTH has essentially no type-checking, and the combination of these two factors means that it's extremely easy to (1) make a mistake and (2) for that mistake to have nasty consequences.

    Many program language implementations generate intermediate stack-based code (think Java class files, Python, Perl, etc.); in FORTH, you're writing the stack-based code yourself, so you are essentially writing in an assembly language for a simulated stack-based system. FORTH thus has some of the similar properties as assembler: fewer development system resources are required, but it's more work for the programmer. This isn't completely true; FORTH is definitely much higher-level than the typical assembly language program, but many programs take more work to implement in FORTH than, say, Python (which is also interactive, and it executes a stack-based program, but lets people express code in a more Algol-like way and then TRANSLATES that code into a stack-based approach).

    I do think Forth is a good language to learn, because many systems are built on stack-based intermediate languages (Java, C#, Perl, Python), and being able to directly interact with a stack-based language helps to learn how they really work.

    An implementation of Forth for 6502 is freely available. [6502.org]

  • Forth has never seemed to lend itself to mainstream application development. However it is found in a lot of special applications. My first introduction was in the programming of a special purpose computer for generating cellular automata. It was called the cellular automata machine (CAM) and it was a custom machine specifically designed for doing CA experiments. The simulations had to be programmed in Forth. This was way back in the late 80's/early nineties.

    Most people who were weened on HP RPN calculators like Forth's postfix notation. I find it a bit unnatural but I was a FORTRAN man for a long time.

  • by oldstrat ( 87076 ) on Thursday October 31, 2002 @01:32PM (#4572575) Journal
    Once apon a time the first language for any new machine was Forth. But then again it's been a long time since we've seen any really new machines.

    The reviewer is correct, someone groks forth or they don't.
    Being a person who groked it from the second he saw it in 1978, I can't understand anyone not getting it.
    Sure RPN notation is hard for some (apparently most) folks, and boolean logic just doesn't seem to be natural for most people, and then the stack just knocks them in the head, but these are three of the four pillars of what makes forth great.
    The fourth pillar of forth is that you can change it to be anything you want, most languages have to be learned, forth is a language that you can teach to learn you... If RPN is just intolerable you could redefine it and still leave the core alone for pre existing words (functions for the non forth crowd).

    Leo Brodie's "Starting Forth" and "Thinking Forth" books are great and it's a shame that Brodie no longer has an interest in the language.

    As a long time forth user I'm not thrilled with the complexity added in C. Moore's latest version colorForth, it seems to add a new layer of complexity, but then again I may just be unable to Grok it.

    Personally I'd love to see Forth brought to the GUI era and don't understand why it hasn't been.
  • Or maybe it was URTH, which I think stood for University of Rochester forTH. I seem to remember using this language once upon a time as a co-op back in about 1982, but the net, even Google, seems to retain little memory of it. I say "seem" to remember because I can't recall which exact FORTH or FORTH-like language we used, but I'd like to know because I'd like to find a similar version.

    --Jim
  • Display Forth? (Score:3, Interesting)

    by zatz ( 37585 ) on Thursday October 31, 2002 @02:15PM (#4572961) Homepage
    I find it interesting that so many people comment that Forth is meant for embedded environments and has no place in a "modern" GUI system. But PostScript is similar to Forth in flavor, and its original embedded target was printers... and now OS X uses "Display PDF", more or less a superset of Display PostScript.

    Just because a tool like Forth is traditionally used by a single programmer in a very cramped system doesn't mean it couldn't have applications in other places. There are many things I wouldn't write in Forth... and there are many times I find myself writing GDI calls and wishing for a more Forth-like interface.
  • I used to work for a company that deals with real time equity market data web sites: all runs on a custom Forth back end and web application server. CNBC ran on Forth for a year. Fortune Investor, Citibank, American Expresss -- all ran on Forth. www.wallstreetcity.com -- still running on Forth. Reason
  • I remember a story I read in the famous German "c't" magazine many years ago:

    Sometime in the 80s (Germany was still a divided country then), a competition was held for university students from all over Germany. The goal was to write a program to control a robot to perform some predefined tasks, with the team who took the shortest time to finish the program being the winner.

    The teams from West Germany used their butt-kickin' (for the time) Intel-based systems (DOS, C, Pascal, harddisks and whatnot).

    The competition, however, was won by the only team from East Germany. They used an U880 (a GDR Z80-clone running at 1 or 2 MHz) based Robotron [robotron-net.de] computer which had maybe a tenth of the power of the other teams' computers, and Forth as a programming language.

    Yep, it's not the size, it's how you use it ;-)

  • So, uh, does anyone have a Fourth "Hello World" program yet?

    Preferably one that has email built into it.
    • : Hello ( -- )
      ." Hello, World!" CR ;

      There is a text editor that allows you to write the macros in FORTH (as per Emacs/LISP). I don't recall the name or details.

      Integrating such a beastie would be trivial in Mutt or Elm.

  • Euskera, the native language of the Basque people, has a basic structure that is reminiscent of Forth. Whereas English speakers are used to a caseless prepostional system, Euskera speakers are used to a case-based postpositional system that leans mostly toward a "reverse" sequence of sintagms. Here are some examples in my (now rusty) dialect:[1]

    • Gizona naz - I am a man - Gizon(man)+a(a, the) naz(I am)
    • Zergaitik etorri zara? - Why have you come? - Zer(what)+gai(cause)+tik(for, via) etorri(come) zara(you are)
    • Etorri dirala dino - He says that they have come - Etorri(come) dira(they are)+la(that) dino(he says)
    • Datorren barikuan berriro etorri gara - We will come again next Friday - Dator(it comes)+en(that) bariku(Friday)+an(on) berri(new)+ro(each, for each) etorri(come)+ko(normally local genitive case marker, functioning here as a future tense marker) gara(we are)
    • Ikusi dozun gizona etorri dala dino - He says that the man whom you saw has come - Ikusi(see) dozu(you have)+n(that) gizon(man)+a(a, the) etorri(come) da(he is)+la(that) dino(he says)

    Well, I could go on, but I think you get the point.

    You can think of a case postposition (of which there are quite a few and which confer great functional specificity) as a sort of type marker, which makes Euskera a sort of object-oriented, reverse-notation language.[2]

    __

    [1] Any euskera batua fascists reading this can send their corrections of my grammar and spelling to /dev/null.

    [2] Well, reverse for English speakers in any case, ha ha.

  • It was fun. But RPN is not a way to run a whelk stall.
  • Forth is great when you need an interactive language and have very limited amounts of memory available. Something like a boot ROM or a tiny embedded system. You can squeeze a full, interactive system into a couple of kilobytes.

    But that is probably its main virtue. Once you move development "off board" and use a batch compiler, you might as well use a compiler (C, Modula-2, etc.).

  • 15-16 years ago, I had a job with Forth. We were developping applications for the Panasonic RL-H1400 Hand-Held Computer [oldcomputers.net].

    I wrote a decompiler that produced compilable Forth code from competitor's ROMs (and we had loads of laughs looking at their inept examples of programming, such as "1 = if 1 else 0 endif" which basically did nothing at all), and I also managed to squeeze in a 4K bytes ROM an insurance rate table with 10,000 integer entries (the second derivative did fit in three bits or something silly like that).

  • Forth is used as the backend scripting language for the 3D animation software Realsoft 3D [realsoft3d.com]. Realsoft also also happens to be my favorite dark horse candidate in the highly competitive 3D animation marketplace, notable because it runs on Linux.

    When you think about it, a low level language like Forth is ideal for such an application. Realsoft strives for realtime OpenGL animation playback, with physically correct simulation, particles, deformation hierarchies and tons of geometry thrown at the screen. Forth is fast enough to solve custom animation expressions without getting in the way.
  • I'm sorry but I have a lot of trouble with FedEx being cited as the second "credible" company on this list. I know for a fact that FedEx's call centers are running programs written in FoxPro on DOS. Does that make FoxPro a great language? Even the author of the program (who wrote it in college in his free time while working there) would wouldn't agree to that, despite the fact that they're still paying him to support an app that they refuse to pay the money necessary to replace.

    I also know that FedEx still has huge monolithic apps written in COBOL on IBM mainframes, since I get nice descriptions of them from my professor on Monday and Wednesday nights (he works there during the day). COBOL, people, COBOL.

    I'll make a blanket statement as a Memphian who knows entirely too many people who are either employed by the company or serve as vendors to it: FedEx is a big slow giant that made a lot of decisions in a hurry that it doesn't want to pay to take back. For example, they just built a nice new world headquarters that consists of some of the most modern buildings in this part of the country (ok, not saying a _whole_ lot, but still) and what do they furnish them with? Yup, the furniture they bought in the '70s and '80s.

    So when someone says "FedEx uses ____" I tend to ignore that fact and move on. Not every decision they've made is bad, but very few have anything to do with the technical merits of the choices given.

Term, holidays, term, holidays, till we leave school, and then work, work, work till we die. -- C.S. Lewis

Working...