Talk:Forth (programming language)

From Wikipedia, the free encyclopedia

Good article Forth (programming language) has been listed as a good article under the good-article criteria. If you can improve it further, please do. If it no longer meets these criteria, you can delist it, or ask for a review.

Contents

[edit] Naming

Its name is derived from Mr. Moore's belief that it was a "fourth-generation computer language"

I believe this is wrong. Fourth-generation languages are declarative languages like SQL, which Forth is not, as far as I know. I believe that the inventor thought that Forth was the fourth higher computer language ever written. That is something completely different. Spektr 21:15, 2004 Jun 4 (UTC)

Mr. Moore thought that FORTH was a fourth generation language, even if it isn't so in fact. The article is correct. --Prosfilaes 06:58, 8 Jun 2004 (UTC)

"Fourth-generation language" in the sense of "SQL" was a marketing buzzword. To my knowledge it does not mean anything objective and is not used by actual practitioners of computer science as a meaningful categorization of languages (as categories such as "pure-functional language" or, orthogonally, "strongly typed language" are). It is as null as Larry Wall's categorization of Perl as a "postmodern programming language". --FOo 02:04, 21 Jun 2004 (UTC)

[edit] Spelling

On the Lisp programming language article we have decided that despite the varying orthography we will spell that language's name "Lisp" rather than "LISP". This reflects the common practice of current Lisp users. The language "Forth" is also sometimes spelled "FORTH". Which orthography is preferred among current Forth/FORTH users? --FOo 02:04, 21 Jun 2004 (UTC)

[edit] Three basic instructions

Reading this article reminds me of a fantasy that I read as a child whereby a teenager gets summoned to a world of magic to defeat an evil wizard. Noticing that wizards discover spells on a trial-and-error basis he realizes that he can create new spells simply by combining three basic spells. Now I know he was really a Forth programmer!

Update: Had I thought of using "What links here?" I would immediately have found WIZ-DOS...

[edit] Stack-oriented language

"Stack-oriented" seems far more important for Forth than "data-structured" in the main description. Data-structured doesn't seem nearly as common a term, either, and it's semi-redundant with "reflective" in there. Benhoyt 01:51, 28 October 2005 (UTC)

[edit] FORTH vs. Forth

StepsTogether recently changed

Since the name is not an acronym, it is typically not spelled in all capital letters.

to

Although the name is not an acronym, it is still frequently spelled in all capital letters, following the customary usage during its earlier years.

I am not sure I agree with this change. As far as I can tell, the only people spelling Forth in all capital letters are the same people that also spell Lisp, Fortran and Ada in all capital letters. —Tobias Bergemann 07:50, 15 November 2005 (UTC)

If you read Forth message boards such as comp.lang.forth, you'll see that a significant percentage of people do still write "FORTH". How these people may write other names doesn't change the fact that FORTH is still often written in all caps. Anyway, it's apparent that neither "frequently" nor "occasionally" is NPOV, so I changed the wording to "sometimes", which has the virtue of being unarguably true. StepsTogether 19:08, 15 November 2005 (UTC)
That is a nice compromise. Thanks. (I hadn't read clf for some time and was probably misremembering the situation.) —Tobias Bergemann 08:21, 16 November 2005 (UTC)

[edit] What is the justification for listing Forth as a .NET language?

Hi, 68.68.2.115, as for Talk:Microsoft .NET the comments in the main article have been formatted. Comments are expressed in the talk page, here.

Mark Hurd 05:52, 18 December 2005 (UTC)

[edit] Call for "natural language" example of Forth code

The article claims "A well-designed Forth program reads like natural language". Without an example, this seems quite POV and depends on one's definition of "natural language". Can someone contribute a chunk of code to illustrate this claim? Thanks. --Ds13 07:45, 20 February 2006 (UTC)

  • Here's an example (from www.forth.com); ignore the line numbers. The "main" in this code is the word WASHER.
0 ( Washing Machine Application ) HEX
1 7000 CONSTANT MOTOR 7006 CONSTANT DETERGENT 700A CONSTANT CLUTCH
2 7002 CONSTANT VALVE 7008 CONSTANT TIMER 7010 CONSTANT LEVEL
3 7004 CONSTANT FAUCETS DECIMAL
4
5 : ON ( port) -1 SWAP OUTPUT ; : OFF ( port) 0 SWAP OUTPUT ;
6 : SECONDS ( n) 1000 * MS ; : MINUTES ( n) 60 * SECONDS ;
7 : ADD ( port) DUP ON 10 SECONDS OFF ;
8 : TILL-FULL BEGIN LEVEL INPUT UNTIL ;
9 : DRAIN VALVE ON 3 MINUTES VALVE OFF ;
10 : AGITATE MOTOR ON 10 MINUTES MOTOR OFF ;
11 : SPIN CLUTCH ON MOTOR ON 5 MINUTES MOTOR OFF CLUTCH OFF ;
12 : FILL FAUCETS ON TILL-FULL FAUCETS OFF ;
13 : WASH FILL DETERGENT ADD AGITATE DRAIN ;
14 : RINSE FILL AGITATE DRAIN ;
15 : WASHER WASH SPIN RINSE SPIN ;
  • Pretty natural, no? Alex 23:04, 20 February 2006 (UTC)
Thanks, Alex. Well, the second half of it reads as naturally as any example I've seen. I say add it unless something better comes along! --Ds13 00:38, 21 February 2006 (UTC)

[edit] Example code

Hi BACbKA. I see you've reverted my edit as "incorrect" and you suggest that I did not test on a "standard Forth system". The great thing about Forth standards is there's so many to choose from! ;-) My edit was tested on Gforth, which is an implementation of ANS Forth. Seems "standard" enough to me. At any rate, the existing code that you put back does not product "the same output" as the article suggests. At least two things are incorrect in its output when I run that example: 1) there is a " after the !, 2) there's no carriage return at the end. Does that code really output correctly on your system? --Ds13 23:39, 23 February 2006 (UTC)

Corrected by Benhoyt. Cheers. --Ds13 04:36, 24 February 2006 (UTC)

I didn't notice the ", sorry. I saw that the main change of the edit that I had reverted was changing something of the form .( whatever) to ." whatever else", which is wrong since the ." semantics is not defined in the interpretation state. The other two changes are fine, but they're only cosmetic (i.e., what will be output precisely in the end), whereas the .( vs ." difference can be something that will preclude anything from being printed properly! As for gforth, a lot of systems, gforth included, extend undefined areas of the language to support as much DWIMmery as possible, and this is one of the cases. Sorry to have told you "you should have tested it" when you actually had run it! --BACbKA 13:46, 24 February 2006 (UTC)

No sweat, BACbKA. I enjoyed learning that what I thought was "standard" may not be, afterall. It's good to question assumptions, especially when code compatibility is at issue. Cheers. --Ds13 03:27, 26 February 2006 (UTC)

[edit] Operating system, compilation and implementation rewrite

I've tinkered with these sections, but this bit could do with a rewrite; basically, moving the File System & Multitasking pieces under the Operating System heading and removing some of the repetitions; there are also parts in the Self (meta) and cross compilation and Implementation of a Forth System that I'm not happy with. Suggestions? Alex 15:35, 1 March 2006 (UTC)

  • OK, I'll take the silence as approval... Alex 21:34, 10 March 2006 (UTC)

[edit] Example code

In the example code section, there's a 5-line Python function, and then the same function written as a 1-liner in Forth:

: FLOOR5 ( n -- n' )  1- 5 MAX ;

I know you're trying to show how terse Forth can be, but do we have to be so obviously biased? If you can use the MAX builtin for Forth, it's not really fair to avoid the max() builtin for Python:

def floor5(v): return max(v-1, 5)

—The preceding unsigned comment was added by 130.76.32.167 (talkcontribs) 04:24, 5 April 2006 (UTC2)

  • I don't think it's an attempt at bias; I think the example is rather a poor one, actually, and I'll look for a better one. Lines of source code is not the point with Forth; it's the size of the resulting binary that's the key, as many Forth applications are designed for running in extremely constrained systems with very small amounts of memory. The concept of a "builtin" is also alien to Forth; although ANS-compliant Forths must define the word MAX (as its in the core ANS wordset), some define it in terms of other, simpler Forth words. There are Forths that have only 30 (or less) "builtin" words; all other required words are defined in terms of these.
Oh, and could you sign your comments with four tildes please? Alex 12:05, 5 April 2006 (UTC)
  • OK, how about
: fib ( n -- n' )
  dup 1 > if
     dup 1- recurse swap 2 - recurse +
  then ;
Lowercase is OK in Forth; it's not case-sensitive. There are examples (including Python) at Fibonacci number program. The Python version is
def fib(n):
   if n < 2:
       return n
   else:
       return fib(n - 1) + fib(n - 2)
Better? Alex 21:43, 5 April 2006 (UTC)

Actually, when I think on it, this may serve to contrast/compare better with the Forth example;

def fib(n):
   if n > 1:
       return fib(n - 1) + fib(n - 2)
   else:
       return n

Unfortunately, neither of the Forth examples shows the return of multiple values on the stack, something most other languages can only do via structures. Alex 13:43, 12 April 2006 (UTC)

I consider /MOD ( numerator denominator -- mod div ) to be a great example for this. --IanOsgood 23:34, 10 July 2006 (UTC)

Here are a few variants. The last one, fibo, returns two values per call.


: ifib ( n -- res ) 0 1 ROT 0 ?DO  TUCK +  LOOP NIP ; 

: rfib1 ( n a b -- res ) 
       2 PICK 0= IF  NIP NIP ( b) EXIT  ENDIF
        ROT 1- -ROT TUCK + RECURSE ;
 
: rfib ( n -- res ) 0 1 rfib1 ; 

\ fibo n = fst (h n)

\ h 0 = (1,0)
\ h n | even n = (a^2+b^2,b*(2*a-b)) where (a,b) = h (n div 2)
\ h n | odd n  = (a*(2*b+a),a^2+b^2) where (a,b) = h (n div 2)

: SQR ( a -- a^2 ) DUP * ;

: H ( n -- res1 res2 )
        DUP 0= IF  DROP 1 0 EXIT  ENDIF
        DUP 1 AND IF  2/ RECURSE 2DUP  2* OVER + *     -ROT  SQR SWAP SQR +
                ELSE  2/ RECURSE 2DUP  SQR SWAP SQR +  -ROT  SWAP 2* OVER - *
               ENDIF ;

: FIBO ( n -- res ) h DROP ; 

: TEST ( n -- )
       LOCAL n
        CR ." iterative FIB  : " TIMER-RESET 
       0 #1000000 0 DO  DROP n ifib  LOOP  0 .R ." , " .ELAPSED
        CR ." recursive FIB  : " TIMER-RESET 
       0 #1000000 0 DO  DROP n rfib  LOOP  0 .R ." , " .ELAPSED 
        CR ." recursive FIB2 : " TIMER-RESET 
       0 #1000000 0 DO  DROP n fibo  LOOP  0 .R ." , " .ELAPSED ;

FORTH> 34 test
iterative FIB  : 9227465, 0.083 seconds elapsed.
recursive FIB  : 9227465, 0.201 seconds elapsed.
recursive FIB2 : 9227465, 0.137 seconds elapsed. ok

--Mhx 15:07, 13 May 2006 (UTC)

http://quartus.net/products/forth/compare.shtml -- a decent example, using Quartus Forth for the Palm handhelds, compares Forth and C in a complete "HelloWorld.exe" application. The comparison is written by Neal Bridges ( find email for him at Quartus.net). Raystm2 02:40, 1 March 2007 (UTC)

  • I just spoke with Neal and he doesn't consider this an example of comparison between the two languages. His exact quote --
  • "Raystm2, my comparison page shows what Palm advocates as a programming model vs. what Quartus Forth abstracts more simply. It isn't really a comparison between the two languages, as much as a comparison between the two approaches." Raystm2 02:52, 1 March 2007 (UTC)

[edit] Reason for RPN

> The rationale for postfix notation is that it is closer to the machine language the computer will eventually use, and should therefore be faster to execute.

Fast execution has nothing to do with this. IMHO, the real reason is that with RPN variables can remain nameless. There is thus an obvious space-saving advantage. 80.56.233.149 04:35, 6 April 2006 (UTC)

There are several advantages to RPN;
  • 1. As you say, no variables as they're on the stack. However, there's little to no space saved, as temporary named variables in C end up on the stack in an activation record anyhow, and intermediate temporaries may be optimised away entirely.
  • 2. It's easier and faster to compile (no operator precedence to worry about).
I believe this is the real reason. infix notation requires a parser and a grammar, which leads to operator precedence and operators looking different from function calls, which either reduces extensibility in the case where new functions can be added but not new operators (C) or complicates extensibility in the case of operator overloading (C++). The fact that forth words "do their own work" and don't use a parser enhances extensibility because you don't have to change the parser to add a new operator. Lisp also has no parser or grammar and gains similar power and extensibility from using prefix notation.
for the definitive answer we could always ask Chuck http://www.colorforth.com/ Ideogram 04:45, 27 May 2006 (UTC)
  • 3. Forth is a "zero address" language (operators don't have addresses), and the langage constructs better match the underlying architecture of stack based machines; so the resulting code is much more optimal than the equivalent C for such machines, hence faster to execute.
In general, I agree that the statement needs refined. What would you suggest? Alex 20:09, 6 April 2006 (UTC)

Re 1: When Forth began, no such optimization was possible and variable names would have cost a bulky and (ultimately) useless word header (additionally slowing down compilation). Hmmm, in the ol' days VARIABLEs would certainly have been *much* slower than a SWAP or an OVER. So you actually have a point (with respect to both compilation and execution speed) there.

Re 2: Here we come near the true reason (IMHO). I don't agree operator precedence is a problem for the compiler. A parser for integers (no strings, no floats, no nothing) is only a few lines. But keeping the precedence system / parser extensible with the user being free to add compiler words and CREATE DOES> tricks was surely impossible, given the constrained resources of early Forth compilers.

Re 3: I doubt very much Charles Moore designed Forth with real Forth hardware in mind. It's more likely that he wanted to eliminate a few, in his eyes, unnecessary compiler layers. Don't forget that optimization (in those days) meant multi-pass processing, disk files, and certainly no interactive debugging and inspection. In the compiler texts I know, they start with building an interpreter that executes stack code. The next step is a "simple" compiler for the stack code, and that is where incredible complexity begins. Once again, I must admit that the answer has to do something with speed. But not execution speed, compilation speed.

NB. Even on stack chips, the code executed is not *pure* Forth. So what 'language' does a C compiler for such a chip emit? IMHO, for any imaginable (solvable) problem one can write a pure Forth or pure C program, and, given enough perspiration, both language compilers will emit exactly the same machine (stack) instructions.

80.56.233.149 20:50, 7 April 2006 (UTC)

  • Re re 2; That's the beauty of Forth. In interpretation mode; if it's a number, stick it on the stack. If it's not, find and execute the word. In compilation mode; if it's a number, compile code to put the number on the stack at run time. If it's not, find and compile a "call" to the word. That's it; none of this messy bracketing, precedence, or operator parameter checking. As to CREATE DOES>, the word CREATE is a parsing word (it parses the input stream), as are : (colon), VARIABLE , CONSTANT etc. All these words generate a dictionary header entry. Btw, PostScript takes a different approach here.
  • Re re 3; right, Moore didn't have Forth chips in mind; the reason you give is correct. However (and answering your NB), Forth and stack machines are very, very intimately connected; words like DUP SWAP ROT OVER and most others that deal with the stack or control structures like IF/ELSE/THEN will normally have a single opcode parallel. The code is just about pure Forth. The perspiration is all C's; Forth doesn't even break a sweat generating code for this kind of architecture. On x86 and register based machines designed for C (take a look at the Intel manuals!) then Forth has a lot more to do; using stack opcodes as an intermediate representation is difficult to optimise. Alex 23:07, 7 April 2006 (UTC)

Re Re 2:That's the beauty of Forth.

I am not contradicting you! That feature of Forth (interactivity and extensibility) is essential and must be in anything that dares to call itself Forth. Apparently it is difficult to write a simple and compact implementation of an extensible infix interpreter/compiler.

Re Re 3:The code is just about pure Forth. The perspiration is all C's; Forth doesn't even break a sweat generating code for this kind of architecture. On x86 and register based machines designed for C (take a look at the Intel manuals!) then Forth has a lot more to do; using stack opcodes as an intermediate representation is difficult to optimise.

Everybody says this, I wonder where it comes from. It is very easy to compile stackcode on x86 (I am iForth's author, and also wrote pl0 and TinyKiss with various backends). The difficulty is when you start optimizing, and then the complexity for Forth and "something else" is comparable. Proof: how many good optimizers are there for Forth, and how long did it take them to get where they are now? An efficient stack chip will have a PICK primitive that will completely do away with user-written stack orderings (SWAP DUP ROT etc.) Another way to look at it is to ask yourself what useful *work* SWAP does... Nothing of course, so it can be optimized out.

—The preceding unsigned comment was added by 80.56.233.149 (talk • contribs) 08:12, 8 April 2006 (UTC2)

  • Well, hello Marcel! I'm the Alex McDonald that's maintaining Win32forth. Yes, stack code is easy to generate for an x86, but it's not terribly efficent. I've been trying to write a decent optimiser for w32f for some time now, and as a first step abandoned the itc in favour of stc. Now, I'm looking at a variety of techniques, and will probably settle on some variant of Anton's work for basic block optimisation. IMHO, there are very few good optimisers for Forth; but because the Forth implementor's desire to produce an specific architecture code generator is that much less given the adequate performance of DTC or simple inlining in STCs, and the loss of portability. Jeff Fox might disagree with your PICK opcode; he has on more than one occasion castigated on clf those that "dig into" the stack below the top two or three entries.
    Back to the original topic, now that I've taught my grandmother to suck eggs; how should the verifiable benefits of Forth be expressed?
    —The preceding unsigned comment was added by Alextangent (talkcontribs) 01:10, 9 April 2006 (UTC2)

Forth reasons for RPN:

  • 1 The parser is very simple and consistent. This is a concern when you are keeping your implementation small and simple, and porting it to every new piece of equipment you need to work on, as Chuck did.
  • 2 Functions are now operandless, and thus are easier to factor.
  • 3 As Chuck has said, postfix is a good fit for an imperative language, and fits the way Chuck thinks. Postfix code is executed in exactly the order it is written (with the exception of a few parsing words which parse-ahead for symbol and string data). No need to worry about operator precedence or the order in which you evaluate parameters to functions.

--IanOsgood 23:13, 10 July 2006 (UTC)

[edit] verifiable benefits of forth

I would say the widely agreed benefits of forth are the interactivity (fast edit/test/debug cycle) and the power, which is primarily due to the extensibility.

Ideogram 04:27, 27 May 2006 (UTC)

[edit] category .NET programming languages

How is Forth a .NET programming language? Ideogram 22:08, 29 May 2006 (UTC)

Never mind I saw the citation above. Ideogram 22:54, 29 May 2006 (UTC)

[edit] Image for infobox

The C article uses the cover of K&R for its infobox image. I was thinking the cover of Starting Forth (2nd ed.) might make a good image here. Can anyone produce a good image and upload it? My copy is looking a bit ragged. Ideogram 22:53, 29 May 2006 (UTC)

There's an image on amazon.com [1].

It's of the first edition, and not great, but it's better than nothing. Anyone know how we can get a copy to use here? Ideogram 23:00, 29 May 2006 (UTC)

  • Copyright problems; the book is still copyrighted by Leo Brodie. Don't know what copyright pertains to the cover. Alex 16:05, 30 May 2006 (UTC)
See the K&R book cover (click on it) for a fair use rationale. Ideogram 16:43, 30 May 2006 (UTC)
OK, if it's fair use; is Amazon the source? Alex 00:23, 1 June 2006 (UTC)

[edit] images

There's a request for more images. Anyone have any good ideas? Ideogram 23:02, 29 May 2006 (UTC)

  • Forth doesn't have any images; I can only suggest approaching Forth Inc and asking for a GFDL picture of Moore. Alex 15:55, 30 May 2006 (UTC)
There's a picture of Chuck on http://www.colorforth.com/ Ideogram 16:45, 30 May 2006 (UTC)
I was thinking we might have a use for stack diagrams, like the ones in Starting Forth (but without the cartoon characters). Ideogram 00:11, 3 June 2006 (UTC)
I have added these. Unfortunately the images overlie the blockquote box, and I don't know how to fix this. Ideogram 03:56, 4 June 2006 (UTC)
Personally, I think stack pictures would be better put on the RPN page, which already does a good job of explaining the stack concepts. Do many of the other programming language pages have lots of images? I wouldn't think so. --IanOsgood 23:37, 10 July 2006 (UTC)

[edit] references

The books from Books. tutorials, and classes should be moved to the References section. They also need ISBN numbers. There's also an article citation under History of Forth. Ideogram 03:21, 30 May 2006 (UTC)

[edit] Infobox reference to LISP and ALGOL

Ideogram; there's a reference to LISP and ALGOL as influences on Forth. AFAIK, Moore never programmed in either LISP or ALGOL, and I can't see any features of ALGOL in Forth at all. If anything, it may have been influenced by Moore's bad experience with other programming languages. I'll ask on comp.lang.forth and see if Elizabeth Rather (the world's second Forth programmer, and author of some of this entry) can help out.

Plus, the major implementations; this is one of these areas where you'll get a whole bunch of people up in arms! Alex 16:02, 30 May 2006 (UTC)

I do seem to recall a mention of Lisp as an influence (Algol I'm not so sure about). I'll try to dig up a reference.
As for major implementations, Forth Inc. should be uncontroversial. We can discuss the others. Ideogram 16:47, 30 May 2006 (UTC)
I was wrong about Lisp and APL; Moore took a programing course under McCarthy, and explicitly refers to APL in his website. APL added back in Alex 11:32, 4 June 2006 (UTC)
Moore also programmed in Algol (and many, many, other languages of that time, including COBOL), see his website again. However, I think mentioning Lisp and APL as influential for Forth is enough.Mhx 14:47, 4 June 2006 (UTC)
Moore also borrowed from FORTRAN (DO-LOOP) and assembly languages (DUP, DROP, SWAP). Ref: his HOPL II draft. --IanOsgood 23:41, 10 July 2006 (UTC)
True, but he himself does not acknowledge anything but Lisp and ALGOL (see his letter below). Do you still want to stick to the B5500 reference? Mhx 08:43, 16 July 2006 (UTC)

[edit] Moore

I am planning on sending email to Moore asking for permission to use his photo and about why he chose RPN. Any other questions I should ask? And does he have a PhD, should I address him as Mr. Moore or Dr. Moore? Ideogram 20:28, 31 May 2006 (UTC)

copyright lies with the photographer and the subject; we'd need both iirc. Title? Dunno; Dr sounds suitably polite. Alex 00:22, 1 June 2006 (UTC)

The email address chipchuck@colorforth.com fails, but I did a whois on colorforth.com and got an email address from the registration information. Let's just hope it's not so choked with spam he abandoned it.

Here is the email I sent:

Dear Dr. Moore:

I am working on the Wikipedia article on Forth. We would like to ask you some questions. What would you say are the advantages of RPN that led you to use it? What other languages influenced you when developing Forth? Finally, we would like to use a picture of you for the article, perhaps the one you currently have on colorforth.com. We would need your permission and that of the photographer.

If you are interested, you can see the article at

http://en.wikipedia.org/wiki/Forth

We would certainly love to have your help in improving it. You can easily edit the article directly without our intervention.

Thank you for your time,

Adam Kao

Dammit it failed too. The phone number listed is disconnected. How is your attempt to contact Elizabeth Rather going? Ideogram 00:27, 3 June 2006 (UTC)
I found the company Moore is working at right now and sent them the email and asked them to forward it to him. It looks like we will also have material to update Charles H. Moore. Ideogram 00:40, 3 June 2006 (UTC)
Moore can be contacted through Jeff Fox ( fo x @ ultr a technology dot com ) Alex 11:29, 4 June 2006 (UTC)

I have received a reply from Chuck. Here it is:

Happy to answer questions. Haven't time for a critical review of article.
I chose to use RPN for 2 reasons:
It seemed to naturally translate many English expressions, ie. 6 feet. I wanted a more natural programming language, though not so verbose as COBOL.
It was easy to implement. Infix notation is not difficult, but is always translated into postfix. I could save the translation step and give the programmer direct access to the stack.
I knew all the languages of the late 60's. The most interesting were LISP and APL. I couldn't abide the parentheses caused by LISP's use of prefix notation. Nor its representation of everything as binary trees. APL's right-left parsing seemed contrived. And I disagreed with its choice of basic operations.
You may certainly use that photograph. Either my wife or myself was probably the photographer.

I'm not sure exactly how to work this material into the article. Ideogram 03:04, 12 June 2006 (UTC)

  • Excellent! Perhaps a section Moore on Forth or somesuch? Lightly editted reply to indent btw Alex 10:24, 12 June 2006 (UTC)

[edit] Size

65.12.192.254 edited the main text as follows:

> Compiled Forth has the unique property of actually being smaller in size than hand optimized assembler.

As it stands, this makes no sense and will be seen as unsubstantiated propaganda. What are the compared programs trying to accomplish? Are they optimizing for size, for speed, for power consumption? For instance, it is quite easy to make program A smaller than program B when A is allowed to be slower.Mhx 21:02, 8 June 2006 (UTC)

I don't like the text either. At a minimum it needs to be referenced. Ideogram 21:36, 8 June 2006 (UTC)
It's unsubstantiatable (wow, what a word!) and doesn't actually make sense at all. Reverting Alex 21:42, 8 June 2006 (UTC)
The article on threaded code describes how any given sequence of subroutines (such as the main loop of a typical program) is smaller in size when implemented in threaded code (such as a typical compiled Forth program) than in typical hand-written assembler (as a series of subroutine calls). Please tell me if the threaded code article also "makes no sense", and give me some clues as to how to patch it up. -- DavidCary --70.189.73.224 11:52, 21 June 2006 (UTC)
"hand optimized assembler" is not the same thing as "typical hand-written assember". It's pretty clear that assembler hand optimized for space can do anything a Forth compiler can do. Ideogram 14:20, 21 June 2006 (UTC)

[edit] footnotes, citations, references

we need these. Does anyone have a citation for the Byte special issue on Forth? Ideogram 06:24, 9 June 2006 (UTC)

Mhx you are awesome!!! Those citations were the biggest thing still missing!!! Ideogram 20:14, 19 June 2006 (UTC)

The remaining citation on multiprogramming can come from Brodie's Starting Forth (find appropriate chapter and verse). The citation on Forth programming can come from the online gForth manual. I have no time to look this up now, sorry. Mhx 04:53, 20 June 2006 (UTC)

I'll look into it. Ideogram 12:43, 20 June 2006 (UTC)
I read through the top node of the online gForth manual and couldn't find anything appropriate. I think I still need your help on this. Ideogram 13:47, 20 June 2006 (UTC)
I guessed at an applicable citation, I'm not sure it qualifies though, since I'm not sure gForth is really a "professional Forth system". Ideogram 13:57, 20 June 2006 (UTC)

[edit] reduce external links

The Featured Article Candidate commentators have recommended we reduce the number of external links (see that page for details). I expect the decisions on what to keep and what to cut will be controversial, especially for the implementations links which they recommend we cut "drastically." Help! Ideogram 21:28, 13 June 2006 (UTC)

How about finding (or making) a link which links to all the sites. Then we only need one external link. Ideally, all relevant content should be in the article anyway. Stephen B Streater 22:03, 13 June 2006 (UTC)
I think their point is that Google already provides that service. Ideogram 22:10, 13 June 2006 (UTC)
Except that a search on Forth gets you lots and lots of hits that have not a great deal to do with Forth the language, but Forth the river. This has been an issue for most Forth advocates for a long time; it's difficult stuff to find. Alex 08:35, 14 June 2006 (UTC)
Try it, it works surprisingly well. Mhx 20:36, 14 June 2006 (UTC)
You can bring up your point with the commentator, if you like. Ideogram 06:09, 15 June 2006 (UTC)
I'm coming in way late to this discussion. IIRC, one of the guidelines mentions the possibilibity of linking to the dmoz.org category to cover a broad spectrum of external links. In this case, it also works surprisingly well. – 2*6 09:11, 18 January 2007 (UTC)

[edit] TO DOs

Mostly as a reminder to myself, here is a list of topics that could be covered by the article. However, most of this is probably too specific for an encyclopedia. I think the article already says most of what would be of interest to a casual reader.

  • typical length of Forth words, general layout of Forth code, stack comments, shadow screens, more on blocks?
  • vocabularies, wordlists (MARKER, FORGET)
  • cells and standard data types (doubles etc.)
  • memory allocation and cell alignment (HERE, comma, ALLOT, ALIGN, ALIGNED, PAD, ALLOCATE, FREE)
  • use of the return stack to reduce "stack gymnastics", interaction of looping constructs with the return stack, locals
  • explain naming conventions, explain bracketing convention for pairs of immediate and non-immediate words ('/['], CHAR/[CHAR], IF/[IF])
  • case (in-)sensitivity during parsing; some (older) Forths store word names as the leading (five?) characters plus the name length.
The first Forths stored three. Ideogram 15:59, 20 June 2006 (UTC)
  • definition words like CREATE/DOES>
This is a pretty important feature of Forth but difficult to explain. Ideogram 15:59, 20 June 2006 (UTC)
  • object-orientated extensions of Forth (mention object-method vs. method-object debate)
  • [IF], [THEN], [ELSE])
  • code examples

Tobias Bergemann 15:38, 20 June 2006 (UTC)

I think this article is already up to FA standards since the primary objection about not enough citations has been addressed. But by all means feel free to improve it further. If you can explain these concepts to a nontechnical reader it can only help. Ideogram 15:59, 20 June 2006 (UTC)

[edit] GA

I don't know about the FA but it is GA status as of now. Lincher 04:01, 23 June 2006 (UTC)

Good job everyone. Now on to Featured Article! Ideogram 04:22, 23 June 2006 (UTC)

[edit] Online interpreters

This section mentions two 'Forths' that break at the slightest typing error (unrecoverable), and in no way represent modern Forth. I say they are curiosities that should be deleted? Mhx 19:32, 12 July 2006 (UTC)

Sounds good to me. --Ideogram 01:20, 13 July 2006 (UTC)

[edit] Influences: sources

Influenced by B5500 - Chuck's HOPL II draft (The Early Years) Influenced Open Firmware - claimed on page (obvious) Influenced Factor programming language - claimed prominently on the author's web page.

On second look, it appears PostScript was also influenced by the B5500, via InterPress and John Gaffney. See the link at the bottom of the InterPress page. --IanOsgood 01:00, 14 July 2006 (UTC)

The following discussion is an archived debate of the proposal. Please do not modify it. Subsequent comments should be made in a new section on the talk page. No further edits should be made to this section.

The result of the debate was PAGE MOVED per discussion below. Even got the target right on the second try. -GTBacchus(talk) 07:07, 1 December 2006 (UTC)

[edit] Requested move

ForthForth programming language — Additionally move Forth (disambiguation) to Forth. Forth is ambiguous and until 1 April 2006 was a disambiguation page. This merely reverts the earlier move. Angus McLellan (Talk) 15:36, 24 November 2006 (UTC)

[edit] Survey

Add * '''Support''' or * '''Oppose''' on a new line followed by a brief explanation, then sign your opinion using ~~~~.
  • Support because (a) the river and firth, in particular, are very significant and it makes sense for those articles to have equal status with the programming language article; and (b) because "Forth" isn't a unanimously accepted spelling for the programming language anyway — it can be argued to be "FORTH" in capitals. Best to offset the controversy by having it at "Forth (programming language)". – Kieran T (talk | contribs) 15:50, 24 November 2006 (UTC)
  • Support - per Kierant Astrotrain 15:58, 24 November 2006 (UTC)
  • Support as a fan of both the firth and the programming language, I feel that a disambiguation page is the right solution. -- Derek Ross | Talk 07:23, 25 November 2006 (UTC)
  • Support, no clear primary topic so Forth should be dabpage. Thanks/wangi 17:41, 26 November 2006 (UTC)
  • Support, the programming language is not the first thing to spring to mind.--MacRusgail 18:50, 26 November 2006 (UTC)
  • Support - as above -- Beardo 06:09, 27 November 2006 (UTC)
  • Support as per MacRusgail FiggyBee 07:28, 27 November 2006 (UTC)
  • Support per all of above Patstuart(talk)(contribs) 01:25, 28 November 2006 (UTC)
  • Support --Stemonitis 17:11, 28 November 2006 (UTC)

[edit] Discussion

Add any additional comments:

As Kieran said, it should be Forth (programming language), not Forth programming language. --Piet Delport 22:54, 24 November 2006 (UTC)

Nothing to stop the administrator who closes this taking note of the preferred move target, just so long as debate concerning that doesn't prevent this being moved to Forth (programming language) or Forth programming language, whichever is preferred. Angus McLellan (Talk) 20:05, 27 November 2006 (UTC)
The above discussion is preserved as an archive of the debate. Please do not modify it. Subsequent comments should be made in a new section on this talk page. No further edits should be made to this section.

[edit] Early Forth history

Is there a reason the article doesn't mention early Forth history? I mean the "pre-standard" era when FIG Forth and Forth Inc. were King and Queen? Isn't it curious that the article has many links to the FIG Forth site, but FIG doesn't even merit a direct mention? Also, I have several old Forth books, including Starting Forth, Thinking Forth, and Byte's Threaded Interpretive Languages. Have I just missed something, or is this info not considered important? – 2*6 05:22, 18 January 2007 (UTC)

As far as I can see, the only reason that the article doesn't talk much about early Forth history is that no editor felt knowledgable enough to add this information. It would certainly be a most valuable and important addition to the article, IMHO. —Tobias Bergemann 07:55, 18 January 2007 (UTC)
I found an excellent place to start -- The Evolution of Forth at the Forth, Inc. site. The problem is going to be condensing that information as well as having other sources so as not to be simply a synopsis of what they already did. Ack, I just checked; the article already provides a link in its History subsection of External links. Hmm, would a bulleted list of key events would fit well within the article's structure? I'm envisioning a new History section of the article which would include the bulleted list as well as include specific mention (and link) to the Evolution piece. Hesitant to just do it on an article which has received such scrutiny. – 2*6 20:55, 18 January 2007 (UTC)
Be bold! Don't be afraid to start, even with just one source (it is a very good source, nearly authoritative). Another source would be History of Programming Languages II. --IanOsgood 15:49, 21 January 2007 (UTC)