home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.forth      Forth programmers eat a lot of Bratwurst      117,927 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 117,152 of 117,927   
   dxf to albert@spenarnc.xs4all.nl   
   Re: Locals revisited   
   30 Mar 25 15:33:52   
   
   From: dxforth@gmail.com   
      
   On 28/03/2025 8:38 pm, albert@spenarnc.xs4all.nl wrote:   
   > In article <19029ff0c8e7cf53335fe62639308e7f92d10240@i2pn2.org>,   
   > dxf   wrote:   
   >> On 27/03/2025 11:02 pm, albert@spenarnc.xs4all.nl wrote:   
   >>> In article <87semzmwok.fsf@nightsong.com>,   
   >>> Paul Rubin   wrote:   
   >>>> albert@spenarnc.xs4all.nl writes:   
   >>>>> In hindsight my locals definition is not convincing, because carnal   
   >>>>> knowledge about the behaviour of the return stack is required.   
   >>>>   
   >>>> It's ok if it's for a specific implementation.  But what I'm having   
   >>>> trouble seeing is how the locals get popped in case of an exception.   
   >>>   
   >>>   
   >>> I showed it as an example of the pretty convincing usefulness   
   >>> of CO. For this the example had to have to be portable.   
   >>>   
   >>> A simpler example would be   
   >>> \ Temporary set  some-rounding-mode  for the duration of this word.   
   >>> : rounding set-rounding-mode CO truncate-mode set-rounding-mode ;   
   >>> ...   
   >>   
   >> Actually it was that example which caused me to *not* go ahead   
   >> and implement ;: in the kernel despite a cost of only one header.   
   >> How many calls to 'rounding' will you encounter in an application?   
   >   
   > `rounding: is an internal word in the fp package and it is used 4   
   > times.   
   >   
   >> My guess is one.  The usual example is HEX: but I already had (H.N)   
   >> that's more flexible.  For me at least locals was more credible but   
   >> again it fell into a range.  For a single use I'd do it manually;   
   >> for extensive use (where exceptions etc are likely) a proper locals   
   >> may be the only option.  OTOH such decision-making is exactly what   
   >> Forth has always been about.   
   >>   
   >>   
   >   
   > You can't argue with   
   >     :NONAME ." Before " .S CO ." After " .S ;   
   >     ' proc_contains_Heisenbug decorated   
   >   
   > Study python for the concept of decoration.   
   > This alone makes CO a worthwhile addition.   
   >   
   > I have (D.H) that uses CO. Undoubtedly your (H.N) is more complicated.   
      
   Possibly though much of the complication lies in what it needs to do - as   
   opposed to radix save/restore.   
      
   \ Convert unsigned number u to a hexadecimal string c-addr2 u2 in the   
   \ HOLD buffer beginning with the least-significant digits.  Exactly   
   \ +n hexadecimal characters are returned with any unused positions   
   \ being filled with character '0'.  BASE is preserved.   
   : (H.N) ( u +n -- c-addr2 u2 )   
     base @ >r hex <# 0 tuck ?do # loop #> r> base ! ;   
      
   \ Misc examples   
   : (H.)  ( u -- adr len )  [ 2 cells ] literal (h.n) ;   
   : (HW.) ( u -- adr len )  4 (h.n) ;   
   : (HB.) ( u -- adr len )  2 (h.n) ;   
      
   : (HD.) ( ud -- adr len )   
     (h.) holds  (h.)  [ -2 cells ] literal /string ;   
      
   : .HB ( u -- )  2 (h.n)  [char] $ hold  #> type space ;   
      
   : h.n ( u n -- )  (h.n) type ;   
      
   : DUMP ( addr u -- )  \ Dump u bytes in hex and ascii   
     cr  3 spaces  16 0 do  over i +  2 spaces  1 h.n  loop   
     bounds ?do   
       cr  50 ms  halt? if unloop then   
       i 4 h.n space   
       16 0  do  i j + c@  2 h.n space  loop   
       16 0  do  i j + c@  dup 127 bl within   
         if  drop  [char] .  then  emit   
       loop   
     16 +loop ;   
      
   --- SoupGate-DOS v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca