[comp.lang.forth] ANS FOrth

wmb@MITCH.ENG.SUN.COM (Mitch Bradley) (06/02/90)

> John Wavrik writes ...
> If Forth retains is main asset, the ability of users to add major
> features to the language, the dispute between "minimalists" and
> "kitchen sinkists" disappears.

I disagree.  As a "kitchen sinkist", I believe that many people choose
not to use Forth because it is lacking so much.  Certainly it is *possible*
to "roll your own" major features, but who has the time, either to write
the feature packages or even to dig around on bulletin boards in hopes of
finding quality public domain implementations of the needed packages?

Important extension packages MUST be standardized at the "official" level.
If not:
	a) Most people won't know of their existence
	b) There will be broad and fundamental differences between
	   implementations of packages purporting to do the same thing
	c) Extension packages will not be supported, or else each
	   vendor will do something different.

File system interfaces are a case in point.  It became clear to me in 1982
that Forth desperately needed a portable file system interface package,
similar to C's "standard I/O".  So, I wrote one in a very portable fashion,
published the spec and the implementation in the FORML proceedings, placed
the code in the public domain, and proceeded to announce its existence at
every Forth meeting and convention that I attended for the next n years.
(This was before the popularity of networks; even so, what percentage of
Forth users read one of these networks?  I bet it's a small percentage)

	Do most people know about it?
		No.
	Have other incompatible file interface packages been "reinvented"?
		Yes.
	Do most vendors now supply file interface packages?
		Yes.
	Are those vendor-supplied packages compatible with one another?
		No.

Consequently, in any real sense it is currently not feasible to write a
standard Forth program that accesses files.  That is why, when somebody
recently asked for a program to convert Forth screens into text files,
all of the responses (except my own) were WRITTEN IN C.

Claiming the *possibility* of user extensions ISN'T GOOD ENOUGH.

The good news is that ANS Forth DOES standardize a number of much needed
extensions, including files, floating point, memory allocation, strings,
local variables, extended memory access, run-time search order control,
and error handling.

ANS Forth will make the situation a lot better, if it is not already too
late.

Mitch Bradley

dwp@willett.UUCP (Doug Philips) (06/04/90)

In <9006011903.AA03706@ucbvax.Berkeley.EDU>, wmb@MITCH.ENG.SUN.COM (Mitch Bradley) writes:

> Claiming the *possibility* of user extensions ISN'T GOOD ENOUGH.
> 
> The good news is that ANS Forth DOES standardize a number of much needed
> extensions, including files, floating point, memory allocation, strings,
> local variables, extended memory access, run-time search order control,
> and error handling.
> 
> ANS Forth will make the situation a lot better, if it is not already too
> late.

Actually it seems to be as if you and Mr.  Wavrik are not really in
disagreement.  There is nothing about a clean "core" system that would
prevent ANSI from declaring various "extensions".  X3J11 (the 'C' effort)
did something along those lines by declaring various name spaces.
Identifers were "allocated" to various groups (users and implementers) on
the basis of their leading characters.  The only anomaly in this was the
preexisting libraries.  They used identifiers which would otherwise be left
to the users.  Additionaly X3J11 specified various behaviours that the
compiler 'could do' and but which the user must not assume any knowledge
of, when composing conforming code.  Forth may be just too much of an
anarchy for an approach like that to work, though.

-Doug

---
Preferred: willett!dwp@hobbes.cert.sei.cmu.edu OR ...!sei!willett!dwp
Daily: ...!{uunet,nfsun}!willett!dwp   [in a pinch: dwp@vega.fac.cs.cmu.edu]

wmb@MITCH.ENG.SUN.COM (Mitch Bradley) (06/05/90)

> >       So, "NOT" is no longer a standard word (and in actual fact,
> > "NOT" has not been portable since 1983).
>
> This is not the case. The Forth-83 Standard was quite specific. ...
> There is no ambiguity on this point -- all standard systems behaved
> in the same way.

Oops, I should have made my point more explicitly.  It is true that
the Forth-83 Standard is explicit about how NOT behaves, however

	!!! Several important vendors, representing a significant
	fraction of all Forth systems, DID NOT IMPLEMENT FORTH 83
	AND STILL HAVE NOT DONE SO.

So, NOT has been quite portable among Forth-83 systems, but not across
the board.  I still see a lot of code published for FIG-Forth, MVP-Forth,
MMS-Forth, and Mac Forth, and that code is probably closer to Forth-79
than to Forth-83.

The ANS committee apparently wishes to avoid that splintering effect
this time around, and thus has bent over backwards to accomodate factions
with strongly-held opinions, such as how divide works and what NOT does.
We may hope (perhaps over-optimistically) that conversion to ANS Forth
will be more-or-less universal in the medium term.


> the code will not run -- IT IS BROKEN.  Moreover, it is broken in a
> serious way -- it can only be fixed by rewriting code.

This conclusion is incorrect, because the assumption stated in the
following paragraph is incorrect.


> The original code used NOT (as was the Forth-83 Team's intent) to
> function in both a boolean and bitwise sense. For this to be possible on
> the new system, standard words leaving a true flag would have to leave a
> number with all bits set. I would assume that those dissenting members
> of the ANSI team object to this stipulation (since most Forth-79 and
> FIG-Forth used 1 for true).

ANS Forth "true" flags DO have all the bits set.  I am not aware of any
controversy on this issue.  Perhaps it died out before I joined the
committee, but there has been no evidence of any lately.

I reiterate:   : NOT INVERT ;   added to the start of the application
does the right thing for a Forth-83 program.


> Current code *will* be broken by the proposed Standard.

Undoubtedly, but not by NOT .


Mitch Bradley

wmb@MITCH.ENG.SUN.COM (Mitch Bradley) (06/06/90)

> By making multi-line comments part of the standard, you prevent the use of
> a simple get-a-line-and-feed-it-to-interpret style of file loader.

Not true.  The file loader semantics IS specified as "get-a-line-and-feed-
it-to-interpret".  "(" is responsible for refilling the input buffer as
needed until the closing ")" is encountered.  That is why the QUERY function
(which refills the input buffer) has been extended to apply to text files
in addition to the keyboard.

> If you can't get the semantics of divide right

The semantics of divide, in all its flavors, ARE right.  It is just the
spelling that is in question.


> What's wrong with:
>
>       foo()
>       {
>               jmp_buf bar;
>               ...
>       }

It is useless because the name scope of "bar" is the definition "foo",
so any setjmp()/longjmp() pair using "bar" would have to be entirely
contained inside "foo".  It is nearly always the case that setjmp() and
longjmp() are called from different procedures.  There is little reason
to use a setjmp()/longjmp() pair inside a single procedure, because
other control structures like "while" or "goto" work better within a
procedure.

Mitch Bradley

dwp@willett.UUCP (Doug Philips) (06/10/90)

In <9006051307.AA07733@ucbvax.Berkeley.EDU>, wmb@MITCH.ENG.SUN.COM (Mitch Bradley) writes:

> Oops, I should have made my point more explicitly.  It is true that
> the Forth-83 Standard is explicit about how NOT behaves, however
> 
> 	!!! Several important vendors, representing a significant
> 	fraction of all Forth systems, DID NOT IMPLEMENT FORTH 83
> 	AND STILL HAVE NOT DONE SO.
> 
> So, NOT has been quite portable among Forth-83 systems, but not across
> the board.  I still see a lot of code published for FIG-Forth, MVP-Forth,
> MMS-Forth, and Mac Forth, and that code is probably closer to Forth-79
> than to Forth-83.

This seems obvious!  After all, if everyone had been using Forth-83, would
there have been a need for a new standard?  (Or would it just have gone
much more smoothly and therefore have been over already?)

Did the TC actually try to get statistics on what Forth systems are out
there, and how many?  Did the TC just rely on the vendors to blow their
own horns?  How many members of the TC are not associated with Forth
Vendors, or are not FIG officials?

-Doug

---
Preferred: willett!dwp@hobbes.cert.sei.cmu.edu OR ...!sei!willett!dwp
Daily: ...!{uunet,nfsun}!willett!dwp   [in a pinch: dwp@vega.fac.cs.cmu.edu]

dwp@willett.UUCP (Doug Philips) (06/10/90)

In <9006051819.AA27558@ucbvax.Berkeley.EDU>, wmb@MITCH.ENG.SUN.COM (Mitch Bradley) writes:

[Is the '> > ' Peter da Silva? -dwp]

> > What's wrong with:
> >
> >       foo()
> >       {
> >               jmp_buf bar;
> >               ...
> >       }
> 
> It is useless because the name scope of "bar" is the definition "foo",
> so any setjmp()/longjmp() pair using "bar" would have to be entirely
> contained inside "foo".  It is nearly always the case that setjmp() and
> longjmp() are called from different procedures.  There is little reason
> to use a setjmp()/longjmp() pair inside a single procedure, because
> other control structures like "while" or "goto" work better within a
> procedure.

True, the identifier "bar" is only in scope for the definition of foo.
That doesn't prevent foo from passing the address ('&bar' or 'bar' depending
on how 'bar' is defined (structure or array)) of bar to a another function.
(personally I find a "malloc"ed array of jmp_buf's treated as a stack
of recovery points more useful than the potential uses of "foo", but that's
just me.)

-Doug


---
Preferred: willett!dwp@hobbes.cert.sei.cmu.edu OR ...!sei!willett!dwp
Daily: ...!{uunet,nfsun}!willett!dwp   [in a pinch: dwp@vega.fac.cs.cmu.edu]

aph@compulink.co.uk (Andrew Haley) (08/14/90)

The following is a proposal I intend to send to the ANS
Forth Technical Committee in a few days time.  Anyone who
wishes to comment on this, please do so soon; it might save
me some embarrassment!  I will post a message detailing the
reply I get after I send this.
 
 
 
                                   Andrew Haley
                                   Software Manager
                                   Computer Solutions Ltd.
                                   Canada Road
                                   Byfleet
                                   Surrey KT13 8HT
                                   England
                                   13th Aug 1990
 
ANS ASC X3/X3J14 Forth Technical Committee
111 N. Sepulveda Boulevard
Manhattan Beach
California 90266
 
The following are proposals for the Technical Committee;
please note that all comments below refer to BASIS 12.
 
1.   The word PAUSE should be defined as doing nothing
(i.e., having no execution semantics) but having
multiprogramming impact.
 
2.   In systems that implement CATCH and THROW, there should
be no words predefined in the system which QUIT; all
exceptions should be raised by THROW.  This way, a portable
application can be written in such a way that a user will
NEVER be dumped into the Forth interpreter.
 
3.   The definition of WITHIN is incorrect in that it
assumes a particular overflow behaviour for - (minus) which
is not specified by the standard.
 
4.   The word " (quote) should be removed from the non-
portable word set (p119).
 
5.   The definition of floating-point numbers as rationals
is unnecessarily confusing.  It would be more helpful to
define floating-point numbers as an implementation-defined
subset of reals.
 
6.   It is not specified whether the word EVALUATE is "state
smart".  If EVALUATE is executed by a word (presumably
defined as IMMEDIATE) whilst the system is compiling, does
it compile execution tokens into the dictionary or execute
words?  If EVALUATE is not "state smart", there seems to be
no way to specify the compilation behaviour.
 
7.   There seems to be no way to use ?DO with a negative
step in +LOOP so that the loop executes just once.  I don't
think that with the existing FORTH-83 loop structure there
is anything that can be done about this, but this somewhat
odd behaviour should be documented somewhere, perhaps in
?DO.
 
8.   There are many Forth systems which compile for a small
target computer which does not, itself, have a dictionary,
(or an interpreter) but relies on another computer to
compile for it.  Some of these (such as chipFORTH) have full
support for interaction.  These are an important (and
increasing) part of the market for Forth systems.  It would
be unwise to exclude them from the standardisation process.
 
I propose that there should be a recognised "Run Time
Subset" of ANS Forth for such systems.  This should specify
a MINIMUM set of core words for these systems.
 
The subset I propose is:
 
!       (       *       */      */      */MOD   +       +!  
+LOOP   -       /       /MOD    0<      0=      0>      1+  
1-      2!      2*      2/      2>R     2@      2DROP   2DUP
2OVER   2R>     2SWAP   <       =       >       >R      ?DUP
@       ABS     ALIGNED AND     BEGIN   C!      C@      CELL
+       CELLS   CHAR    CHAR+   CHARS   D+      D<          
DEPTH   DNEGATE DO      DROP    DUP     ELSE    EXECUTE EXIT
FILL    HERE    HOLD    I       IF      INVERT  J           
LEAVE   LITERAL LOOP    MAX     MIN     MOD     MOVE        
NEGATE  OR      OVER    R>      R@      RECURSE REPEAT  ROT 
S>D     SWAP    THEN    U<      UM*     UM/MOD  UNLOOP      
UNTIL   WHILE   XOR     [       [']     [CHAR]  ]
 
In addition, the following words may be used, but only
outside a definition, i.e. they may not be used between :
and ;
 
'       ,       :       ;       ALIGN   ALLOT   C,          
CONSTANT        CREATE  VARIABLE
 
Clearly this subset lacks some of the power of Forth, but it
specifies a means of partial compliance for these important
systems which have no way to comply fully with the standard.
 
It is unlikely that any application program written for such
a microcontroller-like system will be fully portable,
because of I/O hardware dependencies.  However, this subset
defines a minimum subset which a Forth vendor must supply.
 
Unfortunately, there seems to be no portable way to allow
compiling and defining words.  Despite this fact, it is
better to have the minimum commonality which this list
represents than none at all.
 
9.   PICK should be moved from the CORE to the EXT CORE word
set.
 
10.  [ has been lost from the left hand column on page 110.

wmb@MITCH.ENG.SUN.COM (08/21/90)

> I believe it is through this method that they are able to  determine that
> the Forth-83 standard was NOT a success as it is NOT  used by almost all
> the customers of the vendors, and therefore the current committee cannot
> merely update the Forth-83 standard with minor changes. ...
> Without this countability it would  be much more difficult to determine
> that Forth-83 was so terribly  unacceptable to so many people.

> ... this method of counting  excludes
> the few users of L&P's F83 (and the few users of its few  derivatives such as
> F83X, Y, etc & F-PC), some of which probably DO  find the Forth-83 standard
> acceptable.  Surely, and the sample made up  from the vendors' to represent
> all of them.

a) F83 and F-PC users are not ignored.  Far from it.

b) 3 very respected Forth vendors (Creative Solutions (MacForth), MVP,
   and Miller Microcomputer Systems) are still using Forth 79.  Together
   they represent a significant Forth user community.

Neither side is being ignored.  Where the committee has "picked one side
in favor of the other side", it has always chosen in favor of Forth 83.
In other cases, the committee has tried to accommodate both groups.


> Of course, in the previous paragragh I'm not being entirely  serious, or fair.

The ANS Forth committee does not have the luxury of not being fair.


Mitch

wmb@MITCH.ENG.SUN.COM (Mitch Bradley) (08/26/90)

> It was natural to ask if some agreement was reached on a mechanism for
> vectored execution.  The answer is no.

The answer is that there is a simple, portable, reasonably efficient way
of implementing vectored execution in terms of ANS Forth words.

Many people claim that is sufficient rationale for not adding additional
words to the standard.  Those people who are interested in a small
standard use this argument frequently.

If you couldn't reasonably define vectored execution in terms of the
standard, then that would be a strong argument for adding the capability.

But you can.


>           BEGIN     BL WORD DUP COUNT  " )IF"  $=  <>
>           WHILE     COUNT EVALUATE        POSTPONE IF
> ..
> This is to be used in the form IF( c1 e1 ... ck ek )IF

> IF( is IMMEDIATE, so it is now executing. ... EVALUATE
> should now evaluate this string -- i.e. execute the condition c1 --
> rather than compile it into the dictionary.

It is executing *in compile state*, so EVALUATE will compile it into
the dictionary rather than execute it.

In fact, Basis 12 tweaked the description of EVALUATE in an attempt
to make it clear that EVALUATE does not change STATE .  Whether it
succeeded or not is anybody's guess, considering the difficulty of
writing unambiguous English and the propensity for humans to apply
their own preconceptions and world model to what they are reading.

Dennis Ruffer's POSTPONE solution works too.  So the answer to
question 3 is definitely "can do".

>     ARE GLOSSARY DESCRIPTIONS SUFFICIENTLY CLEAR AND UNAMB-
>     IGUOUS?  Would two people who implement a word based on
>     the glossary description produce words that execute in the
>     same way under all conditions?

Who is to say?  The only way to be 100% sure is for a lot of people
to implement it.  We will know when we know.

The committee is extremely concerned about this, as evidenced by the
large proportion of proposals concerned solely with the clarity of the
wording of Basis.

If anybody has problems with particular wording, they are encourage to
submit specific proposals suggesting improved wording.  I assure you
that such proposals are acted-upon with high priority, and have a high
probability of passing.

Taken literally, the answer to this question is certainly no, considering
the high probability that someone will simply screw up (otherwise software
wouldn't have bugs!).

Mitch

wmb@MITCH.ENG.SUN.COM (09/07/90)

> We've established that most users will need to do considerable
> rewriting to have existing code comply with the proposed ANSI
> Standard.

Have we indeed established this?  We have seen some examples of
code that is not compilant, but we have not established the extent
to which such code exists in the applications of "most users".


> And we've established that tools that they have used in the past will
> not be available -- so it is just a matter of learning about what newer
> and better tools the ANSI team has provided.

Have we indeed established this?  Forth system vendors will continue to
provide at least the same level of tools that they currently provide
(trust the marketplace to ensure this), and users will still be able to
create implementation-dependent tools as they do now.


>     "You used to create control structures, in-line data handlers,
>     etc. by storing addresses in the dictionary, using your access to
>     the IP, etc. -- now, under the proposed ANSI Standard, you will
>     be able to accomplish the same things in the following way:

You used to create (etc. etc.) using your *implementation dependent*
access to the IP, etc.  ANS Forth won't make these techniques portable,
but neither did it create the existing portability problem.

Like it or not, these techniques have never been portable except among
selected subsets of Forth systems.  Even in the halcyon days of FIG Forth,
there were other Forth implementations that did things differently.

Mitch Bradley, wmb@Eng.Sun.COM

wmb@MITCH.ENG.SUN.COM (09/07/90)

> >> ARE USERS ALLOWED TO ASK QUESTIONS YET?
> >
> > Of course John! ....
>
> I was reacting to the fact that a reply to my questions about how
> (or whether) things could be done was titled "ANS BASHING".

The "ANS Bashing" title did not appear on a reply to your questions.
Your questions were answered calmly, respectfully, and thoughtfully.

The "ANS Bashing" title was applied to your flat denial of all points
of the reply, in which you attempted to use the answers to your questions
as "proof" that the standard is seriously flawed, and claimed (incorrectly)
that one of the solutions presented does not work.  This claim was not
posed as a request for clarification, but as a statement.

Mitch Bradley, wmb@Eng.Sun.COM

wmb@MITCH.ENG.SUN.COM (10/19/90)

>> The point I was making is that even when all previous
>> implementations _agreed_, the ANSI team has changed things.
> Offhand?  How about WORDLIST for VOCABULARY, and ADDITIONS for DEFINITIONS?
> (I realize that search orders vary from implementation to implementation, but
> the acts of declaring and invoking a vocabulary are remarkably constant across
> Forth standards.)

Turns out not to be the case.  Creative Solutions implements VOCABULARY with
a numerical argument on the stack.  Not only that, but also the question of
whether new vocabularies "chain to Forth" or "chain to their parent" or are
independent.  That is why VOCABULARY was changed to WORDLIST.  As I recall,
there was some problem about DEFINITIONS too, but I don't remember the details.

I can't think of ANY example where something has changed when all previous
implementations agreed.


> I would argue that CHAR is an example, although I realize ASCII was never
> formally adopted anywhere -- it was just a widely accepted informal standard.
> (A pity those aren't recognized more often.)

ASCII was changed because there is substantial sentiment against ruling
out EBCDIC machines and non-US character sets.


> ... and why C and Pascal were never objects of their ridicule?  [ about
> lack of error recovery ]

C has error recovery (setjmp()/longjmp()), and a great many significant
C programs use it.


> BTW, I note that the proposal/comment form is no longer included in the BASIS
> distribution, and hasn't been for some time now.  Had I not pestered Martin
> Tracy at a FORML conference, I wouldn't know how to submit a proposal to the
> TC.  Just a thought.

It would be nice if the proposal form were still included; its omission
is probably an oversight.

I can assure anyone who may be considering writing a proposal that the
form is really not necessary; just write down what you want to say and
send it in.  The detailed format is not important.

From a practical standpoint, what DOES matter is conciseness.  Long-winded
proposals just do not fly.  One page (one side) is best, 2 pages max.
If you have a lot of related stuff, break it down into several proposals
and note that they are related.  I know this is counter-intuitive, but
I guarantee that it is VERY important.  Trust me.

> Sounds to me like some members of the TC are indulging in a little extortion.
> "Give me what I want, or I'll torpedo this standard!" Is this the model of
> behavior you wish to promote?  Are these the kind of people who should decide
> a national standard?  ...
> IMHO, had there been fewer people who were hot to get their pet ideas into the
> standard, this could have been accomplished sooner.

Well, I guess I'm as guilty of this as anybody, especially since I authored
the CATCH/THROW proposal.

a) It is difficult to unilaterally engage in this kind of extortion.
   Most such "burning issues" garner the support of at least several
   committee members.  If the sentiments of the committee are clearly
   against you, most people (myself included) generally back down.
   A successful proposal has to win by a "substantial majority";
   this usually means about 80% or more in favor.

b) The people on the committee are those who care enough about Forth to
   pay the price, in dollars and time committment and emotional stress
   (don't downplay the stress factor; it is real and significant).
   I have paid my committee "dues" out of my own pocket and my own
   vacation time, so I feel entitled to vote as I see fit.

My "pet ideas" are successful only to the extent that I can convince 15
other independent-minded people that they are right.  So far, my "pet ideas"
have been in the form of OPTIONAL extensions that other successful languages
have had for many years, and which Forth needs (based on my own personal
experience, the existence of many papers describing various implementations
of such extensions, and the requests of many of my customers).

Mitch Bradley, wmb@Eng.Sun.COM

UNBCIC@BRFAPESP.BITNET (10/19/90)

Date: Tue, 16 Oct 90 03:16:44 GMT
From: ForthNet articles from GEnie
 <dsl.pitt.edu!pitt!willett!ForthNet@PT.CS.CMU.EDU>
Subject: What are the existing standards?

Category 10,  Topic 1
Message 21        Mon Oct 15, 1990
B.RODRIGUEZ2 [Brad]          at 07:25 EDT


>>> The point I was making is that even when all previous
>>> implementations _agreed_, the ANSI team has changed things.
>> Can you give me an example Brad?

> Offhand?  How about WORDLIST for VOCABULARY, and ADDITIONS for DEFINITIONS?
> (I realize that search orders vary from implementation to implementation, but
> the acts of declaring and invoking a vocabulary are remarkably constant across
> Forth standards.)
Really? Don't you think that 30 ( words ) VOCABULARY ONE and VOCABULARY ONE are
something different? Well, starting from this I could put the whole Standard
down saying that in Gra-Forth this or that is different... I would like to know
how commom are the non-standard VOCABULARYs. But I don't know everything. If
this proposal passed all the Committees and SubCommittees, they probably are
right.
I don't know, also, any DEFINITIONS that isn't like 79/83. But..

> I would argue that CHAR is an example, although I realize ASCII was never
> formally adopted anywhere -- it was just a widely accepted informal standard.
> (A pity those aren't recognized more often.)
Yes. I agree with that. But then, if you say (write?) ASCII " you know what you
will get, because " in ascii is 34. It makes more sense writing CHAR ", don't
you think so? Well, your answer to this is obvious, but do you think that ASCII
is more commom than CHAR? *REALLY* more commom?


>> ...are you willing to continue having Forth laughed at for its
>> lack of error recovery?

> Really?  Can you tell me who's been doing this laughing, and why C and Pascal
> were never objects of their ridicule?  I've heard Forth criticized for many
> reasons, but this was _never_ one of them.
I agree with this. But I would like to have more than C or Pascal (otherwise I
would not be using Forth). And such things must be Standard, or your program
will never be ported. I think that Ctach&Throw must be put in Future
Directions...

>> Some members of the TC are unwilling to accept a standard that
>> does not address this issue...  ...either the issue is resolved,
>> or we will not have a standard.  It's as simple as that.

> Sounds to me like some members of the TC are indulging in a little extortion.
> "Give me what I want, or I'll torpedo this standard!" Is this the model of
> behavior you wish to promote?  Are these the kind of people who should decide
> a national standard?
*I* hope not.

>>> Even minor variations in the implementation details can radically
>>> affect the usefulness of a construct.  [Examples]
>> I'm sorry, I can not group the changes you mention in the 83
>> Standard as "minor".  They have major impact to applications.

> Sorry, Dennis, I should have put "minor" in quotes originally.  This is
> exactly the point I was trying to make -- seemingly trivial details in an
> implementation can have major applications impact. Only I wasn't referring
> just to the problem of updating old applications code; I was saying that even
> in _brand_new_ constructs, little things make a big difference, and these are
> hard to see without experience.  If you were designing a new language, would
> you make "true" -1 or +1?  What would you have done if you hadn't experienced
> both in the Forth community?
Yeah.

>> Are there any volunteers who would record the debates...?

> Oh, I can imagine what a TC meeting is like -- I've been involved in similar
> efforts.  I was just saying that, so long as TC meetings are conducted and
> reported as they have been, the only option many of us have is to protest and
> criticize their decisions after the fact.

> BTW, I note that the proposal/comment form is no longer included in the BASIS
> distribution, and hasn't been for some time now.  Had I not pestered Martin
> Tracy at a FORML conference, I wouldn't know how to submit a proposal to the
> TC.  Just a thought.

> The "proposal log", a useful innovation which appeared briefly around BASIS10,
> is now gone too.  *Sigh*
I quoted this because it's true and I agree with this.

>> The TC is not in the "public debate" mode yet.
??? Again, I agree with the following:
> Then why this category on GEnie?  :-)  Seriously, if you don't get the debate
> accomplished now, you'll be in for a REALLY rough ride later, when the dpANS
> is officially published for comment.  Which you already know.
And more, if it's not a public debate, why you are reading about it, anyway?

>> ...their goal is to get the dpANS publish next year.

> IMHO, had there been fewer people who were hot to get their pet ideas into the
> standard, this could have been accomplished sooner. Shucks, I was reasonably
> happy with BASIS8.  (Or was it BASIS6? :-) )
So am I with BASIS 12 (although I still don't know how to LOAD a text file,
only how to know if my program is being LOADed from one :-)


>> Anything else, either new features or resurections of past
>> resolutions, will be given little consideration.

> Does this mean it's too late to comment on BASIS12?  According to MINUTES.13,
> the BASIS12 document has been officially adopted now. Although no one saw it
> but the TC.  (Grumble.)
??? THIS I didn't understand. What, then, I have, that's supposed to be BASIS
12 text? Sent as UUENCODED file in the FIGI-L (at Bitnet), and by mail (not
e-mail)?

> - Brad
It's good to hear someone who do not agree with me (although I agree with most
of your ideas): it's easy to perceive my errors...

                              (8-DCS)
Oh, one more thing:
This message came from GEnie via willett through a semi-automated process.
Report problems to: dwp@willett.pgh.pa.us or uunet!willett!dwp

Thanks, Doug.

UNBCIC@BRFAPESP.BITNET (10/19/90)

Date: THU, 18 OCT 90 21:31:11 EDT
From: wmb@MITCH.ENG.SUN.COM
Subject: ANS Forth
>> I would argue that CHAR is an example, although I realize ASCII was never
>> formally adopted anywhere -- it was just a widely accepted informal standard.
>> (A pity those aren't recognized more often.)

> ASCII was changed because there is substantial sentiment against ruling
> out EBCDIC machines and non-US character sets.
Although I agree with CHAR, I think I can talk about non-US character sets.
Nothing again the seven-bits ASCII, but we use one more bit. OK with EKEY, but
I just can't write my name in an EXPECTed line...

>> ... and why C and Pascal were never objects of their ridicule?  [ about
>> lack of error recovery ]

> C has error recovery (setjmp()/longjmp()), and a great many significant
> C programs use it.
Well, I have already answered this..

>> BTW, I note that the proposal/comment form is no longer included in the BASIS
>> distribution, and hasn't been for some time now.  Had I not pestered Martin
>> Tracy at a FORML conference, I wouldn't know how to submit a proposal to the
>> TC.  Just a thought.

> It would be nice if the proposal form were still included; its omission
> is probably an oversight.

> I can assure anyone who may be considering writing a proposal that the
> form is really not necessary; just write down what you want to say and
> send it in.  The detailed format is not important.
Oh, yes? This is new for me. And for many ones who don't have E_MAIL access or
just don't read 500Kb of messages a week. (In fact, I have one or two Mb of
old mail that I never read in my computer. Only from FIGI-L.) Maybe you can
make it clear to everyone, ok?

> Mitch Bradley, wmb@Eng.Sun.COM
                                (8-DCS), UNBCIC@BRFAPESP.Bitnet

wmb@MITCH.ENG.SUN.COM (12/18/90)

> Adding tons of whizzy new, but
> _optional_, features to Forth might be OK as long as we can all agree to the
> extent to which they are optional and can allow for minimal Forths to still be
> standard.

To be labeled as a ANS Forth "standard system", an implementation must have
all the CORE words, and even those CORE words need not always be present in
memory.  It suffices to provide them is source or "demand load" form, so
long as the system documentation tells the programmer how to get them in.

There are presently 135 CORE words, 3 more than the number of required
words in Forth 83.

A system may choose to also provide some subset of the CORE EXTENSION words.

A system may choose to provide one or more optional wordsets (e.g. floating
point, file access, local variables, search order, etc).  If a system
claims to have a particular optional wordset, it must have the entire
base portion of that wordset, and may include a subset of the extension
portion of that optional wordset.

This doesn't prevent an implementor from including selected words from
an optional wordset.  However, you can't label your system as "having
the wordset" unless you have the complete base wordset.  You can say,
e.g. "includes F+ , F- , F/ , and F* from the Floating Point wordset",
but in order to say "includes the Floating Point wordset", you must have
the complete set.

It has been argued that market pressures will force vendors to include
every optional word.  This may be true in "big system" environments where
those optional words are useful, but I don't think it is true in general.
I certainly don't plan to include the text file access wordset in my
products that run on embedded systems without mass storage.

Most successful Forths for the "big system" environments already include
the functional equivalents of the optional wordsets, and I think it is
a good time to try to standardize the names and meanings of these words.
(10 years ago would have been an even better time).

Mitch Bradley, wmb@Eng.Sun.COM

a684@mindlink.UUCP (Nick Janow) (01/11/91)

dcp@world.std.com (David C. Petty) writes:

> The advocates of a ``less is more'' ANS Forth are not unwilling to
> compromise, it's just that some of us:
>         a) would like a standard that is more layered so that the Core
>            Word Set is truly the _kernel_ of Forth and

What are your expected applications that require only the minimum kernel?  ANSI
Forth is supposed to make portability--both of programs and
programmers--easier.  If you need a minimum-kernal Forth for some special
application and know that portability isn't a problem, then no one will force
you to use the full ANSI Forth wordset.  Think about what you really fear: will
it actually make a difference in actual use?

>         b) fear adding (relatively) new and untried ``improvements'' to
>            ANS Forth, because that may (will) lead to the types of
>            problems we experienced with FORTH-83 and it may (will)
>            prevent adoption of the (possible) _best_ versions of
>            language features that may be just around the corner, but
>            incompatible with what we adopt in ANS Forth.

Those language features will be here "real soon now"?  If so, what computer
will you run them on?  You shouldn't buy a computer now, since a better one is
"just around the corner".  There will always be something better "just around
the corner".

The ANSI standard has to deal with what is available today.  Where possible, it
should allow for future additions or changes, but it can't deal with them
before they exist.


> It has been difficult to formulate a succinct description of our view versus
> X3J14's, because oppositional catch-phrases (minimal versus maximal;
> compatible versus complete; useful versus portable) only serve to polarize
> the discussion and always leave out important areas of agreement. ....
> 
> In future postings I will attempt to make the ``less is more'' point of view
> explicit (though that point of view seems so naturally consistent with Forth
> itself that it is sometimes difficult to come up with words of
> justification).

Usually, difficulty in communicating a point of view indicates that the speaker
(or writer) has an imprecise understanding of the issues.  There has been a lot
of confusion about the definitions of "core word set", "extended word set",
"standard words"etc.  There is also confusion between "ANS Forth Programming
System", "Standard System" and "Standard System with Environmental
Restrictions".

Do you know exactly what it means to be able to call your compiler an "ANSI
Forth" implementation?  I know the definitions were still fairly vague at the
Vancouver conference.

Look over your complaints again, and the definitions in the basis document.
Are you absolutely certain that what you are arguing against is really what you
think it is?

dcp@world.std.com (David C. Petty) (01/11/91)

I was sick with pneumonia through new year's day and so wasn't able to
read news for a couple of weeks and during that time (of course) the
messages were purged from my system.  I missed any messages posted
between 20 December and the first of the year.  I am not sure if I
missed any responses to the attached message, but since it mentions
``important areas of agreement,'' and ``...that there is much room for
compromise between the two points of view,'' and the hope that ``...we
can all agree to the extent to which [ANS Forth] can allow for minimal
Forths to still be standard'' I am reposting it.

The advocates of a ``less is more'' ANS Forth are not unwilling to
compromise, it's just that some of us:
        a) would like a standard that is more layered so that the Core 
           Word Set is truly the _kernel_ of Forth and
        b) fear adding (relatively) new and untried ``improvements'' to 
           ANS Forth, because that may (will) lead to the types of 
           problems we experienced with FORTH-83 and it may (will) 
           prevent adoption of the (possible) _best_ versions of 
           language features that may be just around the corner, but 
           incompatible with what we adopt in ANS Forth.  

Having said that, let's each move towards the other's position.  After 
all, this ain't the Persian Gulf!  (Except that you _must_ remove 
>COLROW and LEX from the BASIS, or we will unleash a Forth jihad and 
nuke you into the stone age.)  

------------------------------>8  CUT  8<------------------------------

Greetings:

I am new to Usenet, so please bear with me as I get used to the network 
etiquette.  I am particularly interested in the Usenet (and GEnie and 
BBS) discussion of ANS Forth.  I have been, off and on, a member of the 
X3J14 Technical Committee since the first meeting.  

I am also a member of the Boston Forth Interest Group -- American 
National Standard Forth Group (BFAFG), a sub-group of our local FIG 
chapter with a long name.  That group has been meeting monthly for the 
past fifteen months to try and form a coherent minority position in 
opposition to the view held by the majority of the current members of 
X3J14.  

It has been difficult to formulate a succinct description of our view 
versus X3J14's, because oppositional catch-phrases (minimal versus 
maximal; compatible versus complete; useful versus portable) only serve 
to polarize the discussion and always leave out important areas of 
agreement.  The group's position is simply that BASIS is too big -- that 
there are too many Forth words in ANS Forth -- but it is not a 
simplistic ``small is beautiful'' position.  The kinds of words we 
object to are those that cannot, in our view, reasonably be said to be 
included in ``accepted practice.''  

Rather than going into a full blown specific discussion of what those 
words are and to what extent they are not ``accepted,'' I will simply 
make the point now that there is a difference of opinion between some 
vendors who are members of X3J14 and some in the Forth user community as 
to what makes a good Forth standard.  It was heartening to learn that a 
group from southern Ontario has been making proposals to X3J14 that are 
_very_ consistent with our view.  I only hope a groundswell of input 
will continue to come into X3J14 before, during, and after they 
``promulgate'' a Forth dpANS (draft proposed American National 
Standard).  

In future postings I will attempt to make the ``less is more'' point of 
view explicit (though that point of view seems so naturally consistent 
with Forth itself that it is sometimes difficult to come up with words 
of justification).  I just want to add that I (personally) believe that 
there is much room for compromise between the two points of view.  
Adding tons of whizzy new, but _optional_, features to Forth might be OK 
as long as we can all agree to the extent to which they are optional and 
can allow for minimal Forths to still be standard.  

I hope that by adding to the discussion of ANS Forth I can sway some 
people to our view and can encourage those that already share it to make 
that view known to X3J14.  I can also _guarantee_ that I will be hearing 
from those that do not agree, but _c'est la vie_.  

The BFAFG can be reached care of Gary Chanson at the snail-mail address 
that appears on all of our proposals.  

        Boston FIG -- ANS Forth Group
        c/o Gary Chanson
        360 Waltham Street
        West Newton,  MA    02165-1732    USA

        Telephone: +1(617)527-7206

My addresses and telephone numbers are:

        Telephone: +1(617)492-1232
        FAX:       +1(617)491-2345
-- 
 David C. Petty | dcp@world.std.com | ...!{uunet,bu.edu}!world!dcp /\
      POBox Two | CIS: 73607,1646   | BIX, Delphi, MCIMail: dcp   /  \
 Cambridge,  MA | `I thought I was wrong once,                   /    \
02140-0001  USA |  but I realized I was mistaken.'              /______\

dcp@world.std.com (David C. Petty) (01/15/91)

In article <15126@sdcc6.ucsd.edu>,
ir230@sdcc6.ucsd.edu (john wavrik) writes:

``Eaker's CASE statement OCCUPIES ONE SCREEN OF CODE. Anyone who has 
``liked it and wanted in their system has been able to add it and use it 
``-- so the fact that it has not been part of Forth Standards is hardly 

In article <9101102147.AA13938@ucbvax.Berkeley.EDU>,
wmb@MITCH.ENG.SUN.COM (Mitch Bradley) writes:

``> >-- so the fact that it has not been part of Forth Standards is hardly
``> >evidence of the sluggishness and perversity of the Forth community --
``> >but is, rather, evidence that previous Standards teams have understood
``> >the nature of Forth.
``
``>  Oh, oh, oh!  That surely is beautifully written, especially the final
``>  phrase!
``
``Beautifully written, perhaps, but irrelevant.
``
``The "nature of Forth" is an abstract thing that is largely a matter of
``one's personal set of programming values.  Some people appear to be
``trying to use it as a decision criteria.  As such, it is pretty useless,
``because it is so imprecise and so subjective.

Au contraire... The ``nature of Forth'' is indeed relevant to the X3J14 
deliberative _process_, because it is the of nature of the beast that 
X3J14 is attempting to wrestle to the ground.  I do not think that the 
current members of X3J14 do not understand the nature of Forth -- they 
have just failed to let that understanding form the basis of their 
_decision criteria_.  

                                   =*=

Let's take the example of control structures.  X3J14 might have said:

``OK we want a perfectly general and complete standard that allows 
users to define whatever control structures they want, so (referring to 
BASIS14 section B.3 pp. 158-9, Wil Baden's dissertation on Control Flow) 
we will define their compile time behavior as:

BEGIN   ( -- dest ) dest to be resolved by UNTIL and AGAIN
THEN    ( orig -- ) resolves orig left by IF and WHEN

IF      ( -- orig ) conditional branch forward from orig
UNTIL   ( dest -- ) conditional branch back to dest
WHEN    ( -- orig ) unconditional branch forward from orig
AGAIN   ( dest -- ) unconditional branch back to dest
[NOTE:  WHEN is my general factoring of ELSE; see below]

DO      ( -- dest ) dest to be resolved by +LOOP or LOOP
LEAVE   ( -- ) leave information to be resolved by +LOOP and LOOP
LOOP    ( dest -- ) loop back to dest, resolving any LEAVEs
+LOOP   ( dest -- ) loop back to dest, resolving any LEAVEs
[NOTE:  UNLOOP has no compile time behavior]

BUT     ( orig1|dest1 orig2|dest2 -- orig2|dest2 orig1|dest1 ) 
        orig|dest swapper (used by ELSE, ENDOF, and WHILE)
YET     ( orig|dest -- orig|dest orig|dest ) orig|dest duplicator 
        (used to resolve LEAVEs, but I'm not sure for what else)

THENCE  ( i*orig dest -- ) resolve any number of origs U> dest

The glossary entries for some accepted control structure words (if they 
are even still _needed_) then become:

ELSE    is semantically equivalent to:
        : ELSE  ( orig1 -- orig2 )
          POSTPONE WHEN  POSTPONE BUT  POSTPONE THEN ;  IMMEDIATE
WHILE   is semantically equivalent to:
        : WHILE  ( dest -- orig dest )
          POSTPONE IF  POSTPONE BUT ;  IMMEDIATE
REPEAT  is semantically equivalent to:
        : REPEAT  ( orig dest -- )
          POSTPONE AGAIN  POSTPONE THEN ;  IMMEDIATE

This approach leaves a few issues hanging -- like whether orig and dest 
are the same size on the control flow stack; whether this scheme meets 
everyone's compiler security needs; what to do about ?DO, FOR, and NEXT; 
which words should be in the Core Word Set and which should be in the 
Core Extension Word Set (or a Control Flow Word Set) -- but it allows 
users to _portably_ `roll their own' control structures, like case 
statements:

: CASE  ( -- dest )  ( a la Eaker )
  POSTPONE BEGIN ;  IMMEDIATE
: OF  ( i*orig dest -- i*orig dest orig )
  POSTPONE OVER  POSTPONE =  POSTPONE IF  POSTPONE DROP ;  IMMEDIATE
: ENDOF  ( i*orig dest orig1 -- i*orig orig2 dest )
  POSTPONE ELSE  POSTPONE BUT ;  IMMEDIATE
: ENDCASE  ( i*orig dest -- )
  POSTPONE DROP  POSTPONE THENCE ;  IMMEDIATE''

                                   =*=

The _other_ approach that X3J14 might have taken is to say:

``OK, we'll standardize what we _know_ everyone expects (is accepted 
practice) in the Core Word Set (+LOOP, AGAIN, BEGIN, DO, ELSE, IF, 
LEAVE, LOOP, THEN, REPEAT, UNTIL, WHILE) -- though WHILE will have a 
specification that requires an implementation change by many system 
implementors to comply with the now standard `multiple WHILE' feature 
(but it does not break existing code).   

We'll factor LOOP (and +LOOP) and throw a new word into the Core Word 
Set (UNLOOP) that names a function that has always existed in Forth (but 
has not had an accepted name until recently), because it gives us the 
nice behavior of allowing WHILE ... THEN to be used with a do-loop `for 
free.'  

Then we'll put a bunch of other stuff that we know about and think 
would be nice to have (?DO, CASE, ENDCASE, ENDOF, FOR, NEXT, OF) into 
the Core Extension Word Set.''  

                                   =*=

I believe that the latter case is close to what has actually happened
(over time and through compromise) with BASIS14.  My question is, what
vaunted ``decision criteria'' were applied to the control flow words
of BASIS14?

On one hand, accepted practice seems to be an important decision 
criterion (trading BUT, THENCE, WHEN, and YET for CASE, ENDCASE, ENDOF, 
and OF).  On another hand, usefulness and completeness seem to have 
overruled accepted practice in the case of multiple WHILEs and the new 
word UNLOOP.  But neither is completeness the main decision criterion, 
for the current BASIS has no provision for an unconditional forward 
branch (WHEN) and it standardizes only one form of case statement.  
Another decision criterion is minimizing system implementor pain, but 
that has been overruled by the let's-make-Forth-better criterion in the 
case of multiple WHILEs.  But can it truly be said that the currently 
standardized control structures make Forth ``better'' when, with BUT, 
users could implement their own preferred form of WHILE and REPEAT?  

I realize that the control structure words were arrived at through 
compromise over three years and that one decision criterion that has not 
been compromised is the commendable and overriding desire for code 
portability (something X3J14 has thus far been _much_ more successful 
with than was the Forth Standards Team), but it appears to me that the 
_other_ decision criteria have become a muddle of inconsistently applied 
arguments.  As I said above, I believe that X3J14 has failed to form 
coherent decision criteria based upon their understanding of the nature 
of Forth.  

John Wavrik implies that a standard Forth based on such an understanding
will provide building blocks from which users can derive the greatest
flexibility, but at the same time will place as few restrictions as
possible on their use.  With that approach X3J14 would have:
standardized +LOOP, AGAIN, BEGIN, BUT, DO, IF, LEAVE, LOOP, THEN,
THENCE, UNLOOP, UNTIL, WHEN, and (possibly) YET; left ?DO, FOR, and NEXT
in an extension word set (though ?DO has problems); provided rationale
(or implementors) notes for the default standard behavior of ELSE,
WHILE, and REPEAT; and provided implementors notes for sample case
statements.  BASIS would thus be reduced by three words and the ultimate
decisions on how control structures are used would be left to the users.
 
In article <15126@sdcc6.ucsd.edu>,
ir230@sdcc6.ucsd.edu (john wavrik) writes:

``Petty's statement: 
``
``> It 
``> is only necessary that standard Forth provide the facilities for 
``> extending itself, so that users (and vendors) can add any language 
``> extension they want.   
``
``It is not clear that the ANSI team believes this.

	<...stuff...>

``Instead it seems that members of the Forth community are being asked 
``(or dragged) to accept some high level features that many people don't 
``want -- and, in return, are being expected to give up certain low 
``level capabilities and simplicity which they regard as essential 
``qualities of Forth. 
``
``Mitch Bradley (member of ANSI team) writes,
``
``> If everything goes well, ANS Forth will drag the Forth community 
``> kicking and screaming into the late '70's. 

I don't believe X3J14 will actually change the current BASIS (and I am
not writing any proposals to the effect that they do).  The purpose of
my discussion is to point out what, in my heretical opinion, is a major
problem with the X3J14 deliberative process -- the lack of clearly
articulated decision criteria.  It has been my experience that the
decision criteria of accepted practice, code portability,
``[indispensability] to the production of a coherent standard'' (see
BASIS 14, _Preface: Scope of Work for X3J14_, between pp.  viii and ix),
dragging Forth ``...kicking and screaming into the late '70s'' (whether
the added features are gotten ``for free'' or not), fixing bugs,
compromise with existing standards (God forbid!), and others, have all
been used to justify the inclusion or exclusion of any word or concept
whatsoever, depending on the whim of the person presenting the argument!
I have seen people use certain decision criteria to argue both for and
against an idea (though not usually in the discussion of a single
proposal).  In short, I do not believe that X3J14 has a firm and
consistent grasp on the nature of the process of standardizing Forth.

In article <9101102147.AA13938@ucbvax.Berkeley.EDU>,
wmb@MITCH.ENG.SUN.COM (Mitch Bradley) writes:

``Forth must adapt to the new "climate" or die.

On this, I agree with Brad Rodriquez that the ends do _not_ justify
the means, but (mercifully) _that_ is a topic for another message.
-- 
 David C. Petty | dcp@world.std.com | ...!{uunet,bu.edu}!world!dcp /\
      POBox Two | CIS: 73607,1646   | BIX, Delphi, MCIMail: dcp   /  \
 Cambridge,  MA | `It must've been some-other-body,              /    \
02140-0001  USA |  uh uh babe it wasn't me...'                  /______\

dcp@world.std.com (David C. Petty) (01/15/91)

In article <4410@mindlink.UUCP>,
a684@mindlink.UUCP (Nick Janow) writes:

``>         a) would like a standard that is more layered so that the Core
``>            Word Set is truly the _kernel_ of Forth and
``
``What are your expected applications that require only the minimum kernel?  

The ``layered standard'' arguments have been made many times in this
forum.  

I agree that embedded systems need not be standard.  It just seems to me
that, if X3J14 is taking the extension word set idea seriously, they
might consider moving 2DROP, 2DUP, 2OVER, 2SWAP (and maybe 2! and 2@) to
the Double Number Word Set, or making a Portability Word Set that
includes ALIGN, ALIGNED, CELL+, CELLS, CHAR+, CHARS, and ENVIRONMENT?,
or making an Input Steam Word Set that includes #TIB, >IN, ACCEPT, BLK,
EVALUATE, and TIB.  All of these were proposals by me and / or the BFAFG
that were rejected by X3J14.

I know that X3J14 argues that it is wrong to divide the Forth kernel up
along functional lines, but I cannot recreate the arguments against
doing so and I do not know what criteria they are using to define
extension word sets.
-- 
 David C. Petty | dcp@world.std.com | ...!{uunet,bu.edu}!world!dcp /\
      POBox Two | CIS: 73607,1646   | BIX, Delphi, MCIMail: dcp   /  \
 Cambridge,  MA | `It must've been some-other-body,              /    \
02140-0001  USA |  uh uh babe it wasn't me...'                  /______\

dcp@world.std.com (David C. Petty) (01/15/91)

In article <4410@mindlink.UUCP>,
a684@mindlink.UUCP (Nick Janow) writes:

``>         b) fear adding (relatively) new and untried ``improvements'' to
``>            ANS Forth, because that may (will) lead to the types of
``>            problems we experienced with FORTH-83 and it may (will)
``>            prevent adoption of the (possible) _best_ versions of
``>            language features that may be just around the corner, but
``>            incompatible with what we adopt in ANS Forth.

	<...stuff...>

``There will always be something better "just around
``the corner".
``
``The ANSI standard has to deal with what is available today.  Where possible,
``it should allow for future additions or changes, but it can't deal with them
``before they exist.

I find it incredibly ironic that, when arguing against my contention
that adding whizzy features to Forth may cause problems, someone would
suggest that ANS Forth, as it is currently constituted, is dealing with
the Forth of today.  Your talking to Mr. ``Let's standardize this year's
Forth, not next year's Forth!''

I am not suspicious of a Forth standard, per se (I was on the Forth
Standards Team and was at the founding meeting of X3J14).  I am
suspicious of ``improvements'' to Forth ending up in ANS Forth.  Some of
the ``improvements'' of FORTH-83 over FORTH-79 were changing LEAVE,
changing DO, changing division, changing PICK, changing ROLL, changing
state-smart words, and on and on.  I maintain that it was a mistake to
make (some of) these changes -- that they were not that well thought
out.  

X3J14 has generally avoided these gross mistakes, but the goals of X3J14
are loftier and the document is much more complex than the FORTH-83
standard.  By attempting to standardizing a complete Forth, X3J14 may be
introducing subtle and non-trivial problems -- after all, what seem like
obvious problems today were too subtle for us to notice in 1983.

FORTH-83 also put forth the ONLY ... ALSO search order control mechanism
as an experimental proposal.  A variant of it exists in BASIS14, but
there is no accepted practice in this area (that does _not_ mean that it
is not accepted practice to have VOCABULARY in your system, just that
implementations vary).  _I do not believe that it is the best search
order mechanism we can come up with_.  Having _no_ standard search order
mechanism is better than having one that will preclude the ``obvious''
best (and as yet unknown) search order mechanism from being standard
(especially when having only one word list (FORTH) does not materially
efffect the usefulness of the language).  

Putting such experimental proposals into ANS Forth as WORDLIST, locals,
and CATCH / THROW where there is no clear accepted practice is
standardization by fiat.  By all means, do not ``...deal with [future
additions or changes] before they exist.''  It's just that ``exist,'' in
my book, means ``reflecting clear accepted practice'' not ``someone
thought they would be useful.''
-- 
 David C. Petty | dcp@world.std.com | ...!{uunet,bu.edu}!world!dcp /\
      POBox Two | CIS: 73607,1646   | BIX, Delphi, MCIMail: dcp   /  \
 Cambridge,  MA | `It must've been some-other-body,              /    \
02140-0001  USA |  uh uh babe it wasn't me...'                  /______\

dcp@world.std.com (David C. Petty) (01/15/91)

In article <4410@mindlink.UUCP>,
a684@mindlink.UUCP (Nick Janow) writes:

``> It has been difficult to formulate a succinct description of our view 
``> versus X3J14's, because oppositional catch-phrases (minimal versus maximal;
``> compatible versus complete; useful versus portable) only serve to polarize 
``> the discussion and always leave out important areas of agreement. ....  
``> 
``> In future postings I will attempt to make the ``less is more'' point of 
``> view explicit (though that point of view seems so naturally consistent with
``> Forth itself that it is sometimes difficult to come up with words of 
``> justification).  
`` 
``Usually, difficulty in communicating a point of view indicates that the
``speaker (or writer) has an imprecise understanding of the issues.

I do not fail to understand the issues.  The current membership of X3J14
and I have wholly different views of what a Forth standard ought to be.
We are speaking a different language when we attempt to explain our
points of view to one another and thus we are often at a loss for words
_that the other will understand_.  We just simply don't agree on whether
ANS Forth ought to include whizzy new features (like locals).  I say
standard Forth is the Forth that has proven itself in the user community
and they say Forth must be ``improved'' to include things that have yet
to gain near universal acceptance.

	<...stuff...>

``There has been a lot of confusion about the definitions of "core word set", 
``"extended word set", "standard words"etc.  There is also confusion between 
``"ANS Forth Programming System", "Standard System" and "Standard System with 
``Environmental Restrictions".  
`` 
``Do you know exactly what it means to be able to call your compiler an "ANSI 
``Forth" implementation?  

Do you?  Does anyone?  

``I know the definitions were still fairly vague at the Vancouver conference.  

During the panel discsussion with members of X3J14 at the Rochester
Forth Conference working group on ANS Forth, the audience asked many
questions on conformance and labeling and routinely got conflicting
answers from the panelists.  It is not only the user community who is
confused on this point.
-- 
 David C. Petty | dcp@world.std.com | ...!{uunet,bu.edu}!world!dcp /\
      POBox Two | CIS: 73607,1646   | BIX, Delphi, MCIMail: dcp   /  \
 Cambridge,  MA | `It must've been some-other-body,              /    \
02140-0001  USA |  uh uh babe it wasn't me...'                  /______\

dcp@world.std.com (David C. Petty) (01/15/91)

In article <1991Jan15.041300.14326@world.std.com>,
dcp@world (David C. Petty) writes:

``As I said above, I believe that X3J14 has failed to form 
``coherent decision criteria based upon their understanding of the nature 
``of Forth.  

I do _not_ consider the proposal metric described by Larry Forsley in
the _Rationale to Statement of Work_ (BASIS 14, between pp. viii and ix)
to be an adequate substitute for consistently applied decision criteria.
In short, it says:

1)      when accepted practice is clear (DUP), accept it,
2)      when practice is conceptually clear, but there are code 
differences (VOCABULARY), attempt to form a synthesis satisfactory to 
proponents of each method,
3)      when practice isn't conceptually clear, and code differences 
abound (vocabulary search order), leave it out of the standard, and
4)      when accepted practice in the specific is usurped by 
considerations in the general (POSTPONE), develop a new technique.  

[Please note that the _Rationale to Statement of Work_ has no force
whatsoever, its proximity to the _Scope of Work for X3J14_
notwithstanding.  X3J14 is charged by the _Scope of Work for X3J14_ and
the _Rationale to Statement of Work_ is on the order of, ``this is kinda
how we're gonna go about it.'']

I agree with the first three, but the fourth has come to mean, ``We
will add whatever whizzy things we want for whatever reason we can
think of.''  I believe a more comprehensive proposal metric as an
amendment to the _Scope of Work for X3J14_ might be helpful to the
process of applying decision criteria, but it is a difficult question
and no one (including me) has been able to come up with a better
(adequate) one.
-- 
 David C. Petty | dcp@world.std.com | ...!{uunet,bu.edu}!world!dcp /\
      POBox Two | CIS: 73607,1646   | BIX, Delphi, MCIMail: dcp   /  \
 Cambridge,  MA | `It must've been some-other-body,              /    \
02140-0001  USA |  uh uh babe it wasn't me...'                  /______\

a684@mindlink.UUCP (Nick Janow) (01/15/91)

dcp@world.std.com (David C. Petty) writes:

> We just simply don't agree on whether ANS Forth ought to include whizzy new
> features (like locals).  I say standard Forth is the Forth that has proven
> itself in the user community and they say Forth must be ``improved'' to
> include things that have yet to gain near universal acceptance.

A lot of us find features--such as locals--to be a very useful addition to
Forth.  Since there will be a lot of people using locals, it's nice to have a
standard way of handling them, so that programs--and programmers--are portable.


Let me make an analogy to what I think is your point of view; you can tell me
if it's a bad analogy.

The steel industry has a set of standards for identifying alloys, including
modern high-performance alloys.  This allows steel users to simply specify a
certain alloy for an application. A xxx.yyy.zzz alloy means the same thing to
everyone.

If the standard was developed using your arguments, we'd probably be limited to
basic carbon steel.  "Carbon steel has been good enough for hundreds of years.
We don't need to mess with these 'whizzy new alloys'.  Adding molybdenum alloys
would make the standard too big.  If anyone needs more capabilities, they can
add them to their stock of recipes."

While it's true that carbon steel might be the "core" alloy set and anyone can
add new alloy blends from that, it's not very productive.  If each steel
producer makes its own (non-portable) alloys, users get locked into one
producer.  You have to rewrite all your design tools to switch to a new
producer, or else you have to do all your design work at the lowest level
(specifying the exact requirements of each alloy for every project) instead of
using standard high-level alloy specifications.

Limiting the "core" alloy set to carbon steel is fine for steel alloy
"hackers", but it isn't productive for the industry.

UNBCIC@BRFAPESP.BITNET (02/01/91)

>    This would be my vote. If you want string handlers, fine. Add them. Do

If they are not fast, they are not useful for me.

>    NOT make them part of the core word set. I have no ax to grind with LEX,

Not CORE word set! STRING word set!

>    SED, or SNOBAL for that matter, just don't put them in my kernel.

And, anyway, if they were in the core, just write, in plain Forth, the words,
and provide the source in documentation. No need to be in CORE. In fact, I
would be more happy if they were provided as source in disk, as long as they
were fast.

> >RE a "portability" wordset with ALIGN etc.:

>     This question pits the side of me that wants portability against the
>     side that wants a small, tight kernel. IF I HAD TO CHOSE THIS MINUTE
>     I would opt for trashing it, but I would like to see the pros and
>     cons argued (rationally) first.

Well, imagine if I have need to a word that creates something like that:

: ID CREATE CHAR " WORD ( Need to get HERE ? ) C@ 1+ ALLOT ( Alocate name )
            ( place ALIGN here ) , ( Alocate age )
            CHAR " WORD ( Need to get HERE ? I don't know the stack diagram for
WORD in ANS Forth...) C@ 1+ ALLOT ( Alocate address ) ;

And use this like this:

20 ID Daniel C. Sobral"SHIN QL 8 Conj. 8 Casa 1"

Without the ALIGN in the right position, this, probably, won't run in a Forth
for Macintosh, for example. See, my name have an even number of bytes, one more
byte for the counter and --- if I didn't get an even value at HERE --- the ,
would proceed an ilegal operation.

If the comma automatically ALIGN the address, I would still have problems when
accessing my age with @.

If the @ too automatically ALIGN the address, I would still have problemwhen
calculating the start of my address.

If you need more arguments, please say so. I'll provide them.

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP

UNBCIC@BRFAPESP.BITNET (02/01/91)

Sorry, a big error in the last message:
--- If I didn't get an even value at HERE ---

should be:

--- If the address returned by WORD (or HERE) were already ALIGNed ---

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

dcp@world.std.com (David C. Petty) (02/12/91)

I am posting this proposal (which was passed at the most recent
meeting of X3J14, because everything was deleted from it except for
(16)) so that anyone and everyone can respond to the questions raised
in it.  One member of the X3J14 Technical Committee (TC) has agreed to
respond point-by-point to these questions.  Those responses will also
be posted.

----------------------------------------------------------------------
ANSI ASC X3 / X3J14 Forth Technical Proposal    TP91-1082
----------------------------------------------------------------------
Title:  Clarify BASIS on the subject of the Forth input stream.  
----------------------------------------------------------------------
Related Proposals:      TP90-833, TP91-1070
----------------------------------------------------------------------
Keyword(s):     input stream, block file, implementation-defined 
default block space, text file
----------------------------------------------------------------------
Forth word(s):  #TIB ( >IN BLK EVALUATE INCLUDE INCLUDE-FILE LOAD 
LOAD-FILE QUERY REFILL SOURCE-FILE SPAN TIB \
----------------------------------------------------------------------
Abstract:       Clarify BASIS on the subject of the Forth input stream. 
 BASIS is still unclear on the specific input stream ``entitlements''
to the point that we have heard differing interprpreter, 5.3.2
addressable memory, 5.3.4.1 Input Stream, 8.1.006 #TIB, 8.1.0080 (,
8.1.0560 >IN, 8.1.0790 BLK, 8.1.1360 EVALUATE, 10.1.1713 INCLUDE,
10.1.1717 INCLUDE-FILE, 11.1.1790 LOAD, 10.2.1792 LOAD-FILE, 8.2.2040
QUERY, 8.2.2125 REFILL, 10.1.2218 SOURCE-FILE, 8.2.2240 SPAN, 8.1.2290
TIB, and 8.2.2535 \ (plus other new sections).
----------------------------------------------------------------------
Discussion:

In the following discussion the term ``legitimate'' means ``portable, 
consistent with the intention of X3J14, and within the boundaries of 
good taste.''  

1)      There is a question about the general nature of #TIB.  Which of 
the following are legitimate and correct in ANS Forth?  

: stream-empty?  ( -- flag )  BLK @     : stream-empty?  ( -- flag )
  IF   1024                               #TIB @  >IN @  = ;
  ELSE #TIB @
  THEN  >IN @ = ;

        It appears, given the letter of BASIS, that the first ought to 
be correct in all cases, but is #TIB also meant to hold the input stream 
length?  

2)      There is a question about the general nature of TIB.  Which of 
the following are legitimate and correct in ANS Forth?  

: stream  ( -- c-addr u )  BLK @  ?DUP  : stream  ( -- c-addr u )
  IF   BLOCK  1024                        TIB  #TIB @ ;
  ELSE TIB  #TIB @
  THEN ;

        It appears, given the letter of BASIS, that the first ought to 
be correct in all cases, but is TIB also meant to specify the beginning 
of the input stream (i.e., does it call BLOCK)?  Also, does the value 
returned by TIB ever change, e.g. during EVALUATE, INCLUDE, or 
INCLUDE-FILE, or do the values of #TIB and >IN change relative to it?

3)      There is a question about what >IN holds.  Are the following 
legitimate and correct in ANS Forth?  

: initialize-stream  ( -- )     : skip-stream  ( -- )
  0 >IN ! ;                       #TIB @  >IN ! ;

        That is, can anything but a previously saved value of >IN be 
legitimately stored in >IN by a user?  

4)      There is a question about what #TIB holds.  Is the following 
legitimate and correct in ANS Forth?  

: truncate-stream  ( -- )
  >IN @  #TIB ! ;

        That is, can #TIB ever be legitimately modified directly by a 
user?  

5)      There is a question about what BLK holds.  Is the following 
legitimate and correct in ANS Forth?  

: ans-query  ( -- )
  TIB +n ACCEPT  #TIB !  0 BLK !  0 >IN ! ;

        That is, (in addition to the above questions) can BLK ever be 
legitimately modified directly by a user?  If not, what does it mean to 
say that ``QUERY is semantically equivalent to [that] sequence...'' 
(BASIS section 8.2.2040 QUERY)?  

6)      There is a question about accessing the contents of the input 
stream.  Is any of the following legitimate and correct in ANS Forth?  

: uppercase  ( c-addr u -- )  ... ;  ( converts string to uppercase )
: uppercase-next-word  ( -- )
  >IN  DUP @ 2>R  BL PARSE  uppercase  2R> SWAP ! ;

: remaining-stream  ( c-addr u -- )
  stream  >IN @ CHARS  TUCK - >R  +  R> ;
: CHAR  ( "ccc" -- char )
  remaining-stream 0= ABORT" Stream empty."  C@
  BL WORD DROP ;

        Given that uppercase-next-word will not generally work if the 
input stream is coming from a block (and what about EVALUATE?), can the 
contents of the input stream ever be legitimately modified directly by a 
user (uppercase-next-word, above)?  Can the contents of the input stream 
ever be legitimately manipulated in any way directly by a user (CHAR, 
above), or is it only ever legitimate to parse from the input stream?  
If it is not legitimate for a user to directly calculate addresses 
within the input stream without parsing, can a user ever do anything 
legitimate with the value of  TIB?  

7)      There is a question about parsing.  Is the following legitimate 
and correct in ANS Forth?  

: CHAR  ( "ccc" -- char )
  BL WORD  COUNT 0= ABORT" Stream empty."  C@ ;

        Section 4.0575 Parsing says, ``If the current input stream is 
empty or contains no characters other than the delimiter, the string is 
empty.''  Is an empty string-implementation defined, or is the count 
zero?

8)      Is it true that, ``words using TIB and modifying the contents 
of BLK, >IN, or #TIB are responsible for maintaining the integrity of 
the input stream specification and its contents''  (changes added)?  
Ought section 5.3.4.1 Input Stream paragraph four (from where the above 
was taken) to be so modified?  Ought there to be more prose in that 
section about nesting and un-nesting the input stream and if so, what 
prose?  

9)      There is a question about CURRENT-FILE and SOURCE-FILE.  We 
have heard from the TC that CURRENT-FILE is obsolete, that SOURCE-FILE 
is obsolete, and that they are the same!  We most definitely believe 
(and assume) that CURRENT-FILE is not obsolete, that SOURCE-FILE (as a 
named value) is obsolete, and that they are definitely not the same 
thing (see TP91-1070).  C'mon, which is it guys?  

10)     The wording of BASIS section 8.2.2125 REFILL is unclear and / 
or incorrect.  When BLK contains a non-zero value and SOURCE-FILE 
returns a non-zero value, section 8.2.2125 specifies that REFILL takes 
the action ``0 >IN !  1 BLK +! 0.''  First, does that means that the 
system next interprets the block specified by the new value in BLK in 
the ``block space'' specified by CURRENT-FILE (regardless of the value 
in SOURCE-FILE)?  Second, if CURRENT-FILE contains a non-zero value, 
shouldn't REFILL return other than zero, or should the system simply 
abort if a user attempts a REFILL beyond the end of a block file?  

11)     Is SOURCE-FILE useful in any way to a user?  It is used in 
BASIS to help explain the way INCLUDE, INCLUDE-FILE, and REFILL work, 
but it can only be modified by INCLUDE, INCLUDE-FILE and little can be 
done with it by a user except defining:  : INTERPRETING-TEXT-FILE?  ( -- 
flag )  SOURCE-FILE 0<> ;.  We cannot see the need for that system value 
to be given a name and will help rewrite BASIS in terms of ``source 
file'' (the file whose text gets interpreted by INCLUDE and 
INCLUDE-FILE), removing any reference to SOURCE-FILE.  

12)     Section 10.1.1029 CURRENT-FILE refers to ``current block file'' 
and ``implementation-defined default block space,'' neither of which are 
defined.  A ``block file'' probably means ``whenever the contents of 
CURRENT-FILE are non-zero'' and differs from the implementation-defined 
default block space only in that the concept of end-of-file is 
meaningful for a block file.  Ought ``block file,'' ``current block 
file,'' and ``implementation-defined default block space'' be defined in 
the Definition of Terms and if so, how?  

13)     There are some unclear aspects of the specification of comments 
(BASIS sections 8.1.0080( and 8.2.2535 \).  Section 8.1.0080 refers to 
``text file,'' but that term is nowhere defined.  It probably means 
``whenever the contents of BLK are zero and the source fileid is 
non-zero.''  Ought ``text file'' be defined in the Definition of Terms?  
Section 8.2.235 refers to ``line,'' but section 4.0510 (the definition 
of the term ``line'') is inadequate to describe the lines in blocks (and 
block files) versus those in text files (it describes how ``lines'' are 
displayed).  What is meant by a line within a block (e.g. is it 64 
characters) and to what does section 4.0510 refer?  Ought the wording of 
section 4.0510 be improved and if so, how?  

14)     There are some questions about (.  
      - Section 8.1.0080 ( spells out that a null comment, (), is 
allowed so that ( cannot be implemented in terms of WORD (though 
sections 8.1.0190 ." and 8.2.0200 .( do not specify that behavior).  
Does that behavior need a rationale note?  
      - Sections 8.1.0080 ( and 8.2.0200 .( specify that those words 
are immediate.  Is that a mistake and if not, why not?  
      - Does X3J14 really want to require ( to comment to the end of a 
text file?  

15)     Is the following legitimate and correct in ANS Forth and does 
it immediately exit the current input stream?  

: EXIT-INPUT  ( -- )  BLK @
  IF   1024 >IN !
  ELSE POSTPONE \
       BEGIN
            REFILL 0=
       UNTIL
  THEN ;

16)     We asked the question of the Input Stream Working Group, ``why 
does section 11.1.1790 LOAD have the stack diagram ( i*w -- j*w )?'' and 
got explanations as to what the ``i*x'' mean.  To us, that stack comment 
says, ``LOAD takes a variable number of arguments and leaves a variable 
(and potentially different) number of arguments.''  Didn't LOAD used to 
take a block number?  
----------------------------------------------------------------------
Date:           February 1, 1991
Submitted by:   David C. Petty and Bent Schmidt-Nielsen
Address:        Post Office Box Two
                Cambridge,  MA    02140-0001
Internet:       dcp@world.std.com
Telephone:      +1(617)492-1232         FAX:    +1(617)491-2345

ANSI ASC X3 / X3J14 Forth Standards Committee
111 North Sepulveda Boulevard, Suite 300  Manhattan Beach,  CA    
90266-6861
-----------------------------------------------------------------------
X3J14/87-021    12/04/1987
-- 
David C. Petty | dcp@world.std.com | ...!{uunet,bu.edu}!world!dcp /\
      POBox Two | CIS: 73607,1646   | BIX, Delphi, MCIMail: dcp   /  \
 Cambridge,  MA | `It must've been some-other-body,              /    \
02140-0001  USA |  uh uh babe it wasn't me...'                  /______\

UNBCIC@BRFAPESP.BITNET (04/03/91)

Does DEFER exists in BASIS 15?

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

UNBCIC@BRFAPESP.BITNET (04/05/91)

Can I read the lines that follow a word in a source, in a std way, with
what BASIS 15 gives to me?

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

P.S.: Interesting your last two messages, Clyde.

wmb@ENG.SUN.COM (04/05/91)

> Can I read the lines that follow a word in a source, in a std way, with
> what BASIS 15 gives to me?

Yes.  That was a "priority 1" goal of mine for the input stream
specification.

Mitch Bradley, wmb@Eng.Sun.COM

UNBCIC@BRFAPESP.BITNET (04/06/91)

>> Can I read the lines that follow a word in a source, in a std way, with
>> what BASIS 15 gives to me?

> Yes.  That was a "priority 1" goal of mine for the input stream
> specification.

Thanks, Mitch, but how? Ah! An old question that nobody answered: there is
DEFER in BASIS 15?

>>                              (8-DCS)

> Mitch Bradley, wmb@Eng.Sun.COM

                               (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

wmb@ENG.SUN.COM (Mitch Bradley) (04/06/91)

> Is there DEFER in BASIS 15.

No.  I proposed it at the last meeting, but the proposal was defeated 3-8.

> [how do I] read the lines that follow a word in a source, in a std way, with
> what BASIS 15 gives to me?

You can use WORD to read the rest of the line, or \ to skip the rest of the
line, or look at the characters of the line individually by using a
combination of BLK , BLOCK , TIB , >IN , and #TIB to develop the current
input buffer address.

Then, when the input buffer is empty (as indicated by >IN @ equal to #TIB
or by WORD returning the address of a string whose length byte is 0), you
refill the input buffer with REFILL ( -- okay? ).  REFILL returns false
at end-of-file.

Mitch

UNBCIC@BRFAPESP.BITNET (04/06/91)

: DEFER CREATE 1 CELLS ALLOT DOES> @ EXECUTE ( PERFORM if it exists) ;

Is the above line correct by BASIS 15? Can it use TO?

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

wmb@ENG.SUN.COM (04/06/91)

> : DEFER CREATE 1 CELLS ALLOT DOES> @ EXECUTE ( PERFORM if it exists) ;
>
> Is the above line correct by BASIS 15?

Yes.  A slightly better definition would be:

: COMPLAIN  ." Unitialized DEFER word" cr  ;
: DEFER  CREATE ['] COMPLAIN ,  DOES> @ EXECUTE  ;

> Can it use TO?

No.  There is no standard way to tell an existing system implementation
of TO how to recognize children of the new defining word "DEFER", and what
to do when they are recognized.

Of course, you could pick another name (e.g. IS) and use it to set the
value of DEFER words and nothing else.

I suppose you could get fancy and do something like:

: DEFER  CREATE ['] COMPLAIN ,  1234 1234 NOT 2,  DOES> @ EXECUTE  ;
: TO  \ name  ( value -- )
   ( Save the input stream pointer, look at the parameter field of )
   ( "name" to see if it has 1234 1234 NOT in the right place, and )
   ( if so, set the value.  Otherwise restore the input stream pointer )
   ( and execute the previous definition of TO . )
;

Mitch Bradley, wmb@Eng.Sun.COM

S47852EF@ETSUACAD.BITNET (Frank Earl) (04/07/91)

On Fri, 5 Apr 91 09:01:11 PST Mitch Bradley said:
>> Is there DEFER in BASIS 15.
>
>No.  I proposed it at the last meeting, but the proposal was defeated 3-8.
>

Mitch, how does the standards team propose to handle vectored execution
and forward compilation in a clean and easy manner, while also doing it in a
standard manner?    (Read:  This *WILL* be a portion of my comments to the TC)

DEFER is one of those words that is nice in that, yes you may be able to
portably define it using standard words ( like ' : <deferred-word> ; ')
but is cleaner and easier to follow if it's made it's own class of word like
F-PC has...    (At least I think it's important...  :)


Frank

wmb@ENG.SUN.COM (04/09/91)

> Of the three items out for mail ballot, 2 have been rejected and 1 has
> passed.  The ones that failed had to do with conditional compilation words
> (nobody likes the names) and left paren.  The one that passed is for
> sending BASIS 15 on to the SPARC committee.

Actually, there were three technical items on the first mail ballot,
and then a separate mail ballot with one item: whether or not to send
Basis 15 to SPARC.

The other technical item (the one that passed) had to do with the word 2R@ .
It was a minor issue.

Mitch Bradley, wmb@Eng.Sun.COM

UNBCIC@BRFAPESP.BITNET (04/22/91)

This is a small reply to a long message from John J Wavrik. What I think
is that he's comparing ANS Forth with another Forth that we currently use.
I would like to know what Forth we currently use. I, for example, use TCOM
and F-PC 3.53, both from the same guy, and distributed in a same package...
and I can't use comma as John J Wavrik has said we use in neither one.

In fact, he speaks of Parameter Field Address, a.k.a. BODY, wich, to my point
of view, is the DATA Area of ANS Forth. This is the only way I can use comma,
without having to change the code, in both Forths I use.

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

P.S.: I'm currently working in a OOI written upon ANS Forth. I'm using ZEN,
and looks like it provides everything I need from the Standard (except for
?ENVIROMENT). I'll post more notes on that late.

UNBCIC@BRFAPESP.BITNET (05/17/91)

=> In fact, I am personally _very_ interested in working up a test suite for ANS
=> Forth, and am working on a paper on the subject.  Part of the reason for the
=> paper is to find out how many others would be interested in contributing to
=> this effort.  I certainly can't do it alone, and I don't think any one vendor
=> should have to foot the bill for something that will benifit us all.  So, how
=> many people out there are concerned about the testability of Forth and are
=> willing to help define a test suite for the coming versions of ANS Forth?

As I'm writting an Object Oriented Interface, I could help you. The
vocabularies wordset, nameless definitions and portability issues are the most
important to me.

=> Can we have a show of hands?   DaR
   ||||
   ____/

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

UNBCIC@BRFAPESP.BITNET (05/28/91)

=> Category 10,  Topic 15
=> Message 21        Sat May 25, 1991
=> R.BERKEY [Robert]            at 20:45 PDT
=>
=>
=>  To: Mitch Bradley
=>
=>  mb> A standard ANS Forth system is not required to reject
=>  mb> non-printable characters in blocks, nor is it required to accept
=>  mb> them.  The characters whose meanings are precisely defined in the
=>  mb> context of block source code are the space character and the ASCII
=>  mb> characters with codes from 33 to 126.
=>
=> Forth-83 allows word names defined on blocks to contain any character other
=> than a space.  In Forth-83 there are no restrictions on the data that can be
=> stored in a block, a block is simply a 1K segment of RAM that interchangeably
=> resides in some form of mass storage.  This "mass storage" may itself be as
=> little and as transient as 32K of RAM.

We were talking about SOURCE code in blocks. Specifically, if CHAR should
accept an >127 character.

=>  mb> "127 AND" is often used after KEY to remove junk like parity bits
=>  mb> and shift bits.  This technique, although quite common, is bogus,
=>  mb> because throwing away high bits doesn't necessarily result in a
=>  mb> meaningful 7-bit ASCII character.  Instead it may for example
=>  mb> transform a code that means the "F7" function key into the letter
=>  mb> "T", a behavior for which I can think of no justification.
=>
=> The implementation requirements for the Forth-83 Standard word KEY are an
=> entitlement to the "Standard Programmer", i.e., a user of a FORTH-83 Standard
=> System.  Historically this definition arose because of conflicting program
=> needs involving KEY .  Sometimes the program needs all of the data coming
=> through the I/O stream, principally here meaning through an RS232 serial port
   .
=> It's a serious handicap to professional engineers when the implementation
=> arbitrarily discards data from the physical level of the I/O stream.  At the
=> logical level of use, just what that data means may simply be information
=> relevant to the I/O stream, such as a parity bit, and not interesting in the
=> logical interpretation of the data.  The point of the system requirements
=> involving the Forth-83 Standard word KEY is to assure that the application
=> level on a system-specific basis is able to make relevant decisions regarding
=> how to interpret physical-level data.  Further, the Forth-83 Standard
=> guarantees a Standard Program access to logical data, i.e., that all 128 ASCI
   I
=> characters can be received.  The Forth-83 Standard further specifies the ASCI
   I
=> standard as a normative appendix.

If you want binary data input, you can use EKEY. It's provided for that.

=>  mb> The correct phrase should be something like this:
=>
=>  mb> 126 constant max-graphic    \ Value depends on system character set
=>
=>  mb>    ...
=>  mb>     key  dup bl max-graphic  between  if   ( char )
=>  mb>        <insert character in buffer>
=>  mb>     else
=>  mb>        <process as editing character>
=>  mb>     then
=>
=> That happens to be an example of a program using the Forth-83 KEY .
=>
=> Mitch, I don't understand your readiness to discard the heritage with KEY and
=> BLOCK .  My sense of your view toward blocks is, "someone's not-so-bright ide
   a
=> of a way to handle source code."  I know that you've cited control-S and
=> control-Q as implementation problems with KEY .  Yet especially knowing your
=> prodigious ability as an implementor, I find it difficult to understand that
=> you couldn't support the KEY in a program written to use DC1 or DC3, Device
=> Control 1 and 3, ASCII values hex 11 and 13.  (If this issue is a "quibble",
=> then are excuses for not providing a full implementation of KEY other than
=> "quibbles"?)

There is a full implementation of KEY. It's name is EKEY.

=> By the way, I consider X3.J14's handling of the definitions of KEY and BLOCK
=> two of the bigger objections going, either being plenty of reason for
=> reasonable people to reject the label "ANS Forth Standard".  The deletion of
=> EXPECT could be rationalized if KEY were conventionally functional.  KEY can'
   t
=> input a <RETURN>?  In my opinion, the committee decision here lacks serious

Key accepts anything with 7 bits.

=> commitment to standardization.  Re: disentitling BLOCK .  The nominal
=> rationale that embedded systems don't necessarily need source code doesn't
=> wash.  The existence of embedded systems that don't allow source code doesn't
=> in any way change the existence of programs that _are_ source code.

Again, we were discussing the behavior of blocks when used as SOURCE code.

=> Robert

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

Mitch.Bradley@ENG.SUN.COM (05/28/91)

> Brad Rodriguez writes:
> Ah, if only this same cost-benefit analysis had been applied to so many
> other parts of ANS Forth!

It has been applied.  You just disagree with the outcome.

Mitch.Bradley@Eng.Sun.COM

Mitch.Bradley@ENG.SUN.COM (05/28/91)

> My understanding is that there is a four-month "window" for comments.  Then,
> no further comments are accepted unless the dpANS is sent back to the TC for
> revision.  And this is not a sure thing; the TC is obligated to _respond_ to
> all comments, but only ANSI decides -- who knows how? -- if the document has
> to be sent back for changes.

This turns out not to be the case.  I was worried about this too, and I asked
Elizabeth for clarification, and I also asked Sun's ANSI representative for
confirmation.

A TC can take a document back for changes at any time.  It doesn't have to
be "sent back at ANSI's discretion".  In one recent case (SCSI I think), a
TC discovered a problem at the absolute last minute, when the document was
on the way to the printers for final printing.  They "pulled it off the truck"
and changed it.

> By their own definition, a "superior" argument is one which appeals to the
> whims of a majority of the TC -- and nothing else.

You call it "whim", I call it "judgement".  The committee members are people,
so both words probably have some merit.

Mitch.Bradley@Eng.Sun.COM

chrisg@cbmvax.commodore.com (Chris Green) (05/31/91)

In article <9105291726.AA13694@ucbvax.Berkeley.EDU> UNBCIC%BRFAPESP.BITNET@SCFVM.GSFC.NASA.GOV writes:
>We were talking about SOURCE code in blocks. Specifically, if CHAR should
>accept an >127 character.
>
.....
>If you want binary data input, you can use EKEY. It's provided for that.
>...
>Key accepts anything with 7 bits.

	This is clearly a terrible thing. ANSI standard extended ASCII, which is in use
on millions of our computers around the world, and millions of other machines, uses
characters >127 to represent the extended characters needed for European writing
(characters with tildes, etc). There are a lot more than 96 printable characters
in ASCII.

-- 
*-------------------------------------------*---------------------------*
|Chris Green - Graphics Software Engineer   - chrisg@commodore.COM      f
|                  Commodore-Amiga          - uunet!cbmvax!chrisg       n
|My opinions are my own, and do not         - killyouridolssonicdeath   o
|necessarily represent those of my employer.- itstheendoftheworld       r
*-------------------------------------------*---------------------------d

Mitch.Bradley@ENG.SUN.COM (05/31/91)

> >KEY accepts anything with 7 bits.

>       This is clearly a terrible thing. (discussion of international
> character sets).

Actually, as currently defined, KEY accepts anything in the implementation-
defined character set, which can include 8-bit international characters.

Mitch.Bradley@Eng.Sun.COM

mikeh@touch.touch.com (Mike Haas) (06/01/91)

>
>Key accepts anything with 7 bits.


KEY needs to do better than that.  The rest of the world, where real computing
is happening has passed ASCII long ago.  most new standards have had the
forsight to make 0-7f compatible with ASCII...this greatly assists PRIMITIVE
7-bit systems to make a transition...but is it taken advantage of?

I swear, I've seen this kind of thinking in the forth community too long.  While
other languages are being used to develop multi-media, networking, file-sharing,
and other state-of-the-art commercial packages, forth folks argue about shadow
screens and whether KEY should accept more than 7 bits.

BLOCK is a joke...far outlived it's usefulness from the days when there were
no operating systems to run under (or ones that were there too pitiful to
use).  It's main effect these days is to alienate industry leaders from
looking at forth because it's too wierd.  fortgh needs files, period.  I like
using real editors.

I had occasion to examine the software products of DEC a few years ago... had
'em all but forth.  VMS-C, PASCAL, BASIC, FORTRAN, you name it...it's there.

I haven't gotten into a discussion of what forth 'needs' for a long time,
and I won't be eager to participate past this message.  This is because
the mindset of those who restrict forth to outmoded concepts is cast in
stone.  Everybody picks their pet peeve (usually the subject related to
theirt own 'custom' implementation of CASE or whatever) and provokes
discussion as though it were the most important aspect of forth as a language
...the very reason it will live or die.  Well, my ONE-TIME-ONLY opinion is that
the big issues have to do with forth's perception by the rest of the
programming world, and our insistence to standby old, outdated concepts is
spelling our demise, especially in areas where that world has provided
excellent solutions (file systems and graphic character sets) and we
REFUSE to listen.

7-bit ASCII, indeed.  let's wind our watches 'cause they're running a little
slow.  Or maybe forth isn't as extensible as we think, huh?

>

UNBCIC@BRFAPESP.BITNET (06/02/91)

=> >The issue doesn't revolve around BLOCK, but rather around whether Standard
=> >source code can contain "invisible" characters.  I don't think it's a good
=> >idea to allow arbitrary control characters in standard source code.  Standar
   d
=>
=> Then don't enter them in source code.  But don't limit the functionality of
=> the system's tools to handle such data.  KEY and BLOCK (ugh) are used for
=> many thing other than funneling data to the interpreter/compiler.  In fact,
=> when most forth "applications" are running, doing what they were designed
=> to do, the often use KEY and BLOCK (no?) and never invoke the interpreter.

Ok, so you AGREE with the decision made by X3J14. You can't enter invisible
characters in a Standard program, but you can use BLOCKs for whatever you want
(THERE IS *NO* LIMIT TO WHAT YOU CAN PUT IN BLOCKS!!!). You want >7 bits input?
Then use EKEY. KEY is still there, but for 7-bits input. Maybe the TC throw out
EKEY and make KEY acts like EKEY (puts a word in the stack with the input).
That would be useful for me (I use 8 bit characters).

=> Other languages have been adding page formatting control characters
=> since day 1...right in with their source code.  any forth system worth
=> it's salt should be able to handle TAB characters as generic whitespace,
=> like BL.  Why the hell not?  I HATE it when someone designs limitations
=> into the development tools i have to use...especially forth tools, where
=> I can type in R> at the keyboard!  This is an advantage, this power.  Why
=> take it away?  Remember, as a forth developer, you're creating MY tools;
=> you can't possibly know what I'm going to want to do with them, especially
=> with a language like forth!

That's what was happening. ZEN 15a treats anything greater than 126 and lower
than 33 as a generic whitespace. So I asked Mitch if that was OK with BASIS 15,
and he answered that ANS Forth let the compiler do anything with caracters not
within 32 and 126.

=> Then there are platforms (like tha amiga) where you can type in ANSI
=> escape codes to do VT-100-like forms management (including changing
=> text & background color).  a 7-bit KEY is braindamaged!  Quit trying
=> to protect me from the power of forth.  Both the mac & amiga use the
=> full 8 bits for data...don't strip this out just cause your forth
=> interpreter can't handle it.  forth needs to ADAPT to these systems...
=> even 8-bit text is old stuff, the world is now trying to figure out
=> international language support (16 bits & MORE!)...THIS IS WHAT WE
=> SHOULD BE FIGURING OUT!...
=> not whether KEY is gonna pass 8 bits!  ludicrous.  ADAPT...
=> it may be in Websters, but it sure isn't in many 'forth' dictionaries!

I consider EKEY an adaptation, don't you? ANS Forth have files also. And Error
Handling. And a powerful dictionary wordset. And floating point. And Double
Numbers. And many other things. Ok, we don't have Windows or Graphics, but no
Standard do (there are just too many "Standard" GUIs). What else do you want?

                              (8-DCS)
Daniel C. Sobral
UNBCIC@BRFAPESP.BITNET

UNBCIC@BRFAPESP.BITNET (06/23/91)

What's the current status of dpANS Forth???
                              (8-DCS)
Daniel C. Sobral                           Errare Humanum Est...
UNBCIC@BRFAPESP.BITNET                     ...Perseverare Autem Diabolicum
UNBCIC@FPSP.FAPESP.ANSP.BR
--------------------------------------------------------------------------
No one, but me, is responsible for the above message.

jax@well.sf.ca.us (Jack J. Woehr) (06/26/91)

UNBCIC@BRFAPESP.BITNET writes:

>What's the current status of dpANS Forth???

	Received BASIS 17 in mail today, along with dpANS letter ballot.
-- 
 # jax@well.{UUCP,sf.ca.us}  # #  Member, # # Chapter Coordinator,  #
 # well!jax@lll-winken.arpa  # # X3J14 TC # #  Forth Interest Group #
 # JAX on GEnie              # # for ANS  # #   P.O. Box 8231       #
 # SYSOP RCFB (303) 278-0364 # #  Forth   # #    San Jose CA 95155  #

Mitch.Bradley@ENG.SUN.COM (Mitch Bradley) (06/27/91)

> Received BASIS 17 in mail today, along with dpANS letter ballot.

I want to publicly express my appreciation to John Rible for making it
possible for the letter ballot to go out in time for the ballot to
close before the next X3/J14 meeting.  John pulled "all nighters" for
about 4 straight nights at the Rochester Forth Conference in order to
finish all the Basis editing.  Don Colburn stayed up all night on Friday
to supervise the final printing.

Three cheers to Don, and 16 cheers to John Rible!

Mitch