Re: Juggling system-compilation items

Liste des GroupesRevenir à cl forth 
Sujet : Re: Juggling system-compilation items
De : ruvim.pinka (at) *nospam* gmail.com (Ruvim)
Groupes : comp.lang.forth
Date : 11. Aug 2024, 00:17:31
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <v98sed$kldc$2@dont-email.me>
References : 1 2
User-Agent : Mozilla Thunderbird
On 2024-08-10 12:57, PMF wrote:
On Fri, 9 Aug 2024 14:05:47 +0000, Ruvim wrote:
 
Do you know a Forth system in which the following definition for "const"
is compiled but does not work as expected?
>
>
: const ( x "<spaces>name" -- )
   depth >r          ( x )                   ( R: n.depth )
   :                 ( x colon-sys )         ( R: n.depth )
   depth r> -        ( x colon-sys n.size )  ( R: )
   n>r               ( x )                   ( R: i*x n.size )
   postpone literal  (   )                   ( R: i*x n.size )
   nr>               ( colon-sys n.size )    ( R: )
   drop              ( colon-sys )
   postpone ;        (   )
;
>
>
t{ 123 const foo -> }t
t{ foo -> 3 }t
>
>
Note 3.1.5.1 System-compilation types
<https://forth-standard.org/standard/usage#subsubsection.3.1.5.1>
>
>
-- Ruvim
 Yes if fails on both my systems lxf and lxf64!
the reason if fails is that : stores the current depth and ; later
compares it with the actual
at that point. This is to catch unmatched loops and conditionals.
The usual use of >r r> works as intended
 : const >r : r> postpone literal postpone ; ;
Yes, my definition can be implemented simpler, but it is given only for illustration and test.
Another use case is to get xt that `:noname` leaves under colon-sys (published many times in comp.lang.forth since 2000 [1])
For example:
   : rec: ( "<spaces>name" -- colon-sys )
     defer  depth >r :noname depth r> - 1- roll
     latest-name name> defer!
   ;
   \ Usage example
   rec: fib ( u.index -- u.value )
     dup 2 u< if exit then
     dup 2 - fib swap 1- fib +
   ;
   t{ 0 fib 1 fib 2 fib 3 fib 4 fib -> 0 1 1 2 3 }t
Another real-life example in [2]. Regarding `latest-name` see [3].
Another use case is to factor out a definition builder using a helper method like this:
   : build-noname-with ( i*x xt.builder -- j*x xt.new  )
     \ xt.builder ( i*x -- j*x )
     depth >r :noname depth r> - n>r
       execute
     nr> drop postpone ;
   ;
   \ Usage example
   : compose-before ( xt2 xt1 -- xt3 )
     [: compile, compile, ;] build-noname-with
   ;
   : compose ( xt1 xt2 -- xt3 )
     swap compose-before
   ;
   t{ [: 1 ;] [: 2 ;] compose execute -> 1 2 }t
All such techniques are not available if the Forth system does not allow the stack depth to be changed between `:` and `;`.
Would you like to see these techniques available to standard programs?

 I think !csp and ?csp are common also in other systems. I certainly did
not invent them.
Yes, it's a simple method to check the control-flow structures balance from the FIG-Forth model.
I would suggest avoiding this method in Forth implementations.
[1] subject: colon-sys and ANS, 2000
<https://groups.google.com/g/comp.lang.forth/c/BU0sVOhxHQo/m/xJ7xXmNjV9YJ>
[2] minos2/md-viewer.fs
<https://github.com/forthy42/gforth/blob/3008f604af74aafd/minos2/md-viewer.fs#L356>
[3] [Proposal] New words: latest-name and latest-name-in
<https://forth-standard.org/proposals/new-words-latest-name-and-latest-name-in?hideDiff#reply-1249>
--
Ruvim

Date Sujet#  Auteur
9 Aug 24 * Juggling system-compilation items15Ruvim
10 Aug 24 +* Re: Juggling system-compilation items3PMF
11 Aug 24 i`* Re: Juggling system-compilation items2Ruvim
11 Aug 24 i `- Re: Juggling system-compilation items1Ruvim
10 Aug 24 +* Re: Juggling system-compilation items2mhx
11 Aug 24 i`- Re: Juggling system-compilation items1Ruvim
11 Aug 24 +- Re: Juggling system-compilation items1Krishna Myneni
11 Aug 24 `* Re: Juggling system-compilation items8Gerry Jackson
12 Aug 24  +* Re: Juggling system-compilation items2Ruvim
13 Aug 24  i`- Re: Juggling system-compilation items1Gerry Jackson
12 Aug 24  +* Re: Juggling system-compilation items3albert
13 Aug 24  i`* Re: Juggling system-compilation items2Gerry Jackson
14 Aug 24  i `- Re: Juggling system-compilation items1albert
12 Aug 24  `* Re: Juggling system-compilation items2Krishna Myneni
12 Aug 24   `- Re: Juggling system-compilation items1mhx

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal