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,951 messages   

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

   Message 117,036 of 117,951   
   albert@spenarnc.xs4all.nl to Anton Ertl   
   Use of { and } was Re: Back & Forth - Co   
   01 Feb 25 13:14:50   
   
   In article <2025Feb1.085049@mips.complang.tuwien.ac.at>,   
   Anton Ertl  wrote:   
   >dxf  writes:   
   >>If I use locals I'm more likely to   
   >>use the ANS notation.  I notice Forth Inc does too - perhaps why they were so   
   >>adverse to conceding to { } .   
   >   
   >The reason why Forth, Inc. argued against { } is that they support an   
   >existing code base that uses { } for comments; they use { } comments   
   >extensively in SwiftForth, and their customers use it, too.  They   
   >voted for {: :}, so they obviously don't have a problem with the   
   >ordering of locals in {: :} (which is the same as for { }).   
      
   Not knowing Swiftforth I have introduced { } for anonymous code snippets   
   for ciforth. These anonymous snippets work the same in interpret and compile   
   mode,   
      
   { DROP } EXECUTE   
   : xxx { DROP } EXECUTE ;   
      
   They must look familiar to those who use "normal" languages ;-) .   
   (swiftforth has a point too, { } is used for comment in Pascal.)   
      
   The dispatch table for equality in my lisp (version based on Mark Probst)   
   looks like:   
   "   
       \ For respective: nil pair number builtin symbol special compound   
       0   
       { = lisp-flag }   
       { = lisp-flag }   
       { number-num swap number-num = lisp-flag }   
       { = lisp-flag }   
       { >R symbol-name  R> symbol-name $= lisp-flag }   
       { = lisp-flag }   
       { = lisp-flag }   
       (create-table)  TO eq?-dispatch   
   "   
      
   Now introduce :NONAME and be surprised how clunky this becomes.   
      
   The implementation didn't cost me an arm and a leg:   
   "   
       ' TASK @ CONSTANT DOCOL   
       \ Denotation for lambda, ends with `}   
       : {   'SKIP , (FORWARD   HERE DOCOL ,   HERE CELL+ ,   
              STATE @ 1 STATE ! ; IMMEDIATE   
       : }  '(;) ,   STATE !   >R FORWARD) R>   POSTPONE LITERAL   
       ; IMMEDIATE   
   "   
      
   Considering the elementary character of this, it is written out   
   for speed.   
      
   If you have available the 4 brackets of the apocalypse it is   
   more straightforward:   
      
   : { (( (s ({) ;   IMMEDIATE   
   : } >R (}) s) )) R> 'LITERAL EXECUTE ; IMMEDIATE   
   [ LITERAL is the only state smart word in ciforth.   
     In interpret mode it does nothing.   
     In compile mode it compiles a literal. ]   
      
   As a reminder the 4 brackets:   
   \ Compact version of :NONAME .. ;  not linked in.   
    ({)   .. (})   
   \ Nest dictionary space.   
    ((  .. ))   
   \ (s s) save and restore STATE.   
     (s .. s)   
   \ Nest definitions (not used in the above)   
    ([) .. (])   
      
   In a complex Forth these words may be difficult to implement.   
      
   >   
   >- anton   
      
   Groetjes Albert   
   --   
   Temu exploits Christians: (Disclaimer, only 10 apostles)   
   Last Supper Acrylic Suncatcher - 15Cm Round Stained Glass- Style Wall   
   Art For Home, Office And Garden Decor - Perfect For Windows, Bars,   
   And Gifts For Friends Family And Colleagues.   
      
   --- 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