Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #42097

Re: old `leave` renamed to `exhaust`

From "HAA" <someone@microsoft.com>
Newsgroups comp.lang.forth
Subject Re: old `leave` renamed to `exhaust`
Date 2015-09-21 15:51 +1000
Organization Aioe.org NNTP Server
Message-ID <mto5oa$u43$1@speranza.aioe.org> (permalink)
References (6 earlier) <2015Sep15.171318@mips.complang.tuwien.ac.at> <mtieeo$h7v$1@speranza.aioe.org> <2015Sep19.124814@mips.complang.tuwien.ac.at> <mtjpq7$3rd$1@speranza.aioe.org> <2015Sep19.170230@mips.complang.tuwien.ac.at>

Show all headers | View raw


Anton Ertl wrote:
>
> Yes, sorry, I had not noticed that you use the broken "-1 +loop".
>
> As a simple task (with the proper counted loop), implement a word:
>
> rev-type ( c-addr u -- )
>
> that prints an ASCII string in reverse.  E.g.
>
> s" dog" cr char " emit rev-type char " emit \ prints "god"
> s" x"   cr char " emit rev-type char " emit \ prints "x"
> s" "    cr char " emit rev-type char " emit \ prints ""

In Forth the programmer gets to choose which loop to use:

: rev-type ( a u )  begin dup while 1- 2dup + c@ emit repeat 2drop ;

 (13 instructions using VFX)

 You don't need -LOOP

> >> Depending on the implementation and CPU, this may be
> >> slower at run-time than the variants above.
> >
> >On VFX  -1 +LOOP is 3 machine instructions and CELLS ADDR +
> >is 2 instructions.
>
> On VFX no words (as in the first variant) is 0 instructions.
>
> >I don't see the runtime for -LOOP being less.
>
> Let's just use Gforth's compat/loops.fs with VFX, and for
>
> [snipped]
>
> Two instructions more; the -LOOP implementation in compat/loops.fs
> implementation has some limitations, in particular, it's based on
> +LOOP, so it cannot be more efficient than +LOOP; but the overhead of
> computing addresses in the inner loop is still there in your code.

You can't have it both ways.  Either +LOOP is "broken" as you said and
deserves no part in the implementation of -LOOP.  Or +LOOP is very
efficient (which your disassembly shows) and Forth-83 gave users the
best loop possible.

: foo u-do i @ + 1 cells -loop ;
: bar do over i cells + @ + -1 +loop ;

foo = 23 instructions
bar = 18 instructions

Your original two examples followed by mine:

1000 constant addr
5 constant u

: t1 addr 1 cells - addr u 1- cells + u-do i 1 cells -loop ;
: t2 addr addr u cells + u-do i 1 cells - 1 cells -loop ;
: t3 0 u 1- do i cells addr + -1 +loop ;

t1 = 30 instructions
t2 = 31 instructions
t3 = 14 instructions





Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

old `leave` renamed to `exhaust` Marcos Cruz <null_email_so_use_my_contact_page@programandala.net> - 2015-09-07 20:29 +0000
  Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-08 14:52 +1000
    Re: old `leave` renamed to `exhaust` Mark Wills <markwills1970@gmail.com> - 2015-09-08 00:57 -0700
      Re: old `leave` renamed to `exhaust` Bernd Paysan <bernd.paysan@gmx.de> - 2015-09-08 15:19 +0200
    Re: old `leave` renamed to `exhaust` Marcos Cruz <null_email_so_use_my_contact_page@programandala.net> - 2015-09-08 16:25 +0000
      Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-09 11:39 +1000
        Re: old `leave` renamed to `exhaust` Marcos Cruz <null_email_so_use_my_contact_page@programandala.net> - 2015-09-09 10:42 +0000
          Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-10 14:05 +1000
            Re: old `leave` renamed to `exhaust` Marcos Cruz <null_email_so_use_my_contact_page@programandala.net> - 2015-09-10 13:33 +0000
              Re: old `leave` renamed to `exhaust` Coos Haak <chforth@hccnet.nl> - 2015-09-10 22:04 +0200
                Re: old `leave` renamed to `exhaust` Coos Haak <chforth@hccnet.nl> - 2015-09-10 22:13 +0200
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-11 13:14 +1000
                Re: old `leave` renamed to `exhaust` Coos Haak <chforth@hccnet.nl> - 2015-09-11 12:30 +0200
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-11 21:47 +1000
                Re: old `leave` renamed to `exhaust` Bernd Paysan <bernd.paysan@gmx.de> - 2015-09-11 14:09 +0200
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-12 11:29 +1000
                Re: old `leave` renamed to `exhaust` "Elizabeth D. Rather" <erather@forth.com> - 2015-09-11 16:05 -1000
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-14 12:25 +1000
                Re: old `leave` renamed to `exhaust` "Elizabeth D. Rather" <erather@forth.com> - 2015-09-13 17:53 -1000
                Re: old `leave` renamed to `exhaust` anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-09-14 08:33 +0000
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-15 16:55 +1000
                Re: old `leave` renamed to `exhaust` hughaguilar96@gmail.com - 2015-09-15 01:46 -0700
                Re: old `leave` renamed to `exhaust` Coos Haak <chforth@hccnet.nl> - 2015-09-15 15:14 +0200
                Re: old `leave` renamed to `exhaust` anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-09-15 15:13 +0000
                Re: old `leave` renamed to `exhaust` hughaguilar96@gmail.com - 2015-09-15 16:13 -0700
                Re: old `leave` renamed to `exhaust` jim.brakefield@ieee.org - 2015-09-15 17:05 -0700
                Re: old `leave` renamed to `exhaust` hughaguilar96@gmail.com - 2015-09-15 18:35 -0700
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-19 11:42 +1000
                Re: old `leave` renamed to `exhaust` anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-09-19 10:48 +0000
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-20 00:01 +1000
                Re: old `leave` renamed to `exhaust` anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-09-19 15:02 +0000
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-21 15:51 +1000
                Re: old `leave` renamed to `exhaust` "Elizabeth D. Rather" <erather@forth.com> - 2015-09-15 08:45 -1000
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-16 11:18 +1000
                Re: old `leave` renamed to `exhaust` anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-09-16 06:10 +0000
                Re: old `leave` renamed to `exhaust` "HAA" <someone@microsoft.com> - 2015-09-17 15:15 +1000
                Re: old `leave` renamed to `exhaust` anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-09-17 06:04 +0000
                Re: old `leave` renamed to `exhaust` Coos Haak <chforth@hccnet.nl> - 2015-09-11 14:16 +0200

csiph-web