Re: [Flashforth-devel] For-next loops - the New Design
Brought to you by:
oh2aun
From: Peter J. <pe...@me...> - 2015-05-28 13:54:00
|
I don't have a FlashForth board handy tonight but I see that Gforth wraps around as you show for FF, and it implements a FOR loop that gives n+1 iterations. : test2 for i u. next ; ok 10 test2 10 9 8 7 6 5 4 3 2 1 0 ok 0 test2 0 ok 1 test2 1 0 ok The Gforth manual also states (at the end of section 5.8.3): "This loop structure is not defined in ANS Forth. In Gforth, this loop iterates n+1 times; i produces values starting with n and ending with 0. Other Forth systems may behave differently, even if they support FOR loops. To avoid problems, don’t use FOR loops." It doesn't worry (greatly) me that FF is a little different. It's important to me that it is stable and documented. Whatever Mike settles on, I'll put into the tutorial/reference material that I give to students. Peter J. On 28/05/15 22:11, om1zz wrote: > Peter, > > for people coming from high-level languages there will be ?for-next. > > 0 for-next may loop 65536 times, because the do-loop does the same (and it is therefore consistent), > You may try (in FF btw.): > > : mytest do i u. loop ; > 0 0 mytest > > what you will see? This: > > 0 0 mytest 0 1 2 3 4 5 6 7 8... > 65533 65534 65535 ok<#,ram> > > It loops 65536 times (2^16). That is normal in forth. > > Forth is not a high-level language, that has to be explained to the people coming from high-level area.. > > Igor > > ______________________________________________________________ >> Od: Peter Jacobs <pe...@me...> >> Komu: <fla...@li...> >> Datum: 28.05.2015 13:27 >> Předmět: Re: [Flashforth-devel] For-next loops - the New Design >> >> Igor, >> I'm going to disagree with you on preference. I think that most >> people will come to FF, not from assembler, but from some other >> high-level language and they will expect "0 for" to iterate 0 times. I >> know that I do. If I wanted to iterate 65536 times in one of my >> programs, I'd likely be wanting to do more iterations at some point and >> I'd use a 24-bit or 32-bit counter anyway. >> Regards, >> Peter J. >> >> >> On 28/05/15 21:03, om1zz wrote: >>> Do you insist on a single asm instruction for the entire for-next loop implementation? >>> Do-loop is min 30 instructions in FF. >>> >>> I think that with N vs. N+1 idea when handling for (in any form) you break the consistency of for-loop implementation understanding. >>> >>> I would easily spend another 1-2 asm instructions and do it consistent. Speed plays no role here. >>> When somebody wants to bitbang a pin it could be done in asm. >>> >>> N for .. >>> N ?for .. >>> >>> both will do N loops through the body. The only diff is the ?for skips zero. That is very consistent. >>> >>> 0 for >>> >>> will do M loops where M=2^16 in this case. That is also consistent as you work with 16bit assembler. >>> >>> I am suggesting that as a standard for the for-loop design for any architecture on my github. >>> >>> Igor. >>> >>> >>> >>> >>> ______________________________________________________________ >>>> Od: Mikael Nordman <mik...@fl...> >>>> Komu: <fla...@li...> >>>> Datum: 27.05.2015 17:59 >>>> Předmět: Re: [Flashforth-devel] For-next loops - the New Design >>>> >>>> Yes, Yes, >>>> I understand what you want. >>>> But you dont seem to understand that it cannot be done >>>> in a simple for..next loop that has only one decrement and branch >>>> instruction, and that has an index that counts down to zero. >>>> >>>> In order the get the full 16 bit loop count you have to give as input >>>> the N+1 count. >>>> >>>> But if you have some idea how to implement it in PIC assembly code, >>>> please write it out. >>>> >>>> BR Mike >>>> >>>> On 27.05.2015 10:32, om1zz wrote: >>>>> 0 _for 65535 65534 .. >>>>> .. 13 12 11 10 9 8 7 6 5 4 3 2 1 0 >>>>> 65536 ok<#,ram> >>>> ------------------------------------------------------------------------------ >>>> _______________________________________________ >>>> Flashforth-devel mailing list >>>> Fla...@li... >>>> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >>>> >>> ------------------------------------------------------------------------------ >>> _______________________________________________ >>> Flashforth-devel mailing list >>> Fla...@li... >>> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >> >> ------------------------------------------------------------------------------ >> _______________________________________________ >> Flashforth-devel mailing list >> Fla...@li... >> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >> |