Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #27982

Re: quick review of <BUILDS and CREATE history

Date 2014-01-20 12:07 -1000
From Elizabeth D Rather <erather@forth.com>
Organization FORTH, Inc
Newsgroups comp.lang.forth
Subject Re: quick review of <BUILDS and CREATE history
References (3 earlier) <op.w9yu1gm65zc71u@localhost> <samdnZ0iro4aAkHPnZ2dnUVZ_t2dnZ2d@supernews.com> <op.w9yz3nnj5zc71u@localhost> <KbednR9Be4m-VUHPnZ2dnUVZ_rOdnZ2d@supernews.com> <op.w9z7x2uk5zc71u@localhost>
Message-ID <nbOdnWkOO6CKA0DPnZ2dnUVZ_oydnZ2d@supernews.com> (permalink)

Show all headers | View raw


On 1/20/2014 11:14 AM, Rod Pemberton wrote:
> On Mon, 20 Jan 2014 01:54:25 -0500, Elizabeth D Rather
> <erather@forth.com> wrote:
>
>> On 1/19/2014 7:27 PM, Rod Pemberton wrote:
>
>> I'm baffled. CREATE makes a header; :NONAME doesn't. CREATE
>> doesn't turn on the compiler. :NONAME does. These differences
>> are critical, not trivial.
>>
>
> Based on your post and Mark's, I think my :NONAME is functioning
> like :NONAME combined with HEADER.
>
>>>> It sounds as though you have a very
>>>> mistaken notion of what :NONAME does.
>>>
>>> AIUI, :NONAME is the same as : except it doesn't install
>>> a name into the dictionary header of the word being defined
>>> and it returns an xt.  It's definition is terminated by
>>> a ; just like a : definition.  It compiles a definition
>>> just like a : definition.
>>>
>>> In most Forths, : calls CREATE to build the header
>>> and insert the name the word being defined.  After
>>> CREATE is finished, the colon definition continues
>>> compiling until ; .
>>
>> In most Forths that I'm familiar with, : calls a lower-level word to
>> build the header and insert the name. CREATE also calls that. However,
>> CREATE does *not* "continue compiling", instead it sets the default
>> action of the word just created to DODOES or equivalent with an
>> associated data location. : has no associated data location. In other
>> words, the only thing both : and CREATE share is a call to the
>> lower-level word to make the header.
>>
>
> Let me break down what I'm doing currently.
> It's been a while since I've read/coded the code,
> so hopefully, no misunderstandings/mistakes posted...
> This is what :NONAME CREATE : and ; are doing:
>
> :NONAME
> -the next few steps creates a dictionary header
> --blanks name field area (NFA)
> --updates link field address (LFA) with LAST
> --updates dictionary bits (part of NFA)
> --updates LAST
> --updates dictionary pointer (DP) to code field address (CFA)
> -puts HERE (at current CFA) on the stack for use as an XT
> -compiles ENTER into the definition (at current CFA)
> -turns on compiling ]
> -SMUDGEs the definition being compiled (turns on)
>
> :
> -executes :NONAME
> -executes BL WORD to get name of definition
> -executes COUNT
> -sets up values for CMOVE which consumes :NONAMEs XT
> -finds the name field (NFA)
> -executes CMOVE to move the definition's name into the name field
>
> ;
> -compiles EXIT into a definition
> -SMUDGEs the definition being compiled (turns off)
> -turns off compiling [
>
> CREATE
> -executes :

Should not execute : as it isn't building a colon definition. It's 
building a data object.

> -places HERE on the stack
> -executes ;

No need for ; or :

> -sets the dictionary pointer (DP) to code field address (CFA)

Why didn't HEADER leave it set correctly?

> -stores DOVAR into the code field address (CFA)
> -resets dictionary pointer (DP) to saved HERE on stack

You're wasting space and fiddling with DP much too much. CREATE should 
be very, very simple:

* Build header
* Set DOVAR in code field

That's all. One common definition of CREATE is:

: CREATE ( -- )   BL WORD COUNT (CREATE) ;

This assumes, of course, that (CREATE) will initialize the code field 
appropriately to return the data space address. If it's being used by 
other defining words (e.g. : ) they might change it. This, of course, 
assumes the dictionary is being built in RAM. Setting the code field 
with a default and replacing it when necessary can be less fiddly than 
having each defining word have to do its own, since a great many 
defining words can start off with the data space address and go on from 
there.

>> Consider the definition:
>>
>> : CONSTANT ( n -- )   CREATE ,
>>     DOES> ( -- n ) @ ;
>>
>> Here CREATE builds the header and , compiles the value in data space.
>> The fact that compiling continues is not due to CREATE, which has
>> finished executing, but to : which invoked CREATE and , and continued
>> compiling.
>>
>
> All the common definitions which use CREATE work correctly.

Good, but you're working a lot harder than you need to.

>>> AIUI, all I've done is switch things around to build
>>> : up from :NONAME instead of using CREATE.  If it's
>>> correct, which I believe it is, <BUILDS can be built
>>> from :NONAME also.
>>
>> <BUILDS and CREATE need to do two things that :NONAME
>> does not: build a header, and associate a data space
>> address. :NONAME turns on the compiler and records the
>> *code space* location of the associated xt,
>> neither of which <BUILDS or CREATE do.
>>
>> They have *nothing* in common.
>>
>> The distinction between code space and data space is critical
>> when you're dealing with RAM/FLASH architectures.
>>
>
> Okay, I suspect you're going to tell me to remove the header
> creation in :NONAME and place it into a word named HEADER
> or (CREATE).  Then, have : call HEADER or (CREATE).

That's a start. The whole purpose of :NONAME is to *not* have a header.

> So, then, the rough definition for : would become:
> : HEADER :NONAME BL WORD COUNT ... "get NFA" CMOVE ;

HEADER should do all the BL WORD COUNT stuff. In other words, it should 
build a complete header. And it should *not* do any compiling! Only : 
and :NONAME compile stuff. So take out the :NONAME.

> I'm assuming the rest is acceptable ... ?
>
> IIRC, :NONAME on my system needed a header for the dictionary
> to be linked together correctly.  If so, I'll have to check
> into why that is...  It's probably wise to fix the issue.

I think there are probably a lot of improvements possible. :NONAME 
*isn't* linked in the dictionary search; that's why it exists.

Cheers,
Elizabeth

-- 
==================================================
Elizabeth D. Rather   (US & Canada)   800-55-FORTH
FORTH Inc.                         +1 310.999.6784
5959 West Century Blvd. Suite 700
Los Angeles, CA 90045
http://www.forth.com

"Forth-based products and Services for real-time
applications since 1973."
==================================================

Back to comp.lang.forth | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-19 13:15 -0500
  Re: quick review of <BUILDS and CREATE history albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-01-19 20:07 +0000
    Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-19 21:45 +0000
  Re: quick review of <BUILDS and CREATE history Coos Haak <chforth@hccnet.nl> - 2014-01-19 22:02 +0100
  Re: quick review of <BUILDS and CREATE history Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-01-19 17:24 -0600
    Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-19 14:54 -1000
      Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-19 22:37 -0500
        Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-19 18:01 -1000
          Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-20 00:27 -0500
            Re: quick review of <BUILDS and CREATE history Elizabeth D Rather <erather@forth.com> - 2014-01-19 20:54 -1000
              Re: quick review of <BUILDS and CREATE history Elizabeth D Rather <erather@forth.com> - 2014-01-19 21:19 -1000
              Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-20 16:14 -0500
                Re: quick review of <BUILDS and CREATE history Elizabeth D Rather <erather@forth.com> - 2014-01-20 12:07 -1000
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-21 11:37 -0500
                Re: quick review of <BUILDS and CREATE history albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-01-21 17:41 +0000
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-21 08:30 -1000
                Re: quick review of <BUILDS and CREATE history oh2aun@gmail.com - 2014-01-21 11:17 -0800
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-21 09:44 -1000
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-21 15:18 -0500
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-21 12:07 -1000
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-21 22:04 -0500
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-21 19:21 -1000
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-22 13:38 +0000
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-22 08:50 -1000
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-23 17:17 -0500
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-23 13:46 -1000
                Re: quick review of <BUILDS and CREATE history Bernd Paysan <bernd.paysan@gmx.de> - 2014-01-24 15:07 +0100
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-25 15:18 +0000
                Re: quick review of <BUILDS and CREATE history Bernd Paysan <bernd.paysan@gmx.de> - 2014-01-25 20:18 +0100
                Re: quick review of <BUILDS and CREATE history Coos Haak <chforth@hccnet.nl> - 2014-01-25 20:44 +0100
                Re: quick review of <BUILDS and CREATE history Bernd Paysan <bernd.paysan@gmx.de> - 2014-01-25 21:41 +0100
                Re: quick review of <BUILDS and CREATE history "Alex McDonald" <blog@rivadpm.com> - 2014-01-25 22:47 +0000
                Re: quick review of <BUILDS and CREATE history Bernd Paysan <bernd.paysan@gmx.de> - 2014-01-26 01:54 +0100
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-27 16:49 +0000
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-27 15:40 +0000
                Re: quick review of <BUILDS and CREATE history Bernd Paysan <bernd.paysan@gmx.de> - 2014-01-27 23:00 +0100
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-27 19:43 -0500
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-28 09:25 +0000
                Re: quick review of <BUILDS and CREATE history Bernd Paysan <bernd.paysan@gmx.de> - 2014-01-28 19:45 +0100
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-30 15:32 +0000
                Re: quick review of <BUILDS and CREATE history albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-01-28 14:20 +0000
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-25 15:28 +0000
                Re: quick review of <BUILDS and CREATE history Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-01-25 13:51 -0600
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-27 15:34 +0000
                Re: quick review of <BUILDS and CREATE history Lars Brinkhoff <lars.spam@nocrew.org> - 2014-01-24 08:11 +0100
                Re: quick review of <BUILDS and CREATE history Mark Wills <markrobertwills@yahoo.co.uk> - 2014-01-24 01:28 -0800
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-24 05:00 -0500
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-24 09:32 -1000
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-24 17:48 -0500
                Re: quick review of <BUILDS and CREATE history "Elizabeth D. Rather" <erather@forth.com> - 2014-01-24 13:14 -1000
                Re: quick review of <BUILDS and CREATE history Mark Wills <markrobertwills@yahoo.co.uk> - 2014-01-24 16:16 -0800
                Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-02-23 12:13 -0500
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-22 13:32 +0000
            Re: quick review of <BUILDS and CREATE history Mark Wills <markrobertwills@yahoo.co.uk> - 2014-01-20 04:14 -0800
              Re: quick review of <BUILDS and CREATE history Andrew Haley <andrew29@littlepinkcloud.invalid> - 2014-01-20 06:31 -0600
                Re: quick review of <BUILDS and CREATE history Elizabeth D Rather <erather@forth.com> - 2014-01-20 08:04 -1000
                Re: quick review of <BUILDS and CREATE history anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2014-01-21 14:09 +0000
              Re: quick review of <BUILDS and CREATE history "Rod Pemberton" <dont_use_email@xnohavenotit.cnm> - 2014-01-20 16:14 -0500
  Re: quick review of <BUILDS and CREATE history trebor.english@gmail.com - 2014-01-22 17:44 -0800
  Re: quick review of <BUILDS and CREATE history trebor.english@gmail.com - 2014-01-22 18:24 -0800
    Re: quick review of <BUILDS and CREATE history albert@spenarnc.xs4all.nl (Albert van der Horst) - 2014-01-23 14:00 +0000
      Re: quick review of <BUILDS and CREATE history trebor.english@gmail.com - 2014-01-23 11:06 -0800
        Re: quick review of <BUILDS and CREATE history Paul Rubin <no.email@nospam.invalid> - 2014-01-23 11:33 -0800
          Re: quick review of <BUILDS and CREATE history trebor.english@gmail.com - 2014-01-23 11:42 -0800
        Re: quick review of <BUILDS and CREATE history Mikael Nordman <oh2aun@gmail.com> - 2014-01-23 11:51 -0800

csiph-web