On Wednesday, September 30, 2015 at 12:32:45 AM UTC-7, Elizabeth D. Rather wrote:
> On 9/29/15 7:03 PM, Chris Curl wrote:
> > ...I actually was looking into it a little tonight, because I am getting closer to my interpretation loop, and I was curious about the behavior of ' (TICK). Here is the standard:
> >
> > 6.1.0070 ' tick CORE ( "<spaces>name" -- xt )
> > Skip leading space delimiters. Parse name delimited by a space. Find name and return xt, the execution token for name. An ambiguous condition exists if name is not found.
> >
> > When interpreting, ' xyz EXECUTE is equivalent to xyz.
> >
> > Isn't is a pretty common scenario that the user fat-fingers and ' doesn't find the word? Why do they not say what should be left on the stack in that case? I understand that it means that I can handle it however I feel like handling it today, and I can change it tomorrow if I want, but it also means that I can't write code that uses ' for other Forths, because I don't know how to determine if it didn't find the word. Seems kinda silly to me.
>
> If the word isn't found, you'll get an abort in virtually all systems.
> Technically, the standard says it's an "ambiguous condition," but in
> common practice it will abort and nothing will be left on the stack.
What does "virtually all" mean? Some ANS-Forth compliant systems do one thing, and some do another thing --- this is just another word for "ambiguous."
You don't understand what the concept of portability means --- this is why you failed so badly at writing a language standard --- the whole purpose of a language standard is so programs will be portable.
> The standard is only one element in a technology; "common practice" is
> the other major one. Standards understand common practice, and should
> not violate it.
ANS-Forth actually violates almost all of the common practice of decades of Forth programming. In my previous post I discussed how words such as IF that were always immediate can now be non-immediate, and how tick and FIND are now completely screwed up although they were a fundamental aspect of Forth from the very beginning.
Another example of common practice is the use of { to define locals. This predates ANS-Forth and has been in use for over two decades. You hate locals though; you have infamously said: "I hate locals :-)" The smiley face is part of the quote. Because of this, SwiftForth doesn't provide { but instead uses { for multi-line comments.
So, Forth-200x wants a new way to define locals because the parameters are backwards in LOCALS|. They can't use { however, despite the fact that { has been common practice for over 20 years. Instead they have to change the name to {: so SwiftForth can continue to use { for multi-line comments. This means that everybody in the Forth community has to rewrite all of their legacy code to use {: rather than { just so Forth Inc. can continue to use { for multi-line comments.
Quite humorously, VFX now allows both { and {: for defining locals! That has got to be confusing for novices. They see some code that uses { and some code that uses {: and they wonder what the difference is. But there is no difference!
Once again, Forth Inc. manages to take something simple that has been done for decades, and completely screw it up.
Writing a standard is not all that difficult. Most of these decisions are easy and obvious --- yet, Forth Inc. screws up every decision every time.
> But they often (appropriately, IMO) do not mandate that
> all systems follow it. That was the mistake Forth83 made: indirect
> threaded code, 16-bit cell size, other mandates that were limiting and
> would have been fatal if allowed to persist unchallenged.
It was Forth Inc. that screwed up the Forth-83 standard, then Forth Inc. screwed up the ANS-Forth standard, and now Forth Inc. is screwing up the Forth-200x standard --- definitely a pattern there!
> I was the chair of the group that produced Forth94, following upon (at
> that time) 21 years of Forth programming, training, documentation, and
> project management. I was on the committees that produced Forth79 and
> Forth83, as well. One of the things that ANSI (American National
> Standards Committee, the major standards body in the US, which oversaw
> and approved ANS Forth in 1994) emphasizes is the necessity for a
> standard to revisit common practice and either reaffirm, modify or
> withdraw an official standard every 5 years. I am retired now, and not
> actively participating in the current standards efforts, but I respect
> what has gone into them and their efforts to find a balance between
> respecting innovation and maintaining compatibility.
This is total baloney! You have never written a Forth program in your life -- you are a salesperson.
Every code example that you have posted on comp.lang.forth was copied directly out of the "Starting Forth" book, with only one exception:
On Sunday, August 9, 2015 at 7:30:10 PM UTC-7, Elizabeth D. Rather wrote:
> Here's [an array definer] presented in my Forth Application Techniques that I think is
> far more useful than the FSL version:
>
> : ARRAY ( n -- ) CREATE DUP , CELLS ALLOT
> DOES> ( n -- a) SWAP OVER @ OVER < OVER
> 1 < OR ABORT" Out of Range" CELLS + ;
> I am also strongly of the opinion that reading a standard is no way for
> a beginner to learn a language, because the constraints under which a
> standard operates introduces too many ambiguities, such as the one
> you're pointing out here. Far better to get one of the most popular and
> well-documented implementations and write a few programs. That'll not
> only clarify a lot of things for you, it'll also help you avoid a lot of
> the traps and misconceptions that can take you a long time to work around.
Why are you so strongly of the opinion that people learning Forth should not read the ANS-Forth document? Is it because you are embarrassed by all of the ambiguity? I totally agree with you though --- I also recommend that novices not read the ANS-Forth document --- I recommend that nobody read the ANS-Forth document.
The "constraints under which a standard operates" are all of the political concessions that you made to get Forth compiler-writers to sign on to the ANS-Forth standard, despite the fact that all of their Forth systems were incompatible with each other --- this "introduces too many ambiguities."