From: ir230@sdcc3.ucsd.edu (john wavrik)
Newsgroups: comp.lang.forth
Subject: Re: Forth Taught at Schools/Universities
Date: 12 Apr 92 01:03:28 GMT



Elizabeth Rather writes:

> RE "widespread ... implementations of 83-Forth":  Watch out.  Neither F83 
> nor F-PC are FORTH-83 compliant.  In fact, X3J14 did a very comprehensive 
> study and found *no* widely used system that was strictly compliant.  Not to 
> say they aren't both perfectly usable systems -- maybe even more usable 
> because of the way they violated FORTH-83.  This is part of the problem 
> we're trying to correct with ANS Forth. 

   It would be interesting to know what these violations are. The 
impression being given here is that the 83-Standard was widely 
disregarded. I am attaching the Forth-83 Standard Wordset (the 
grouping is for my courses, not part of the Standard). Which of these 
words does the ANSI Team feel was improperly implemented in Laxen and 
Perry's F83?  [I've used F83 in my courses for several years with the 
textbooks that are usually recommended and with the Forth-83 document 
as a reference. I don't recall any discrepencies -- other than a bug 
in UM/MOD.]

   A peculiarity of the 83-Standard is the requirement that Forth 
must use 16-bit cells. It has been reported in this newsgroup that 
the ANSI team regards as evidence of "disregard of the 83-Standard" 
systems which use 32-bit cells but are otherwise in compliance. What 
systems are in this category? (Both F83 and F-PC use a 16-bit stack -- 
so they are not the examples).
 
                                        John J Wavrik 
   jjwavrik@ucsd.edu                    Dept of Math  0112 
                                        Univ of Calif - San Diego 
                                        La Jolla, CA  92093-0112 

   

                              APPENDIX A                 
                    * The Forth-83 Standard Wordset *

                            * ARITHMETIC *
1+              1-              2+              2-
2/              ABS             AND             BASE
CONVERT         DECIMAL         DNEGATE         D+
MAX             MIN             MOD             NEGATE
NOT             OR              UM*             UM/MOD
XOR             *               */              */MOD
+               -               /               /MOD

                              * BLOCKS *
BLK             BLOCK           BUFFER          FLUSH
LOAD            SAVE-BUFFERS    UPDATE


                              * CONTROL *
BEGIN           DO              ELSE            I
IF              J               LEAVE           LOOP
REPEAT          THEN            UNTIL           WHILE
+LOOP

                                 * I/O *
CR              EMIT            EXPECT          HOLD
KEY             SIGN            SPACE           SPACES
SPAN            TIB             TYPE            U.
WORD            #               #S              #TIB
#>              .               ."              .(
<#              >IN

                               * MEMORY *
ALLOT           CMOVE           CMOVE>          COUNT
C!              C@              FILL            HERE
PAD             !               +!              @


                                * MISC *
ABORT           ABORT"          COMPILE         CONSTANT
CREATE          DEFINITIONS     DOES>           EXECUTE
EXIT            FIND            FORGET          FORTH
FORTH-83        IMMEDIATE       LITERAL         QUIT
STATE           VARIABLE        VOCABULARY      '
(               ,               -TRAILING       :
;               >BODY           [               [COMPILE]
[']             ]


                                * STACK *
DEPTH           DROP            DUP             OVER
PICK            ROLL            ROT             R>
R@              SWAP            >R              ?DUP

                                * TEST *
0<              0=              0>              D<
U<              <               =               >

                            * DOUBLE NUMBER *
2!              2@              2DROP           2DUP
2OVER           2ROT            2SWAP           D+
D-              D0=             D2/             D<
D=              DABS            DMAX            DMIN
DNEGATE         DU<             D.              D.R
2CONSTANT       2VARIABLE