On 17/08/2016 02:29, HAA wrote:
> Gerry Jackson wrote:
>> In the RfD for quotations it states that quotations just provide
>> syntactic sugar for code that can be written using :NONAME. This has led
>> to some opposition with statements summarised by "why bother and
>> complicate Forth with an unnecessary feature".
>
> I see :NONAME is a primitive - a low-level mechanism that can be applied
> to a variety of situations. While name-lessness in general is a bad thing
> (hard to test,
I've used :NONAME extensively and don't think such definitions are any
harder to test than other definitions.
> re-use etc) there can still be valid uses for :NONAME
Obviously.
> e.g.
> : +IS ( xt <name> -- )
> >r :noname r> compile, ' >body dup >r @ compile, postpone ; r> ! ;
>
When you post cryptic code like that you really ought to provide an
example of use - one writer many readers. Ordinarily I wouldn't have
bothered to decode it but as you replied to me I felt obliged to.
For the benefit of others here is an example of what it does (I think)
- prepending an action to another.
-------------------------
Gforth 0.7.9_20160113, Copyright (C) 1995-2015 Free Software Foundation,
Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit:
: +IS ( xt <name> -- )
>r :noname r> compile, ' >body dup >r @ compile, postpone ;
r> ! ; ok
: creator create , does> @ execute ; ok
:noname ." mushy peas"; creator msg ok
: msg-start ." chips and " ; ok
msg mushy peas ok
' msg-start +is msg ok
msg chips and mushy peas ok
: msg-start2 cr ." Fish, " ;
ok
' msg-start2 +is msg ok
msg
Fish, chips and mushy peas ok
----------------------------------
> IMO quotations aren't syntactic sugar for :NONAME,
I and the RfD didn't say they were. Code written using quotations can be
rewritten using :NONAME definitions but with (probably) reduced
readability. I just presented an example where rewriting using :NONAME
is possible but not sensible. The converse may or may not be true.
> they are a specific application of it.
Not necessarily, an implementation of quotations may or may not use :NONAME.
> Whatever the ills of quotations, they don't necessarily
> apply to :NONAME which is a different beast altogether.
>
What are the "ills of quotations"? The arguments I've seen are whether
the RfD should include access to parent locals which clearly don't apply
to :NONAME definitions that lack a parent definition.
--
Gerry