Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RfC: Structures

1 view
Skip to first unread message

Peter Knaggs

unread,
Aug 31, 2010, 2:07:46 PM8/31/10
to
RfC: Structures
===============

2010=08-31 Revised into a documentation change (RfC)
2010-03-17 Corrected spelling of FILED:
Revised wording at Rostock meeting
Introduction of rationale text.
2010-02-24 Drafting of RfD
2009-09-03 Original wordsmithing of solution during 200x meeting.


Problem
=======

The X:structures extension defines FIELD: as:

10.6.2.xxxx FIELD: "field-colon" FACILITY EXT
( -- ) X:structures

The semantics of FIELD: are identical to the execution semantics
of the phrase:

ALIGNED 1 CELLS +FIELD

See: 10.6.2.---- +FIELD, 10.6.2.---- BEGIN-STRUCTURE and
10.6.2.---- END-STRUCTURE.

While this is a very concise definition, there are a few difficulties
with it:

1) The stack description is incorrect, it should be:
( n1 "<spaces>name" -- n2 )

2) It defines a child word which is not described. Normally this is
described in a "name Execution" clause.

3) There is no actual description of the word, simply what amounts
to a reference implementation.

This applies to CFIELD:, DFFIELD:, FFIELD: and SFFIELD: as well.


Solution
========

Replace the definition of FIELD: and friends with:


10.6.2.xxxx FIELD: "field-colon" FACILITY EXT
( n1 "<spaces>name" -- n2 ) X:structures

Skip leading space delimiters. Parse /name/ delimited by a space.
/Offset/ is the first cell aligned value greater than or equal to
n1. n2 = offset + 1 cells.

Create a definition for /name/ with the execution semantics given
below.

/name/ Execution: ( a-addr1 -- a-addr2 )
Add the /offset/ calculated during the compile time action to
a-addr1 giving the cell aligned address a-addr2.

See: 10.6.2.---- BEGIN-STRUCTURE, A.10.6.---- BEGIN-STRUCTURE,
A.10.6.2.---- FIELD:


Proposal
========

Modify the definition of the following words in accordance with the
text given in the Solution, above, with the modification of the
alignment as follows:

FIELD: cell aligned
CFIELD: character aligned
FFIELD: float aligned
SFFIELD: single-float aligned
DFFIELD: double-float aligned

Add the following as the Rationale for 10.6.2.---- FIELD:

A.10.6.2.xxxx FIELD:

Create an aligned single cell field in a data structure.

The various /x/FIELD: words provide for different alignment and
size allocation.

The /x/FIELD: words could be defined as:

: FIELD: ALIGNED 1 CELLS +FIELD ; \ cell aligned
: CFIELD: 1 CHARS +FIELD ; \ character aligned
: FFIELD: FALIGNED 1 FLOATS +FIELD ; \ float aligned
: SFFIELD: SFALIGNED 1 SFLOATS +FIELD ; \ single-float aligned
: DFFIELD: DFALIGNED 1 DFLOATS +FIELD ; \ double-float aligned


Author
======
Peter Knaggs <p...@bcs.org.uk>
Engineering, Mathematics and Physical Sciences,
University of Exeter, Exeter, Devon EX4 7QF, England

0 new messages