1. New keyword added: continue

Continue has been added to Euphoria SVN. Continue is Exit's sibling.

for i = 1 to length(lines) do
    if length(lines[i]) = 0 or lines[i][1] = '#' then 
        continue -- start loop at next iteration
    end if

    -- You know the line has data and is not a comment line
    -- process the line
end for


--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » topic index » view message » categorize

2. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> Continue has been added to Euphoria SVN. Continue is Exit's sibling.
> 
> }}}
<eucode>
> for i = 1 to length(lines) do
>     if length(lines[i]) = 0 or lines[i][1] = '#' then 
>         continue -- start loop at next iteration
>     end if
> 
>     -- You know the line has data and is not a comment line
>     -- process the line
> end for
> </eucode>
{{{

> 
> --
> Jeremy Cowgar
> <a href="http://jeremy.cowgar.com">http://jeremy.cowgar.com</a>

This one was sorely needed! Thanks!

CChris

new topic     » goto parent     » topic index » view message » categorize

3. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> Continue has been added to Euphoria SVN. Continue is Exit's sibling.


But I seriously hope it is going to be renamed to something a lot more natural
such as 'next'.


-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

4. Re: New keyword added: continue

> Jeremy Cowgar wrote:
> > Continue has been added to Euphoria SVN. Continue is Exit's sibling.

Oh, at last! Thanks!

But I agree with Derek and I'd prefer a more natural such as 'next'.

Regards,

Salix

new topic     » goto parent     » topic index » view message » categorize

5. Re: New keyword added: continue

Salix wrote:
> 
> > Jeremy Cowgar wrote:
> > > Continue has been added to Euphoria SVN. Continue is Exit's sibling.
> 
> Oh, at last! Thanks!
> 
> But I agree with Derek and I'd prefer a more natural such as 'next'.
> 
> Regards,
> 
> Salix

Me too, antd that's how it's named in Æ.

But naming discussions are so ... , well, that I won't care how it gets
eventually named, as long as it stays in the language.

CChris

new topic     » goto parent     » topic index » view message » categorize

6. Re: New keyword added: continue

I'd prefer a more natural such as 'next'.

Bernie

My files in archive:
WMOTOR, XMOTOR, W32ENGIN, MIXEDLIB, EU_ENGIN, WIN32ERU, WIN32API 

Can be downloaded here:
http://www.rapideuphoria.com/cgi-bin/asearch.exu?dos=on&win=on&lnx=on&gen=on&keywords=bernie+ryan

new topic     » goto parent     » topic index » view message » categorize

7. Re: New keyword added: continue

Just another vote for 'next' rather than 'continue' in a for statement.

I am old enough to remember when 'next' was the end of a for statement
instead of the much better 'end for' used now, but I think the proposal
is a better use of .next'

Arthur Crump, Cheshire, UK.

----------------------------
Derek Parnell wrote:
> 
> Jeremy Cowgar wrote:
> > 
> > Continue has been added to Euphoria SVN. Continue is Exit's sibling.
> 
> 
> But I seriously hope it is going to be renamed to something a lot more natural
> such as 'next'.
> 
> 
> -- 
> Derek Parnell
> Melbourne, Australia
> Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

8. Re: New keyword added: continue

Arthur Crump wrote:
> 
> Just another vote for 'next' rather than 'continue' in a for statement.
> 
> I am old enough to remember when 'next' was the end of a for statement
> instead of the much better 'end for' used now, but I think the proposal
> is a better use of .next'
> 
> Arthur Crump, Cheshire, UK.
> 
> ----------------------------
> Derek Parnell wrote:
> > 
> > Jeremy Cowgar wrote:
> > > 
> > > Continue has been added to Euphoria SVN. Continue is Exit's sibling.
> > 
> > 
> > But I seriously hope it is going to be renamed to something a lot more
> > natural
> > such as 'next'.
> > 
> > 
> > -- 
> > Derek Parnell
> > Melbourne, Australia
> > Skype name: derek.j.parnell

Although it may not make as much sense for someone learing euphoria as a first
language, I imagine most people are not using it as a first language.

My guess is most people are coming from other languages such as VB or C. 
'continue' is what is used by both languages.  That is my vote.

new topic     » goto parent     » topic index » view message » categorize

9. Re: New keyword added: continue

Mike Sywensky wrote:
>  
> Although it may not make as much sense for someone learing euphoria as a first
> language, I imagine most people are not using it as a first language.  
> 
> My guess is most people are coming from other languages such as VB or C. 
> 'continue'
> is what is used by both languages.  That is my vote.

I just went to the computer language shootout and looked at the more popular
languages there. I suppose a more detailed study could be done via the TIBOE
language index, but here are my findings:

python = continue
c = continue
vb = continue
d = continue
basic = continue
pascal = continue
php = continue
perl = next
javascript = continue
tcl = continue

I agree after conversations here, looking in dictionary and comparing to other
devices, that next makes sense, but most people who program do not program in one
language, thus, similarity to a degree is good.

But the choice between continue, next, repeat, again or whatever else may come
up is not a huge deal to me personally. I am forced to use a few different
languages and have to adapt to minor nuances like this all the time, so... before
making any changes to the naming, I would like to hear more feedback from others
who have not spoken yet about the topic.

For me to change continue to next or whatever is about a 10-15 minute job for
me, not a big deal and can be done at any time, so I am going to no act quickly,
but let there be some more discussion.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

10. Re: New keyword added: continue

NEXT takes the least amount of typing.

Bernie

My files in archive:
WMOTOR, XMOTOR, W32ENGIN, MIXEDLIB, EU_ENGIN, WIN32ERU, WIN32API 

Can be downloaded here:
http://www.rapideuphoria.com/cgi-bin/asearch.exu?dos=on&win=on&lnx=on&gen=on&keywords=bernie+ryan

new topic     » goto parent     » topic index » view message » categorize

11. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> I agree after conversations here, looking in dictionary and comparing to other
> devices, that next makes sense, but most people who program do not program in
> one language, thus, similarity to a degree is good.

I vote for 'next.' I think VBA uses next and I use VBA at work.

new topic     » goto parent     » topic index » view message » categorize

12. Re: New keyword added: continue

c.k.lester wrote:
> I vote for 'next.' I think VBA uses next and I use VBA at work.

VBA does not use next as a continue. It uses next as a end for...


for int i = 1 to 10
   ' do some code here
next

To implement continue in VBA you use goto...

for int i = 1 to 10
    if i = 5 goto continue
    ' do some code
continue:
    ' Label right next to the end of the for loop
next

So, next in Euphoria would conflict totally w/your next in VBA.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

13. Re: New keyword added: continue

Jeremy Cowgar wrote:
> c.k.lester wrote:
> > I vote for 'next.' I think VBA uses next and I use VBA at work.
> VBA does not use next as a continue. It uses next as a end for...

Well, you can see I never use a continue construct. :D

I still like 'next' better because it's more appropriate and I only have to
type 4 letters instead of 8. That's a 50% increase in efficiency.

new topic     » goto parent     » topic index » view message » categorize

14. Re: New keyword added: continue

'next' is more likely to be used as a variable name
- linked list node's next
- next entry
- next coming input

so i vote for 'continue'.

new topic     » goto parent     » topic index » view message » categorize

15. Re: New keyword added: continue

Mike Sywensky wrote:
> 
> Although it may not make as much sense for someone learing euphoria as a first
> language, I imagine most people are not using it as a first language.  
> 
> My guess is most people are coming from other languages such as VB or C. 
> 'continue'
> is what is used by both languages.  That is my vote.

I've used both 'continue' and 'next'.  Either one is fine by me.

Matt

new topic     » goto parent     » topic index » view message » categorize

16. Re: New keyword added: continue

c.k.lester wrote:
> 
> Jeremy Cowgar wrote:
> > c.k.lester wrote:
> > > I vote for 'next.' I think VBA uses next and I use VBA at work.
> > VBA does not use next as a continue. It uses next as a end for...
> 
> Well, you can see I never use a continue construct. :D
> 
> I still like 'next' better because it's more appropriate and I only have to
> type 4 letters instead of 8. That's a 50% increase in efficiency.

And let's be honest here, folks, CK needs all the help he can get...

Matt

new topic     » goto parent     » topic index » view message » categorize

17. Re: New keyword added: continue

Matt Lewis wrote:
> 
> Mike Sywensky wrote:
> > 
> > Although it may not make as much sense for someone learing euphoria as a
> > first
> > language, I imagine most people are not using it as a first language.  
> > 
> > My guess is most people are coming from other languages such as VB or C. 
> > 'continue'
> > is what is used by both languages.  That is my vote.
> 
> I've used both 'continue' and 'next'.  Either one is fine by me.
> 
> Matt

I prefer continue, I think, for reasons that others have mentioned -- existing
use of "next" as an identifier.

--
A complex system that works is invariably found to have evolved from a simple
system that works.
--John Gall's 15th law of Systemantics.

"Premature optimization is the root of all evil in programming."
--C.A.R. Hoare

j.

new topic     » goto parent     » topic index » view message » categorize

18. Re: New keyword added: continue

Matt Lewis wrote:
> c.k.lester wrote:
> > I still like 'next' better because it's more appropriate and I only have to
> > type 4 letters instead of 8. That's a 50% increase in efficiency.
> And let's be honest here, folks, CK needs all the help he can get...

Amen to that!

new topic     » goto parent     » topic index » view message » categorize

19. Re: New keyword added: continue

Mike Sywensky wrote:

> Although it may not make as much sense for someone
> learing euphoria as a first language,

 ... or still make sense after years of usage.

>  I imagine most people are not using it as a first language.  

... and yet there are a lot of people who are actually using Eu as a first-ish
language.

> My guess is most people are coming from other languages such as VB or C.  

What is this 'C' thing you speak of and what has Victoria Bitter got to do with
programming?  blink


-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

20. Re: New keyword added: continue

Derek Parnell wrote:
> 
> ... and yet there are a lot of people who are actually using Eu as a first-ish
> language.

And by teaching the continue, we are not doing them a dis-service. Most
programmers today are going to be multi-lingual. Not all, but most.

Please see the post:

http://www.openeuphoria.org/EUforum/m20765.html

Which lists a few languages that I researched. I found 1 that uses next, and it
is perl, but it has a rather complex looping interface such as a continue block
that contains next, last, redo and retry.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

21. Re: New keyword added: continue

Jeremy Cowgar wrote:
 I suppose a more detailed study could be done via the TIBOE
> language index, but here are my findings:
> 
> python = continue
> c = continue
> vb = continue
> d = continue
> basic = continue
> pascal = continue
> php = continue
> perl = next
> javascript = continue
> tcl = continue

But aren't we supposed to be learning from the mistakes of the past?

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

22. Re: New keyword added: continue

Derek Parnell wrote:
> 
> But aren't we supposed to be learning from the mistakes of the past?
>

Hm. #1, I'm not entirely sure continue is a mistake. #2, there is nothing
inherently evil about continue and tradition should carry quite a bit of weight
in this area. If there was a major flaw, then we should learn but I'm not seeing
a huge flaw.

Again, please understand, I'm just playing the "devils advocate" trying to
promote a healthy debate about it. That's how we will do a service to Euphoria,
however, I *think* I am on the side of continue, but am waffling. However, the
debate is far from over.

I do think it's possible, that if we choose next, in the future we may look back
on things and treat the decision of going to next as one of those things in the
past we should learn a lesson from.

Another thought that just came to my mind is there is great talk about being
able to embed Euphoria into C and use Euphoria as a scripting language to extend
existing C applications. If that happens, we will have more and more C
programmers using Euphoria. Thus, that should bear a *little* (probably not a
lot) weight in the decision of next/continue.

Probably what we should do is collect pro's and con's, then create a summary of
those on the wiki. Then reference the wiki and make a decision.

So, any pro's and con's out there people want to have recorded that has not
already been said?

For continue, 
pros:
  1. standard
cons:
  1. what does it mean?

For next,
pros:
  1. meaning is clearer (next iteration)
cons:
1. use is common in variable names or function names (i.e. any iterator, list,
  database connection, etc...)
  2. not standard or traditional
3. conflicts with other common languages such as basic, VBA, ASP (yes, all
  Microsoft).

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

23. Re: New keyword added: continue

Derek Parnell wrote:
> 
> Jeremy Cowgar wrote:
>  I suppose a more detailed study could be done via the TIBOE
> > language index, but here are my findings:
> > 
> > python = continue
> > c = continue
> > vb = continue
> > d = continue
> > basic = continue
> > pascal = continue
> > php = continue
> > perl = next
> > javascript = continue
> > tcl = continue
> 
> But aren't we supposed to be learning from the mistakes of the past?

Yeas, all these extra words, meaning different things to different people, when
"goto" is so clear and direct and simple. <sigh>


Kat

new topic     » goto parent     » topic index » view message » categorize

24. Re: New keyword added: continue

> On 11 May 2008 at 3:29, Derek Parnell wrote (maybe snipped):

> Jeremy Cowgar wrote:
> > 
> > Continue has been added to Euphoria SVN. Continue is Exit's sibling.
> 
> 
> But I seriously hope it is going to be renamed to something a lot more
> natural such as 'next'.
> 

Why not "loop"?

-- 
_
_| euler f german
_| sete lagoas, mg, brazil
_| efgerman{AT}gmail{DOT}com

new topic     » goto parent     » topic index » view message » categorize

25. Re: New keyword added: continue

Add to the pros for next that it is shorter to type.
Symmetrically, a con for continue is its being longer.

CChris

new topic     » goto parent     » topic index » view message » categorize

26. Re: New keyword added: continue

Euler German wrote:
> 
> > On 11 May 2008 at 3:29, Derek Parnell wrote (maybe snipped):
> 
> > Jeremy Cowgar wrote:
> > > 
> > > Continue has been added to Euphoria SVN. Continue is Exit's sibling.
> > 
> > 
> > But I seriously hope it is going to be renamed to something a lot more
> > natural such as 'next'.
> > 
> 
> Why not "loop"?
> 
> -- 
> _
> _| euler f german
> _| sete lagoas, mg, brazil
> _| efgerman{AT}gmail{DOT}com
> 

Good catch.

However, if we are to add a loop construct that tests at the end (a do ... while
or repeat ... until loop), then, as we couldn't use repeat nor do, loop would be
the natural choice. This is why I keep thinking "next" is a little better, but
not by much.

CChris

new topic     » goto parent     » topic index » view message » categorize

27. Re: New keyword added: continue

Why? 
Here's how you use one keyword instead of six:

--repeat until
:repeat
x -= 1  
if x > 12 then goto repeat end if


-- case
atom fred, a, d
fred = 45
a = 1
d = 44

goto x
 puts(1,x&" is not covered") goto caseend
   :1 puts(1,"it's 1!") goto caseend
   :34 puts(1,"wow, 34!")
   :"Sam" puts(1,"you got Sam!" goto caseend
   :a+d puts(1,"Yep, fred is 45!") goto caseend
:caseend

-- continue, retry, restart, and next
  :restart
for loop = 1 to 12 do
  :retry
  -- code    
    if test = failed then goto retry end if
    if thistest = failed then goto restart end if
    if bored = true then goto next end if
    if done then goto demoend end if
  -- code
  :next
end for
:demoend


You know exactly where each "goto" lands, each :target can be in your own native
language, and OOEU prooves it can be done. It's ONE word. It's so SIMPLE.

Kat

new topic     » goto parent     » topic index » view message » categorize

28. Re: New keyword added: continue

Kat wrote:

<snip>
 
> You know exactly where each "goto" lands, each :target can be in your own
> native
> language, and OOEU prooves it can be done. It's ONE word. It's so SIMPLE.
> 
> Kat

Yes, but then I wouldn't have so much fun reading the reams of stuff generated
over one word smile

Chris

new topic     » goto parent     » topic index » view message » categorize

29. Re: New keyword added: continue

Kat wrote:
> 
> Why? 
> Here's how you use one keyword instead of six:
> 
> }}}
<eucode>
> 
> --repeat until
> :repeat
> x -= 1  
> if x > 12 then goto repeat end if
> 
> 
> -- case
> atom fred, a, d
> fred = 45
> a = 1
> d = 44
> 
> goto x
>  puts(1,x&" is not covered") goto caseend
>    :1 puts(1,"it's 1!") goto caseend
>    :34 puts(1,"wow, 34!")
>    :"Sam" puts(1,"you got Sam!" goto caseend
>    :a+d puts(1,"Yep, fred is 45!") goto caseend
> :caseend
>
> -- continue, retry, restart, and next
>   :restart
> for loop = 1 to 12 do
>   :retry
>   -- code    
>     if test = failed then goto retry end if
>     if thistest = failed then goto restart end if
>     if bored = true then goto next end if
>     if done then goto demoend end if
>   -- code
>   :next
> end for
> :demoend
> 
> </eucode>
{{{


The above code is not entirely correct or as simple as it seems. Let's start
with the case statement. I think a case statement would a much better choice.
Why? What if you want two case statements, either nested or in the same function
in different sections that answer both to the integer 1 ?

goto x
  :1 puts "One!\n"
  :2 puts "Two!\n"
:caseend

goto y
  :1 puts "One!\n" -- invalid already used
  :2 puts "Two!\n" -- invalid already used
:caseend -- invalid already used


The for loop with next, retry, exit, restart, etc... First to program might be a
bit of a chore because on the keywords "end for" the stack is cleaned up, temp
variables cleared, etc... A direct goto out of the for loop w/o hitting an end
for would leave the internals dirty. It should be able to detect that it went out
of the loop and then clean up, but it's not as easy as pushing adding a label and
going to a label in the backend as you would think.

#2 with the for loop, it suffers the same fate as the case statement. Sure, on
the first for loop you can use :retry, :end, :next, :restart, but then on
subsequent for loops in the same context (in top level or inside a function), you
would have to get creative in your naming... :end2, :next2, :restart2, etc...
Then have 1 for loop that is nested in another, and then later in the function
you add a new for loop. Then, as time goes on, you add a for loop at the
beginning of the function. Now, your first for loop is named :end3, :restart3,
and your second is just :end, :restart, etc... and an inner is :restart3, etc...
It begins to get pretty confusing.

So, while I personally think a goto statement is a good thing, I do not think it
is a replacement for exit, continue and a case statement.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

30. Re: New keyword added: continue

For me, the word "continue" (or "next" or "exit" or whatever) makes the context
far more clear when trying to understand the code.

I've seen very few uses of goto that can't easily be expressed in a better way
in a high-level language.

--
A complex system that works is invariably found to have evolved from a simple
system that works.
--John Gall's 15th law of Systemantics.

"Premature optimization is the root of all evil in programming."
--C.A.R. Hoare

j.

new topic     » goto parent     » topic index » view message » categorize

31. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> Kat wrote:
> > 
> > Why? 
> > Here's how you use one keyword instead of six:
> > 
> > }}}
<eucode>
> > 
> > --repeat until
> > :repeat
> > x -= 1  
> > if x > 12 then goto repeat end if
> > 
> > 
> > -- case
> > atom fred, a, d
> > fred = 45
> > a = 1
> > d = 44
> > 
> > goto x
> >  puts(1,x&" is not covered") goto caseend
> >    :1 puts(1,"it's 1!") goto caseend
> >    :34 puts(1,"wow, 34!")
> >    :"Sam" puts(1,"you got Sam!" goto caseend
> >    :a+d puts(1,"Yep, fred is 45!") goto caseend
> > :caseend
> >
> > -- continue, retry, restart, and next
> >   :restart
> > for loop = 1 to 12 do
> >   :retry
> >   -- code    
> >     if test = failed then goto retry end if
> >     if thistest = failed then goto restart end if
> >     if bored = true then goto next end if
> >     if done then goto demoend end if
> >   -- code
> >   :next
> > end for
> > :demoend
> > 
> > </eucode>
{{{

> 
> The above code is not entirely correct or as simple as it seems. Let's start
> with the case statement. I think a case statement would a much better choice.
> Why? What if you want two case statements, either nested or in the same
> function
> in different sections that answer both to the integer 1 ?
> 
> }}}
<eucode>
> goto x
>   :1 puts "One!\n"
>   :2 puts "Two!\n"
> :caseend
> 
> goto y
>   :1 puts "One!\n" -- invalid already used
>   :2 puts "Two!\n" -- invalid already used
> :caseend -- invalid already used
> </eucode>
{{{


I wasn't arguing against the case, i have been in favor of case before, and
would use it if it existed. I mentioned that in #Euphoria even. Before i left the
channel. If you do make a case for case in Eu, please look at how nicely Matt did
the case/goto targets in OOEU. I suspect even those could be made more versatile.

> The for loop with next, retry, exit, restart, etc... First to program might
> be a bit of a chore because on the keywords "end for" the stack is cleaned up,
> temp variables cleared, etc... A direct goto out of the for loop w/o hitting
> an end for would leave the internals dirty. It should be able to detect that
> it went out of the loop and then clean up, but it's not as easy as pushing
> adding
> a label and going to a label in the backend as you would think.

Depends on how it's done. In some languages, the loop is nearly a second
program, and leaving it's code space clears everything that's not in the
proc/funct it's nested in. Such "nearly a 2nd program" also justified nesting
functions and procedures inside other functions of procedures, making the
internal proc/func local to the proc/func it was nested in. I don't know how Eu
does it.
 
> #2 with the for loop, it suffers the same fate as the case statement. Sure,
> on the first for loop you can use :retry, :end, :next, :restart, but then on
> subsequent for loops in the same context (in top level or inside a function),
> you would have to get creative in your naming... :end2, :next2, :restart2,
> etc...
> Then have 1 for loop that is nested in another, and then later in the function
> you add a new for loop. Then, as time goes on, you add a for loop at the
> beginning
> of the function. Now, your first for loop is named :end3, :restart3, and your
> second is just :end, :restart, etc... and an inner is :restart3, etc... It
> begins
> to get pretty confusing.

OMGess, do you really program like that?
 
> So, while I personally think a goto statement is a good thing, I do not think
> it is a replacement for exit, continue and a case statement.

I nominate it again for exit, continue, restart, next, retry (not the error
handling retry), or any other keyword where the purpose is to get around
intervening code. In your example of nested loops, i have no clue where an exit
would goto, and in most cases i bet it would not goto where i wanted. There's
been numerous posts showing an exit not traveling far enough, leading to more
flag tests to see if it's necessary to exit some more. One goto would have been
enough, and quite clear, mentioning a descriptive target at both ends of the
jump, and easy to find with text search in an editor.

While i am at this example of nested loops, that's about the only reason i use
goto, the others being to simulate case i don't have, hop some debug code, or get
right to the end of a procedure (tis easy to exit a function, you can return from
anywhere inside it)(altho i have often put cleanup code at the bottoms of
proc/func and goto that code before leaving).

Case is a clear goto, but without a scope limit at the bottom (</case> ?), your
objection to using goto for case is almost correct. I think Matt considered a
goto switch that prohibited reverse :target lookups, which would have partly
solved your case objection. In any case, i believe it looked for the next :target
down the code that was in scope, and on not finding one, then looked down from
the beginning of the scope. I can still see gotchas, and am not against case to
solve those.

Kat

new topic     » goto parent     » topic index » view message » categorize

32. Re: New keyword added: continue

Kat wrote:
>  
> Depends on how it's done. In some languages, the loop is nearly a second
> program,
> and leaving it's code space clears everything that's not in the proc/funct
> it's
> nested in. Such "nearly a 2nd program" also justified nesting functions and
> procedures inside other functions of procedures, making the internal proc/func
> local to the proc/func it was nested in. I don't know how Eu does it.

Yes, that's how it would be done, but in your example, there were things like
endcase, endfor, etc... those are outside the loop.

> > #2 with the for loop, it suffers the same fate as the case statement. Sure,
> > on the first for loop you can use :retry, :end, :next, :restart, but then on
> > subsequent for loops in the same context (in top level or inside a
> > function),
> > you would have to get creative in your naming... :end2, :next2, :restart2,
> > etc...
> > Then have 1 for loop that is nested in another, and then later in the
> > function
> > you add a new for loop. Then, as time goes on, you add a for loop at the
> > beginning
> > of the function. Now, your first for loop is named :end3, :restart3, and
> > your
> > second is just :end, :restart, etc... and an inner is :restart3, etc... It
> > begins
> > to get pretty confusing.
> 
> OMGess, do you really program like that?
>

Do I have nested loops? I sure do. Do I sometimes go back and add a new loop to
a function? I sure do. That's all the above was showing, but using your example
of goto. Because it is such a mess, I was using it as a case against using a goto
as you described.
  
> > So, while I personally think a goto statement is a good thing, I do not
> > think
> > it is a replacement for exit, continue and a case statement.
> 
> I nominate it again for exit, continue, restart, next, retry (not the error
> handling retry), or any other keyword where the purpose is to get around
> intervening
> code. In your example of nested loops, i have no clue where an exit would
> goto,
> and in most cases i bet it would not goto where i wanted. There's been
> numerous
> posts showing an exit not traveling far enough, leading to more flag tests to
> see if it's necessary to exit some more. One goto would have been enough, and
> quite clear, mentioning a descriptive target at both ends of the jump, and
> easy
> to find with text search in an editor.

An exit and continue could be modified pretty easy to do something like this:

for a = 1 to 5 do
  for b = 1 to 5 do
    for c = 1 to 5 do
        exit 2 -- exit 2 loops
    end for
    -- never reached
    puts(1, "Hello!\n")
  end for

  printf(1, "%d,", {a})
end for


Output of above is 1,2,3,4,5. The same could be done for continue. Before
enabling goto to exit a loop, I would nominate the above construct. If a
parameter was not given to exit or continue, it would simply exit 1 loop as
normal.

However, can we please move goto discussions to the new Goto? thread? Thanks.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

33. Re: New keyword added: continue

Kat wrote:
> 
> 
> Why? 
> Here's how you use one keyword instead of six:
> 
> }}}
<eucode>
> 
> --repeat until
> :repeat
> x -= 1  
> if x > 12 then goto repeat end if
> 
> 
> -- case
> atom fred, a, d
> fred = 45
> a = 1
> d = 44
> 
> goto x
>  puts(1,x&" is not covered") goto caseend
>    :1 puts(1,"it's 1!") goto caseend
>    :34 puts(1,"wow, 34!")
>    :"Sam" puts(1,"you got Sam!" goto caseend
>    :a+d puts(1,"Yep, fred is 45!") goto caseend
> :caseend
> 
> -- continue, retry, restart, and next
>   :restart
> for loop = 1 to 12 do
>   :retry
>   -- code    
>     if test = failed then goto retry end if
>     if thistest = failed then goto restart end if
>     if bored = true then goto next end if
>     if done then goto demoend end if
>   -- code
>   :next
> end for
> :demoend
> 
> </eucode>
{{{

> 
> You know exactly where each "goto" lands, each :target can be in your own
> native
> language, and OOEU prooves it can be done. It's ONE word. It's so SIMPLE.
> 
> Kat

You know where each goto lands, granted.
But you don't know where you land from, as any label can be targeted from
scarrered places. And that's why soem people are downright against it, and why I
don't like using it.

I had found out this: when you start writing code, and it is naive an simple,
then goto are as easy to read as anything, and perhaps easier.

Then, the code becomes more complex because there's a handful of special cases,
and you now have to guarantee that it hardly matters, when you reach a label,
what was the program state just before. It simply doesn't work. You can always
set up flags, but then tell me that you never make mistakes updating them...

I tried to implement goto in Æ. It works. But I added a twist: all goto
statements must have a label, and there is another builtin, come_from(), which
retrieves the last goto label you jumped from. Otherwise, I'd say: goto is nice,
it's one keyword instead of 6, is not hard to type, but it makes maintaining code
so much trickier.

Pascal compilers didn't recognise goto, unless a specific option was turned on.
Perhaps that would be the way to go: if you want goto, have it, but know that you
are doing things the hard way. I still think some equivalent of come_from() is
necessary to make goto usable in the Euphoria framework - you know, that world
where raw pointers are considered unsafe -.

CChris

new topic     » goto parent     » topic index » view message » categorize

34. Re: New keyword added: continue

CChris wrote:
> 
> Pascal compilers didn't recognise goto, unless a specific option was turned
> on. Perhaps that would be the way to go: if you want goto, have it, but know
> that you are doing things the hard way. I still think some equivalent of
> come_from()
> is necessary to make goto usable in the Euphoria framework - you know, that
> world where raw pointers are considered unsafe -.
> 

I do not think this is a viable option as it would introduce code
incompatabilities. Say, John likes goto's and writes a library but Joe does not
like goto's. He downloads John's library and cannot use it because he will not
enable gotos. Then, John will start declaring "goto must be enabled", etc... I
think that one Euphoria programmer should be able to run another Euphoria
application in the same version w/o incompatibilities.

Along the lines of one of the requirements for the standard library... no
external dependencies. This is so if Jane writes a program, she knows it will run
on Jim's install of Euphoria.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

35. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> CChris wrote:
> > 
> > Pascal compilers didn't recognise goto, unless a specific option was turned
> > on. Perhaps that would be the way to go: if you want goto, have it, but know
> > that you are doing things the hard way. I still think some equivalent of
> > come_from()
> > is necessary to make goto usable in the Euphoria framework - you know, that
> > world where raw pointers are considered unsafe -.
> > 
> 
> I do not think this is a viable option as it would introduce code
> incompatabilities.
> Say, John likes goto's and writes a library but Joe does not like goto's. He
> downloads John's library and cannot use it because he will not enable gotos.
> Then, John will start declaring "goto must be enabled", etc... I think that
> one Euphoria programmer should be able to run another Euphoria application in
> the same version w/o incompatibilities.
> 
> Along the lines of one of the requirements for the standard library... no
> external
> dependencies. This is so if Jane writes a program, she knows it will run on
> Jim's install of Euphoria.

Ok, don't turn off goto, and then Jane's code can run on Jim's computer.

Kat

new topic     » goto parent     » topic index » view message » categorize

36. Re: New keyword added: continue

My vote is for continue, not that it matters hugely. My reasons are that of the
10 languages listed about 9 of them use continue and I think consistency is
important. Especially given the earlier argument that next in VBA means "end for"
and hence leans towards more confusion.

I speak as a developer who currently is primarily using Euphoria and perl, and
perl was the only one of the 10 that uses next. However there are so many
significant syntax differences between perl and Euphoria that consistency of the
use of next pales in comparison. Perl requires a semi-colon at the end of every
line. Perl uses braces for code blocks. etc.

Anyway - hoorah for this new addition to Euphoria, whatever it ends up being
called. Thank you.

Cheers,
Mark

new topic     » goto parent     » topic index » view message » categorize

37. Re: New keyword added: continue

Derek Parnell wrote:
> 
> Jeremy Cowgar wrote:
>  I suppose a more detailed study could be done via the TIBOE
> > language index, but here are my findings:
> > 
> > python = continue
> > c = continue
> > vb = continue
> > d = continue
> > basic = continue
> > pascal = continue
> > php = continue
> > perl = next
> > javascript = continue
> > tcl = continue
> 
> But aren't we supposed to be learning from the mistakes of the past?
> 
> -- 
> Derek Parnell
> Melbourne, Australia
> Skype name: derek.j.parnell


Next def: Immediately following in time, ORDER, importance, etc.
Cont def: To go on after suspension or interruption.
Cont def: To go on with or persist in.

I think you can make a case for either word, but because next implies
an iteration I would prefer it.  The truth is, I don't have a dog in
this hunt, because it doesn't really provide new capability.

loop
  if true next
  code skipped here. 
end loop

or

loop
  if false
    code skipped here.
  end if
end loop

The results are the same.  I also prefer type 4 letters to 8.
NEXT is preferable to CONT for you wiseguys that say both can be 4. blink

new topic     » goto parent     » topic index » view message » categorize

38. Re: New keyword added: continue

skip def: To jump lightly over.

...for those leaning whimsically (also 4 letters.)

new topic     » goto parent     » topic index » view message » categorize

39. Re: New keyword added: continue

I don't usually like to save typing at the expense of clarity.

C is pretty good at that, though...

smile

--
A complex system that works is invariably found to have evolved from a simple
system that works.
--John Gall's 15th law of Systemantics.

"Premature optimization is the root of all evil in programming."
--C.A.R. Hoare

j.

new topic     » goto parent     » topic index » view message » categorize

40. Re: New keyword added: continue

ken mortenson wrote:
> 
> skip def: To jump lightly over.
> 
> ...for those leaning whimsically (also 4 letters.)

goto def: to continue or next or resume or retry or restart or exit or entry at
another location

.. also 4 letters.

Kat

new topic     » goto parent     » topic index » view message » categorize

41. Re: New keyword added: continue

Kat wrote:
> ken mortenson wrote:
> > skip def: To jump lightly over.
> > ...for those leaning whimsically (also 4 letters.)
> goto def: to continue or next or resume or retry or restart or exit or entry
> at another location

How do you get next/continue or restart with goto (using only 4 letters?)? I
don't see a way to iterate using just goto. You'd have to do all sorts of
other stuff, methinks, to emulate these easier-to-use terms.

new topic     » goto parent     » topic index » view message » categorize

42. Re: New keyword added: continue

Kat,

Regarding GOTO, do not be drawn to the dark side.  Are you seduced by it's
power?!!! [insert Vader's heavy breathing here.  I almost said Darth, I'm
such a nerd!]

This is another one of those humble programmer issues for me.

Is the concept of structured programming a good thing?  Even though sometimes
it means fitting things to a structure rather than what may seem to be a
more direct way of coding?

One of the tenants of structured programming is that a block of code should
have exactly one entrance and one exit (there is some confusion on this point
that I will illustrate in a moment.)

Why?  Because it reduces the stress on the programmer.  One entrance means,
no guessing about where to start in the code.  Once exit means you know
where the code continues.  Some may say, "but we're only talking about
once we're inside the block of code!"  You can make a case for that, but
it's not a strong case.  This also goes for exit [how many levels?] which
is a semi-structured kind of goto.

GOTO is actually two words of course and it's the TO part that is
unstructured and causes the problems.  Would you argue for GO (only 2 letters!)

The confusion about one exit is that some programmers interpret this to
mean that a structured block of code must exit the block only at the very
last instruction.  This is incorrect.  In my code I ofter test for exceptions
right at the beginning of the block and return right there.  Sprinkling
returns throughout your code doesn't violate the one exit rule either.  Why?
Because no matter how many returns you have you always return to the line
following the original call.  That is the one and only exit point.

GOTO could, and does by those italian pasta lovers, get used to violate
the only one exit rule because you can use it so that the code following
the call is not executed.

So I ask again, is structured programming a good thing?  It's not a question
that can be given a snap answer.  I thought about it for years before
reaching the conclusion that whatever it's faults, the answer is yes in
ALL cases.

Again, it's about humility.  Supermen do not make good programmers (I often
find myself cleaning up after them... so I have a strong perspective on
this.)  GOTO is powerful.  It's the biggest ship in the galaxy.  If you
find you can't live without it's power, machine language is the place to
be.  It's loaded with goto's.

I hope I've loosened your grip on goto a little without causing offense.

(Yes, Derek I see my tone... If you could only see my heart.  Not to imply
that you don't and I'm not picking on anyone and, and, ...)

I am but a simple and humble servant to whatever is true.

new topic     » goto parent     » topic index » view message » categorize

43. Re: New keyword added: continue

c.k.lester wrote:
> 
> Kat wrote:
> > ken mortenson wrote:
> > > skip def: To jump lightly over.
> > > ...for those leaning whimsically (also 4 letters.)
> > goto def: to continue or next or resume or retry or restart or exit or entry
> > at another location
> 
> How do you get next/continue or restart with goto (using only 4 letters?)? I
> don't see a way to iterate using just goto. You'd have to do all sorts of
> other stuff, methinks, to emulate these easier-to-use terms.


I have already given examples.

Early mirc had no loop constructs, and for years had only if-then construct. All
other loops, including case, were built with goto. I am NOT recommending this as
good coding style in any language that has the appropriate loop devices.....


set -u0 %loop 0 -- going to use "loop"
:startofloop
-- code
-- note i can modify the loop var
inc -u0 %loop
if ( %loop != %y ) { goto startofloop }
-- %loop is still valid here if i want to use it


Bare-bones basic stuff. But getting good loops (if-then, while-do,
repeat-until<cough>) in modern languages, and then adding 4 or more keywords to
jump around *inside* a loop smells like nuts to me.

:restart
for loop = 1 to 12 do
:retry
 -- code
 if blah then goto restart end if
 if blorg then goto retry end if
 if not x then goto exit end if
 if CK then goto next end if
 if worstcase then goto cleanup&return end if
 -- code
 :next
end for
:exit


Not only is it crystal clear (flat panel, no cuts, colors, or occlusions) that
it's going to change program flow, but the places it is going to are plainly and
unambiguously labeled in the language of your choice, and it's pretty darned well
self explainitory. I don't want to be programming along, then stop and wonder if
the language will allow me to do something, and if so, which keyword do i want,
and just where will it land? And then will it keep landing there if i later add
some code to debug something else? Or what if i remove some debug code? etc etc
etc.

Kat

new topic     » goto parent     » topic index » view message » categorize

44. Re: New keyword added: continue

Kat wrote:
> c.k.lester wrote:
> > How do you get next/continue or restart with goto (using only 4 letters?)? I
> > don't see a way to iterate using just goto. You'd have to do all sorts of
> > other stuff, methinks, to emulate these easier-to-use terms.
> 
> :restart
> for loop = 1 to 12 do
> :retry
>  -- code
>  if blah then goto restart end if
>  if blorg then goto retry end if
>  if not x then goto exit end if
>  if CK then goto next end if
>  if worstcase then goto cleanup&return end if
>  -- code
>  :next
> end for
> :exit

Ah, I see how next/continue would work there, and retry. But restart-
jumping OUT of a loop and then going back into it- looks like it might
cause interpreter pains (memory leaks, etc.). And jumping out of the loop?
Dunno. Maybe an interpreter modifier can speak to that.

new topic     » goto parent     » topic index » view message » categorize

45. Re: New keyword added: continue

Kat wrote:
> Bare-bones basic stuff. But getting good loops (if-then, while-do,
> repeat-until<cough>)
> in modern languages, and then adding 4 or more keywords to jump around
> *inside*
> a loop smells like nuts to me.

A programmer after my own heart (soon you will achieve oneness...)

I'm even weirder in my thinking (you guys already figured that one out didn't
ya?  But here's some confirmation...)

All code written anywhere by anyone (quantum computing may make this statement
untrue) have only three structures (sequence, branch, loop)

I'd like to get rid of ALL the various flavors of loops
(while, for, for each, etc.) and replace it with the pseudo code I've
always used.

Loop
  ...
End Loop

You do all your initialization before the loop.  The loop creates Index
which starts with a value of zero and increments once each iteration.

The scope of Index is limited to the last declaration so for nested loops...

Loop
  x = Index
  Loop
    y = Index
    array(x,y)=whatever.
    if (y>9) exit
  End Loop
  if (x>12) exit
End Loop

...but I'm a dreamer.  Am I not the only one?

Note that all loops are infinite and require an explicit exit.  Programmers
with bad habits will be spanked enough to learn good habits in very
short order.

new topic     » goto parent     » topic index » view message » categorize

46. Re: New keyword added: continue

c.k.lester wrote:
> 

> Ah, I see how next/continue would work there, and retry. But restart-
> jumping OUT of a loop and then going back into it- looks like it might
> cause interpreter pains (memory leaks, etc.). And jumping out of the loop?
> Dunno. Maybe an interpreter modifier can speak to that.

You're probably afraid of 'exit', too.  :P

Seriously, exit is just a goto to the end of the loop.  It doesn't do any 
clean up or anything.  There isn't any needed.

Matt

new topic     » goto parent     » topic index » view message » categorize

47. Re: New keyword added: continue

ken mortenson wrote:
> 
> Loop
>   x = Index
>   Loop
>     y = Index
>     array(x,y)=whatever.
>     if (y>9) exit
>   End Loop
>   if (x>12) exit
> End Loop

I'm... strangely... attracted to it. 8|

new topic     » goto parent     » topic index » view message » categorize

48. Re: New keyword added: continue

c.k.lester wrote:
> 
> ken mortenson wrote:
> > 
> > Loop
> >   x = Index
> >   Loop
> >     y = Index
> >     array(x,y)=whatever.
> >     if (y>9) exit
> >   End Loop
> >   if (x>12) exit
> > End Loop
> 
> I'm... strangely... attracted to it. 8|

I was thinking we have:

loop do

until ... 

Why not

loop do
...
again or repeat

However, I'd use a while loop or until loop for examples such as if (x>12) exit.
Also you are assigning y = Index, x = Index, therefore, those are probably being
incremented somewhere that you are not showing making the above loop probably
more suited to a for loop?

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

49. Re: New keyword added: continue

Matt Lewis wrote:
> c.k.lester wrote:
> > Ah, I see how next/continue would work there, and retry. But restart-
> > jumping OUT of a loop and then going back into it- looks like it might
> > cause interpreter pains (memory leaks, etc.). And jumping out of the loop?
> > Dunno. Maybe an interpreter modifier can speak to that.
> You're probably afraid of 'exit', too.  :P
> Seriously, exit is just a goto to the end of the loop.  It doesn't do any 
> clean up or anything.  There isn't any needed.

You'd know.

I'm curious that there's no clean up necessary. It looks like there'd be a
dangling variable. Eeeewwwwwww!!! :D

(I admit I've never used exit. I'm not a sloppy enough coder. HAHAHAHA. Just
kidding. I might've used it once. Well, I just checked bbcmf-system. Out of
about 8.6KLOC, exit appears 0 times. So, I probably never have used it.)

new topic     » goto parent     » topic index » view message » categorize

50. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> 
> Why not
> 
> loop do
> ...
> again or repeat
> 

I wanted to prefix but forgot... There are common things we do in loops and
common ways of exiting a loop, thus we have for, while and until loops. If we get
too many loops, we just overly complicate things. If we have too little loops, we
overly complicate things as well. I do think the programming world has settled on
the three main loops that satisfy the vast majority of looping needs and they are
what we have, while, for and until. We probably do not need any more.

For instance, I learned yesterday or today, that 

while 1 do
...
end while

is optimized as:

begining:

   ... do something

goto begining

No exit checks or anything, so one could very well successfully argue we already
have the loop proposed by ken:

Loop

End Loop

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

51. Re: New keyword added: continue

c.k.lester wrote:
> 
> ken mortenson wrote:
> > 
> > Loop
> >   x = Index
> >   Loop
> >     y = Index
> >     array(x,y)=whatever.
> >     if (y>9) exit
> >   End Loop
> >   if (x>12) exit
> > End Loop
> 
> I'm... strangely... attracted to it. 8|

Medic!  Medic!  Get the tranquilizers, we've got another one!

new topic     » goto parent     » topic index » view message » categorize

52. Re: New keyword added: continue

c.k.lester wrote:
> 
> Matt Lewis wrote:
> > c.k.lester wrote:
> > > Ah, I see how next/continue would work there, and retry. But restart-
> > > jumping OUT of a loop and then going back into it- looks like it might
> > > cause interpreter pains (memory leaks, etc.). And jumping out of the loop?
> > > Dunno. Maybe an interpreter modifier can speak to that.
> > You're probably afraid of 'exit', too.  :P
> > Seriously, exit is just a goto to the end of the loop.  It doesn't do any 
> > clean up or anything.  There isn't any needed.
> 
> You'd know.
> 
> I'm curious that there's no clean up necessary. It looks like there'd be a
> dangling variable. Eeeewwwwwww!!! :D

Basically, each loop variable gets a slot in the symbol table.  If it's not
top level code, then it 'goes away' just like all the other private variables.

> (I admit I've never used exit. I'm not a sloppy enough coder. HAHAHAHA. Just
> kidding. I might've used it once. Well, I just checked bbcmf-system. Out of
> about 8.6KLOC, exit appears 0 times. So, I probably never have used i

>grep -c exit eusql.e
21

Maybe it's not in bbcmf, but you depend upon it. :)

Matt

new topic     » goto parent     » topic index » view message » categorize

53. Re: New keyword added: continue

Jeremy Cowgar wrote:

> I was thinking we have:
> 
> loop do
> 
> until ... 
> 
> Why not
> 
> loop do
> ...
> again or repeat
> 
> However, I'd use a while loop or until loop for examples such as if (x>12)
> exit. 

The only difference between a do while or do until is where the test is made.
In my construct there is no difference, you just put it where you want (or
at multiple points if that's your style or need.

do, again and repeat are all extraneous.  In my view all structures
would consistantly end with end (followed by the name of the structure:
if, loop, procedure, etc.)

Also you are assigning y = Index, x = Index, therefore, those are probably
> being incremented somewhere that you are not showing making the above loop
> probably
> more suited to a for loop?

Exactly, they are incremented under the covers for each iteration of the loop
starting at zero.  This doesn't mean the programmer is limited in any way.

A for loop simply has it's initialize as part of it's syntax.  Initialize
before the loop in all cases creates a simple habit.  It may even teach
those that initialize IN loops that, that is not a good idea.

For loops also have an implicit increment by which I'm just suggesting is
better being explicit.

The real advantage is only one loop structure wich reduces stress on the
humble programmer.  Need a loop?  Use Loop.

new topic     » goto parent     » topic index » view message » categorize

54. Re: New keyword added: continue

Jeremy Cowgar wrote:

> while 1 do
> ...
> end while
> 
> is optimized as:
> 
> begining:
> 
>    ... do something
> 
> goto begining
> 
> No exit checks or anything, so one could very well successfully argue we
> already
> have the loop proposed by ken:

Yes, we've always had the loop.  I'm just proposing we go all the way and
just use the syntax...
 
> Loop
> 
> End Loop

I guaranty the soon nobody would miss, while, for, for each, repeat until,
do while, do until, rinse, lather, soap...  oops!  Got ahead of myself on
those last few.

new topic     » goto parent     » topic index » view message » categorize

55. Re: New keyword added: continue

Matt Lewis wrote:
> c.k.lester wrote:
> > (I admit I've never used exit. I'm not a sloppy enough coder. HAHAHAHA. Just
> > kidding. I might've used it once. Well, I just checked bbcmf-system. Out of
> > about 8.6KLOC, exit appears 0 times. So, I probably never have used i
> >grep -c exit eusql.e
> 21
> Maybe it's not in bbcmf, but you depend upon it. :)

heheh... Yeah, I saw some in Tommy Carlier's kanarie, too, which is a
significant part of BBCMF. So, I guess I've gotta cut off EuSQL and
kanarie... LOL! RIGHT!!!11!!1!!111!

new topic     » goto parent     » topic index » view message » categorize

56. Re: New keyword added: continue

ken mortenson wrote:
>  
> I guaranty the soon nobody would miss, while, for, for each, repeat until,
> do while, do until, rinse, lather, soap...  oops!  Got ahead of myself on
> those last few.
>

Ken, do you have any major open source apps out there that I can see the source
for? Or any open source applications you have contributed a major patches/code to
that I can see?

I know a substantial amount of programmers, many of who can create code of such
an utmost quality that it's down right amazing. Applications that have been in
existence for > 15 years, still *easily* maintained today, well structured. These
are people I trust. I also lead on applications in the 500KLOC range and I would
not dare say get rid of for, while and until loops. That's just crazy. In fact,
no one I have ever met or read about would make such a claim. It doesn't make
sense.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

57. Re: New keyword added: continue

Kat wrote:
> }}}
<eucode>
> :restart
> for loop = 1 to 12 do
> :retry
>  -- code
>  if blah then goto restart end if
>  if blorg then goto retry end if
>  if not x then goto exit end if
>  if CK then goto next end if
>  if worstcase then goto cleanup&return end if
>  -- code
>  :next
> end for
> :exit
> </eucode>
{{{


Hi Kat,
just a few of quick questions ...

** How, as a maintainer of the code above, can I be sure that process flow only
gets to the "restart:" label from either the statement immediately preceding it
or the 'goto' inside the loop? In other words, how can I be sure that there is
not another 'goto restart' elsewhere in the code?

** If I have to place another looping construct within the same scope as the one
above, what should I call the labels?

** Under what circumstanes might I have to rename the labels?

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

58. Re: New keyword added: continue

I wouldn't be adverse to an optional from/by

Loop from 7 by -1.2
  if (Index<-14.2) exit
End Loop

new topic     » goto parent     » topic index » view message » categorize

59. Re: New keyword added: continue

ken mortenson wrote:
> 
> I guaranty the soon nobody would miss, while, for, for each, repeat until,
> do while, do until, rinse, lather, soap...  oops!  Got ahead of myself on
> those last few.

Maybe I'm just lazy, but I really miss foreach in Euphoria, especially since it
has native sequences. I suspect sequence operations make it fairly redundant
though.

If all the work is being done by the interpreter then I would rather write
something that looks like English, so I like having while and for.

It's more natural to think (in my view) "count to 10 and for each number do
something with it" (for..end for) than to think "LOOP,ADD,DO,TEST,END"
(loop..loop end)

or "while I haven't found it get the next one and have a look". (while)

I'm actually really starting to admire Python. You say what you mean and don't
have to dress everything up again to carry on with your code. I often sit there
thinking "Is that it?" when I've iterated over an array in three lines of code
and don't have to type '}' or 'end for' or count brackets etc smile

Anyway, whatever language Euphoria uses I'm sure we'll all get used to it. It's
all the same as far as the CPU is concerned :)

Gary

new topic     » goto parent     » topic index » view message » categorize

60. Re: New keyword added: continue

Derek Parnell wrote:
> 
> just a few of quick questions ...

Thus, goto is destroyed in one fell swoop.

new topic     » goto parent     » topic index » view message » categorize

61. Re: New keyword added: continue

Derek Parnell wrote:
> 
> Kat wrote:
> > }}}
<eucode>
> > :restart
> > for loop = 1 to 12 do
> > :retry
> >  -- code
> >  if blah then goto restart end if
> >  if blorg then goto retry end if
> >  if not x then goto exit end if
> >  if CK then goto next end if
> >  if worstcase then goto cleanup&return end if
> >  -- code
> >  :next
> > end for
> > :exit
> > </eucode>
{{{

> 
> Hi Kat,
> just a few of quick questions ...
> 
> ** How, as a maintainer of the code above, can I be sure that process flow
> only
> gets to the "restart:" label from either the statement immediately preceding
> it or the 'goto' inside the loop? In other words, how can I be sure that there
> is not another 'goto restart' elsewhere in the code?

You can't. You read the code to see if there is another "goto" that label. The
same with "exit", "return", etc.. I have a fair amount of code that has "return"
sprinkled around, and no one has ever complained about more than one place
leaving the function. One way to restrict the "where from" is to localise all
"goto" to procedure/function blocks, and not allow it in top level code. Exactly
like in OOEU.

> ** If I have to place another looping construct within the same scope as the
> one above, what should I call the labels?

Umm, how about "loop2" ? Or you mean the targets for more "goto" of the same
umm, form? Pick a name. You have the freedom to restart the inner loop, the outer
loop, the nested while loop in there which you added later, etc.. I tend to give
my nested loop names some description, even if it's just "index1", so i could
have a "goto restart_index1", which sorta reads easily, and i know just where
it's going, and i can get there with the one "goto" keyword from any depth of
nested loops. The target being present alerts me, as i am reading down the code,
that i may be going back to that point from somewhere.
 
> ** Under what circumstanes might I have to rename the labels?

Never, i believe. If you add loops, or other code, you do not need to change
anything, assuming your intent to goto the :target is the same. If you wish to
add a target, choose another name. Like i said, i tend to use the loop name as
part of the target, and/or/as well as the purpose, if i need any clairification,
rather insuring unique target names. This way i can wrap or unwrap nested loops,
and not have a problem, as well as skip blocks during debug.

With goto scope restricted to proc/funct blocks, it makes some code even easier,
such as "goto cleanup&return", which i know has the local scope of variables, is
at the bottom of the block where code will fall thru to anyhow, and execute the
"cleanup&return". With Eu the way it is now, i have hunks of code copy/pasted
thruout which does the cleanup with local vars and returns, and those hunks are a
nightmare to keep identical. Just as an aside, one other cure for that would be
nested procedures, which could be called inside the nesting procedure, and the
nested one have the scope of the nesting one's vars, i did this in Turbo Pascal a
*lot*.

I believe Matt scored 100 with the way he did goto in OOEU, and i reiterate my
suggestion all of OOEU be merged into Eu v4.

Kat

new topic     » goto parent     » topic index » view message » categorize

62. Re: New keyword added: continue

c.k.lester wrote:
> 
> Derek Parnell wrote:
> > 
> > just a few of quick questions ...
> 
> Thus, goto is destroyed in one fell swoop.

I don't see why.

Kat

new topic     » goto parent     » topic index » view message » categorize

63. Re: New keyword added: continue

Kat wrote:
> c.k.lester wrote:
> > Derek Parnell wrote:
> > > just a few of quick questions ...
> > Thus, goto is destroyed in one fell swoop.
> I don't see why.

Maintainability of code is of utmost importance. Using goto is dangerous! :)

new topic     » goto parent     » topic index » view message » categorize

64. Re: New keyword added: continue

Jeremy Cowgar wrote:

> I know a substantial amount of programmers, many of who can create code of
> such
> an utmost quality that it's down right amazing. Applications that have been
> in existence for > 15 years, still *easily* maintained today, well structured.
> These are people I trust.

I worked for a guy like that in NYC.

new topic     » goto parent     » topic index » view message » categorize

65. Re: New keyword added: continue

c.k.lester wrote:
> 
> Kat wrote:
> > c.k.lester wrote:
> > > Derek Parnell wrote:
> > > > just a few of quick questions ...
> > > Thus, goto is destroyed in one fell swoop.
> > I don't see why.
> 
> Maintainability of code is of utmost importance. Using goto is dangerous! :)

Why are these two blocks so different that you call the 2nd one "dangerous" ?


for loop = 1 to x do
  -- code
  if x = blah then goto next end if
  -- code
  :next
end for

for loop = 1 to x do
  -- code
  if x = blah then next end if
  -- code
end for


And ye who didn't know you were using code containing "exit", how were you
"maintaining" that code? And how would you know how many places called "exit" to
make the code flow change?

Kat

new topic     » goto parent     » topic index » view message » categorize

66. Re: New keyword added: continue

Jeremy Cowgar wrote:

> Ken, do you have any major open source apps out there that I can see the
> source
> for? Or any open source applications you have contributed a major patches/code
> to that I can see?

While I believe in open source I've worked for proprietory outfits.  Most of
my experimentation (not drugs! languages!) was prior to the last ten years
(in which I worked for just two companies... I left the first company, worked
a year for the second, then went back to the first.)

My contract with a little mom and pop outfit in Seattle (well, Silverdale)
called Squarerigger (they write fleet maintainance software and I hired with
them at the beginning of a DOS to windows period.) even required me to
shred any code I wrote for them after leaving the company.

The second companies I worked at was for a young man and I made mistakes
in handling the project.  We had outlined a six month project which I was
totally on track in the 1st four month to finish.  He called his company
NextPOS although it's something else now that he merged with a partner.

You should be able to find both on the web.

Then he decided he wanted the project broken up into a front end and a back
end.  I should have told him, no and stuck with no.  I should have told him
we need to get what I was working on done in the next few month so we could
be making money to justify my salary, then work on a second version.  But I
didn't do that.  He was the boss, young as he was, so I pulled out every
'back end' feature from the code that was almost completed and it was the
last time I worked on it (it's now sitting on one of his backup servers
somewhere)  During the next 8 months he had me change the backend design
twice.  He'd told his vendors about the product from the first and they
were calling everyday to find out it's status.  Finally one weekend his
chief tech. asked me for my machines password to do some network maintenance
and when I came in monday I was locked out of my machine and the tech. didn't
come in that day.  So I told the Sales VP (the only senior guy besides me
in the office that day) that I was taking the rest of the day off.  I was
still steaming the next day, so I called in and said I was taking another
personal day (this was after a year of 60+ hour weeks.)

When I came in the next day, my friend and owner wasn't in, but had his
secretary/office manager let me know the bad news.  Three days later I
left California and was back to work for Squarerigger in Seattle.  That
first weekend there I worked overnights all weekend to fix their code for
a very important demo on monday with some city that I don't recall.  It
wasn't enough time to fix everything (I could only insure that it didn't
actually blow up.)  They made the sale.

I do have bits and pieces here and there in one language or another, but
nothing I'd be proud to show off.  I was hoping to do that with my next
Euphoria project.

What I've learned has been by listening, reading, thinking and experiences.

I'm a self taught computer bum.  Wrote my first HP2000F timeshared basic
program in 30 minutes after buying the language manual from the local
community college.  Went to a trade school, but my buddy and I had to
teach the instructors about PMA on the Prime 750.  Spent hundreds of dollars
on manuals I never used after leaving the school.  Doesn't seem right.

Bought a commodore 64 (with disk drive and tape!) for $1300.  It was
serial number 000000006xx in the year they sold 8 million (and the price
dropped to under $200.)  Gave it away, but would kind of like to have it now.

I once thought FORTH could be the 'one true language' but that hallucination
ended (but I still look at things like REBOL.)

Wrote my first big project in NYC.  dBase II multiuser (we had 13 286 machines
on 2 servers... in 1982? very cutting edge.)  10,000 lines of code and I
could visualize every line and every character...  I actually edited the
code remotely and blind for a customer in Ohio.  No way I could do that today.

I can hardly remember my name these days.

Even flew to Ohio and did some custom reports for them.  Nursemaided a report
all night.  When I got back to NYC my boss was mad about me giving things
away for free.  I was young.  Rewrote that report in BASCOM and it went from
16 hours to 30 minutes!

Bought my first copy of MASM back then, since I've bought Delphi, PowerBasic,
DarkBasic.  I was going to say I never had to buy C, then I remembered I
bought a copy of Lattice C, which had a great upgrade policy right until 
the moment they went out of business. blink  My favorite CPU was the 6502 with
it's 13 addressing modes.  I wrote an assembler for it in basic.  Although
my first CPU was an RCA 1802 that ran at a few hundred kilohertz.

I've found I like features in many languages (ever ask yourself how would
I do this in assember when writing dBase code?)

I was also an air traffic controller and that's a story for another day.

Boy, did you open a can of worms!  All you really need to know is that
I'm 49 but round that up to 50.  I'm cranky.  A rare INTJ.

But code?  I don't got no stink'n code.  You guys better get Euphoria up
to speed so I can ditch all these other language and just have fun.

Later I'll tell you my vision for the 'ONE TRUE LANGUAGE' which Euphoria
is a very significant part of.

Then I'll show you code...  Did you see my PowerBASIC example... Please
don't make me code in PB.  I'll be good.  I promise.  Please...

BTW, while I was away for a year they bloated a work order module from
about 10,000 lines to over 20,000 (adding accounting features that I had
argued years earlier during the design phase should have been foundational
to the product.)

Worked that over to less than 10,000 lines of cleaner, more functional and
easier to maintain code.  Yes, I know that less is more.  It's probably
got all it's bloat back now that I'm not watching over it anymore.

I

new topic     » goto parent     » topic index » view message » categorize

67. Re: New keyword added: continue

Kat wrote:

Thanks Kat. 

> Derek Parnell wrote:
>> ... how can I be sure that there is not another 'goto restart'
>> elsewhere in the code?
> 
> You can't. You read the code to see if there is another "goto" that label. 

How likely would this requirement increase the cost of maintenance?

> The same with "exit", "return", etc.. I have a fair amount
> of code that has "return" sprinkled around, and no one has
> ever complained about more than one place leaving
> the function.

I see this as a different issue. With 'goto' the question I raise deals with how
ones arrives at the label and has nothing to do with the 'goto' statement itself,
but with 'exit' and 'return', the process flow to arrive at that statement is
clear and local.

> One way to restrict the "where from" is to localise all "goto"
> to procedure/function blocks, and not allow it in top level code.
> Exactly like in OOEU.

Does the number of statements in a routine affect this position?

>> ** If I have to place another looping construct within the same
>> scope as the one above, what should I call the labels?
> 
> Umm, how about "loop2" ?

Does the requirement that a 'goto' needs a (unique within the scope) label,
reduce the amount of code that has to be read by maintainers? To me it seems that
using the combination of 'label xyz' and 'goto xyz' contains a lot more redundant
content than 'next' does.

If such a loop containing labels, needs to be later nested inside another loop,
what is the suggested naming convention, if any?

e.g. We start with ...
  restart1:
  loop
     -- some code --
     goto restart1
     -- some more code ---
     restart2:
     loop
       -- some code ---
       goto restart2:
       -- some code --
       goto restart1
       -- some code
     end loop
  end loop

But later this needs to be nested, such as ...

 restart3:
 loop
    -- some code ---
    restart1:
    loop
       -- some code --
       goto restart1
       -- some more code ---
       restart2:
       loop
         -- some code ---
         goto restart2:
         -- some code --
         goto restart1
         -- some code --
       end loop
    end loop
    -- some code --
    goto restart3
    -- some code --
 end loop

Would it be better to keep the existing label names as above, or is it better to
rename them to keep the implied nesting level obvious?

>> ** Under what circumstanes might I have to rename the labels?
 
> Never, i believe. 

See above.

> Just as an aside, one other cure for that
> would be nested procedures, which could be
> called inside the nesting procedure, and the
> nested one have the scope of the nesting one's
> vars 

Yes, nested routines would be very very nice. I suspect that we will have this
ability soon, but not for v4.0

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

68. Re: New keyword added: continue

Kat wrote:
> 
> c.k.lester wrote:
> > Maintainability of code is of utmost importance. Using goto is dangerous! :)
> 
> Why are these two blocks so different that you call the 2nd one "dangerous"
> ?

Because in the first one we could get this ...
 
 
procedure foo()
  --- many lines of code ---
  goto next
  --- many lines of code ---
  goto next
  --- many lines of code --- 
  for loop = 1 to x do
    -- code
    if x = blah then goto next end if
    -- code
    :next
  end for
  --- many lines of code ---
  goto next
  --- many lines of code --- 
end procedure

 
But I can't do that in the second example, and thus the cost of maintenance is
lower in the second example. The cost is affected by the probability of bugs, the
amount of code to read, and the amount of coding to repair/enhance existing code.

> And how would you know how many places called "exit" to make the
> code flow change?

The problem is not the 'goto' statement (ie. change of control flow), the
problem is with the label and how to arrive there.

The extra maintenance cost that 'goto' introduces into a program must be offset
by the performance benefit derived from using it, IMHO. Demonstrate that in a
specific piece of Euphoria code and I'll support the use of 'goto' in that piece
of code.

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

69. Re: New keyword added: continue

Kat wrote:
> c.k.lester wrote:
> > Maintainability of code is of utmost importance. Using goto is dangerous! :)
> Why are these two blocks so different that you call the 2nd one "dangerous"
> ?
> for loop = 1 to x do
>   -- code
>   if x = blah then goto next end if
>   -- code
>   :next
> end for
> 
> for loop = 1 to x do
>   -- code
>   if x = blah then next end if
>   -- code
> end for

Because adding loops therein could be problematic.

> And ye who didn't know you were using code containing "exit",
> how were you "maintaining" that code?

I'm not maintaining that code (they are in libraries I am including), so
I don't care. :)

new topic     » goto parent     » topic index » view message » categorize

70. Re: New keyword added: continue

ken mortenson wrote:
> 
<snip- a bunch of stuff, mentioned 6502 and flying>

Several people here are avid 6502 people, and a few fly or have flown their own
planes. And some of us are 50 yrs old or older.

I still want to build a 6502 in ttl, i went so far as to do the pcb layouts over
10 years ago. Then the Dog Era began. Nevertheless, my ex-business ex-advisor who
moved out of this state after considering what happened to me here (etc), is
donating a gently used HP 1631D to the effort, which i pick up next month. I have
a HP 1600A, but he says the 1631D, with external storage, is worth having. Still
no ETA for a 6502 that executes internal instructions at any speed i can feed
code into it, up to sub-ns speeds.

Oh yea, and i did touch-n-go in a single engine (trike landing gear, high wing,
2 seater up front, i don't remember more about it), but didn't go for the pricey
license. I did buy property with 1200ft of property line, but can't use it,, the
neighbor's dogs got it in court, and they don't share.

And without rounding, i am over 50.

Kat

new topic     » goto parent     » topic index » view message » categorize

71. Re: New keyword added: continue

ken mortenson wrote:
> 
> I wouldn't be adverse to an optional from/by
> 
> Loop from 7 by -1.2
>   if (Index<-14.2) exit
> End Loop

That's good to know.  I think.

Matt

new topic     » goto parent     » topic index » view message » categorize

72. Re: New keyword added: continue

c.k.lester wrote:
> 
> Kat wrote:
> > c.k.lester wrote:
> > > Maintainability of code is of utmost importance. Using goto is dangerous!
> > > :)
> > Why are these two blocks so different that you call the 2nd one "dangerous"
> > ?
> > for loop = 1 to x do
> >   -- code
> >   if x = blah then goto next end if
> >   -- code
> >   :next
> > end for
> > 
> > for loop = 1 to x do
> >   -- code
> >   if x = blah then next end if
> >   -- code
> > end for
> 
> Because adding loops therein could be problematic.

I do not see how. And frankly, the contrivance i post next i don't understand
either....

for loop1 = 1 to 12 do
  -- code
  goto next1
  -- code
  for loop2 = 1 to 12 do
    -- code
    goto next2
    -- code
    for loop3 = 1 to 12 do
      -- code
      goto next3
      -- code
      for loop4 = 1 to 12 do
        -- code
        goto next4
        -- code
        for loop5 = 1 to 12 do
          -- code
          goto next5
          -- code
          for loop6 = 1 to 12 do
            -- code
            goto next6
            -- code
            :next6 
          end for
          :next5 
        end for
        :next4 
      end for
      :next3 
    end for
    :next2 
  end for
  :next1 
end for


No, i don't write like that, but i feel you wanted an extremely good example of
stuff taken to bad extremes. But it does proove that you can word search in a
text editor to find the target easily, and won't skip a "next" target, because
the "goto" targets are plainly labeled above.

> > And ye who didn't know you were using code containing "exit",
> > how were you "maintaining" that code?
> 
> I'm not maintaining that code (they are in libraries I am including), so
> I don't care. :)

Good, then you won't care if i use goto. smile)

Kat

new topic     » goto parent     » topic index » view message » categorize

73. Re: New keyword added: continue

Kat wrote:

> And without rounding, i am over 50.

Now I understand your loyalty to spaghetti.

somewhere you've got a program running...

:49
GOTO 49

ps: half italian and a quarter swede, so I like spaghetti too, just not
in my code.  I once had a boss in NYC that used to say he was 80% finished
and hand me a plate of spaghetti it fix.  He's also the guy that wrote
self modifying code in BAL.  That was quite the experience.

new topic     » goto parent     » topic index » view message » categorize

74. Re: New keyword added: continue

Matt Lewis wrote:
> 
> ken mortenson wrote:
> > 
> > I wouldn't be adverse to an optional from/by
> > 
> > Loop from 7 by -1.2
> >   if (Index<-14.2) exit
> > End Loop
> 
> That's good to know.  I think.

So, what are you trying to tell me?  I can take it.  I'm a big boy.

new topic     » goto parent     » topic index » view message » categorize

75. Re: New keyword added: continue

Derek Parnell wrote:
> 
> Kat wrote:
> 
> Thanks Kat. 
> 
> > Derek Parnell wrote:
> >> ... how can I be sure that there is not another 'goto restart'
> >> elsewhere in the code?
> > 
> > You can't. You read the code to see if there is another "goto" that label. 
> 
> How likely would this requirement increase the cost of maintenance?

In Textpad, drag the cursor over the label, and keypress for search. You could,
i suppose, add a "came_from" var you interrogate in some way.

> > The same with "exit", "return", etc.. I have a fair amount
> > of code that has "return" sprinkled around, and no one has
> > ever complained about more than one place leaving
> > the function.
> 
> I see this as a different issue. With 'goto' the question I raise deals with
> how ones arrives at the label and has nothing to do with the 'goto' statement
> itself, but with 'exit' and 'return', the process flow to arrive at that
> statement
> is clear and local.

It is as clear as goto, i think. If i have a function, and i can return from it
in several points, how do you know which return got you back out of the function?
 
> > One way to restrict the "where from" is to localise all "goto"
> > to procedure/function blocks, and not allow it in top level code.
> > Exactly like in OOEU.
> 
> Does the number of statements in a routine affect this position?

What?  I don't see the connection between statement count and use of any
keyword.

> >> ** If I have to place another looping construct within the same
> >> scope as the one above, what should I call the labels?
> > 
> > Umm, how about "loop2" ?
> 
> Does the requirement that a 'goto' needs a (unique within the scope) label,
> reduce the amount of code that has to be read by maintainers? To me it seems
> that using the combination of 'label xyz' and 'goto xyz' contains a lot more
> redundant content than 'next' does.

But you *know* where goto will goto, and across languages, you haveto remember
where each language differs, as well as how each human language interprets each
of those other keywords, such as "next", "continue", etc.

> If such a loop containing labels, needs to be later nested inside another
> loop,
> what is the suggested naming convention, if any?
> 
> e.g. We start with ...
>   restart1:
>   loop
>      -- some code --
>      goto restart1
>      -- some more code ---
>      restart2:
>      loop
>        -- some code ---
>        goto restart2:
>        -- some code --
>        goto restart1
>        -- some code
>      end loop
>   end loop
> 
> But later this needs to be nested, such as ...
> 
>  restart3:
>  loop
>     -- some code ---
>     restart1:
>     loop
>        -- some code --
>        goto restart1
>        -- some more code ---
>        restart2:
>        loop
>          -- some code ---
>          goto restart2:
>          -- some code --
>          goto restart1
>          -- some code --
>        end loop
>     end loop
>     -- some code --
>     goto restart3
>     -- some code --
>  end loop
> 
> Would it be better to keep the existing label names as above, or is it better
> to rename them to keep the implied nesting level obvious?

Better to find a better way to code that. I would keep the labels more
descriptive of what they do, and then not change them if you are wrapping or
inserting new code that describes another function.

> >> ** Under what circumstanes might I have to rename the labels?
>  
> > Never, i believe. 
> 
> See above.

Did.
 
> > Just as an aside, one other cure for that
> > would be nested procedures, which could be
> > called inside the nesting procedure, and the
> > nested one have the scope of the nesting one's
> > vars 
> 
> Yes, nested routines would be very very nice. I suspect that we will have this
> ability soon, but not for v4.0

Cool.

Kat

new topic     » goto parent     » topic index » view message » categorize

76. Re: New keyword added: continue

Derek Parnell wrote:
> 
> Kat wrote:
> > 
> > c.k.lester wrote:
> > > Maintainability of code is of utmost importance. Using goto is dangerous!
> > > :)
> > 
> > Why are these two blocks so different that you call the 2nd one "dangerous"
> > ?
> 
> Because in the first one we could get this ...
>  
>  
> }}}
<eucode>
> procedure foo()
>   --- many lines of code ---
>   goto next
>   --- many lines of code ---
>   goto next
>   --- many lines of code --- 
>   for loop = 1 to x do
>     -- code
>     if x = blah then goto next end if
>     -- code
>     :next
>   end for
>   --- many lines of code ---
>   goto next
>   --- many lines of code --- 
> end procedure
> </eucode>
{{{

>  
> But I can't do that in the second example, and thus the cost of maintenance
> is lower in the second example. The cost is affected by the probability of
> bugs,
> the amount of code to read, and the amount of coding to repair/enhance
> existing
> code.

I do not know why you'd do that code anyhow. You are jumping into a loop, you
realise? You have unqualified statements to do a jump, so you have not shown me
the entire code you wish me to approve or justify. Likewise, i could code up 100
procedures or functions, calling every one of them thru oddball routine_id()
names, and cause everyone fits trying to trace them. And strangely, isn't that
:next target where someone(?) wants to put an "entry" keyword? OUCH!! Do you want
me to say you shouldn't code like that? Granted. Do you want me to say someone
could code like that? Granted. Are you asking me if i think that is good code?
No. Would i code like that? No.
 
> > And how would you know how many places called "exit" to make the
> > code flow change?
> 
> The problem is not the 'goto' statement (ie. change of control flow), the
> problem
> is with the label and how to arrive there.
> 
> The extra maintenance cost that 'goto' introduces into a program must be
> offset
> by the performance benefit derived from using it, IMHO. Demonstrate that in
> a specific piece of Euphoria code and I'll support the use of 'goto' in that
> piece of code.

I cannot write up every possible piece of code that could possibly contain a
"goto" for your support. I have no example of "goto" in Eu, because "goto" is not
supported in Eu. I also code in mirc, but usually i use goto there for making up
loops that mirc lacks, but Eu has. I tried using ooeu several times for more
advanced projects, but there is a *HUGE* speed hit with ooeu which i cannot
absorb.

Perhaps this thread should be called "lets keep kat too busy answering the same
questions over and over to spam any more". The discussion of goto has been going
on for years on this list, and i am still in favor of goto being added to Eu.

Kat

new topic     » goto parent     » topic index » view message » categorize

77. Re: New keyword added: continue

Kat wrote:

> for loop1 = 1 to 12 do
>   -- code
>   goto next1
>   -- code
>   for loop2 = 1 to 12 do
>     -- code
>     goto next2
>     -- code
>     for loop3 = 1 to 12 do
>       -- code
>       goto next3
>       -- code
>       for loop4 = 1 to 12 do
>         -- code
>         goto next4
>         -- code
>         for loop5 = 1 to 12 do
>           -- code
>           goto next5
>           -- code
>           for loop6 = 1 to 12 do
>             -- code
>             goto next6
>             -- code
>             :next6 
>           end for
>           :next5 
>         end for
>         :next4 
>       end for
>       :next3 
>     end for
>     :next2 
>   end for
>   :next1 
> end for

Is equivalent to...

> for loop1 = 1 to 12 do
>   -- code
>   goto next1
>   :next1 
> end for

Is this what you meant the code to do?

new topic     » goto parent     » topic index » view message » categorize

78. Re: New keyword added: continue

ken mortenson wrote:
> 
> Kat wrote:
> 
> > And without rounding, i am over 50.
> 
> Now I understand your loyalty to spaghetti.

I am not in favor of spagetti code. This is getting irritating to the point of
dropping Eu entirely.

> somewhere you've got a program running...
> 
> :49
> GOTO 49

No, i don't.
 
> ps: half italian and a quarter swede, so I like spaghetti too, just not
> in my code.  I once had a boss in NYC that used to say he was 80% finished
> and hand me a plate of spaghetti it fix.  He's also the guy that wrote
> self modifying code in BAL.  That was quite the experience.

I do have some self-modifying 6502 assy code, written without aid of an
assembler. I did it once, i ran out of memory on a C64, and rather than find more
somewhere, i modify one byte of memory on pass one, and set it back on pass two.
It's never broken.

Kat

new topic     » goto parent     » topic index » view message » categorize

79. Re: New keyword added: continue

Kat wrote:
> 
> This is getting irritating to the point of dropping Eu entirely.

Bye, kat!

new topic     » goto parent     » topic index » view message » categorize

80. Re: New keyword added: continue

c.k.lester wrote:
> 
> Kat wrote:
> > 
> > This is getting irritating to the point of dropping Eu entirely.
> 
> Bye, kat!

That's kinda messed up, man.

--
A complex system that works is invariably found to have evolved from a simple
system that works.
--John Gall's 15th law of Systemantics.

"Premature optimization is the root of all evil in programming."
--C.A.R. Hoare

j.

new topic     » goto parent     » topic index » view message » categorize

81. Re: New keyword added: continue

Kat wrote:
> 
> ken mortenson wrote:

> > Now I understand your loyalty to spaghetti.
> 
> I am not in favor of spagetti code. This is getting irritating to the point
> of dropping Eu entirely.

Please forgive me Kat.  I thought I was being cute.  Obviously I'm
not quite as charming as I must imagine myself to be.

new topic     » goto parent     » topic index » view message » categorize

82. Re: New keyword added: continue

Kat wrote:
>>> Why are these two blocks so different that
>>> you call the 2nd one "dangerous"



> I do not know why you'd do that code anyhow.

That is not the point, Kat. I know that you and all the other responsible coders
would not write such code. But if 'goto' exists then it it possible for SOMEONE
to write such code. And because of that possibility, the code maintainer has to
check EVERY BLOODY time what the actual control flow is just in case some
dunderhead wrote something this bad.

> Likewise, i could code up 100 procedures or functions, calling
> every one of them thru oddball routine_id() names, and cause
> everyone fits trying to trace them.

That is true. That is why the usage of each routine_id() needs to be justified
too. However, because of the forward referencing restriction in Euphoria,
routine_id() must be used in some cases because there is no alternative (apart
from code duplication).

> And strangely, isn't that
> :next target where someone(?) wants to put an "entry" keyword? OUCH!!

Also true. I've gone off the 'entry' keyword now for that reason and others.

> Do you want me to say you shouldn't code like that? 
> Granted. Do you want me to say someone could code like that? Granted.
> Are you asking me if i think that is good code? No.
> Would i code like that? No.

However, that is not the point, Kat. This is not about you. It is about that
"someone" who could code like this.

> I cannot write up every possible piece of code that
> could possibly contain a "goto" for your support. 

Then don't. No one is forcing you too. However, if anyone wants me,
specifically, to support their code that happens to use a 'goto', then they need
to convince me that there is no better way but to use 'goto'.

>  i am still in favor of goto being added to Eu.

I have no issue with goto being added to Euphoria. I have issues with me having
to support code (Euphoria or otherwise) that uses goto.

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

83. Re: New keyword added: continue

ken mortenson wrote:
> 
> Matt Lewis wrote:
> > 
> > ken mortenson wrote:
> > > 
> > > I wouldn't be adverse to an optional from/by
> > > 
> > > Loop from 7 by -1.2
> > >   if (Index<-14.2) exit
> > > End Loop
> > 
> > That's good to know.  I think.
> 
> So, what are you trying to tell me?  I can take it.  I'm a big boy.

Exactly.

Matt

new topic     » goto parent     » topic index » view message » categorize

84. Re: New keyword added: continue

ken mortenson wrote:
> 
> Kat wrote:
> 
> > for loop1 = 1 to 12 do
> >   -- code
> >   goto next1
> >   -- code
> >   for loop2 = 1 to 12 do
> >     -- code
> >     goto next2
> >     -- code
> >     for loop3 = 1 to 12 do
> >       -- code
> >       goto next3
> >       -- code
> >       for loop4 = 1 to 12 do
> >         -- code
> >         goto next4
> >         -- code
> >         for loop5 = 1 to 12 do
> >           -- code
> >           goto next5
> >           -- code
> >           for loop6 = 1 to 12 do
> >             -- code
> >             goto next6
> >             -- code
> >             :next6 
> >           end for
> >           :next5 
> >         end for
> >         :next4 
> >       end for
> >       :next3 
> >     end for
> >     :next2 
> >   end for
> >   :next1 
> > end for
> 
> Is equivalent to...
> 
> > for loop1 = 1 to 12 do
> >   -- code
> >   goto next1
> >   :next1 
> > end for
> 
> Is this what you meant the code to do?

It has no meaning, it's a waste of bytes. It shows "goto next1" goes to ":next1"
etc.. Forget it.

Kat

new topic     » goto parent     » topic index » view message » categorize

85. Re: New keyword added: continue

c.k.lester wrote:
> 
> Matt Lewis wrote:
> > c.k.lester wrote:
> > > Ah, I see how next/continue would work there, and retry. But restart-
> > > jumping OUT of a loop and then going back into it- looks like it might
> > > cause interpreter pains (memory leaks, etc.). And jumping out of the loop?
> > > Dunno. Maybe an interpreter modifier can speak to that.
> > You're probably afraid of 'exit', too.  :P
> > Seriously, exit is just a goto to the end of the loop.  It doesn't do any 
> > clean up or anything.  There isn't any needed.
> 
> You'd know.
> 
> I'm curious that there's no clean up necessary. It looks like there'd be a
> dangling variable. Eeeewwwwwww!!! :D
> 
> (I admit I've never used exit. I'm not a sloppy enough coder. HAHAHAHA. Just
> kidding. I might've used it once. Well, I just checked bbcmf-system. Out of
> about 8.6KLOC, exit appears 0 times. So, I probably never have used it.)

No cleanup is needed.
When you say
for i=1 to n do
-- ...
end for

a variable named i, but with a unique index, is created for the duration of the
routine it is in (top level code is in a procedure which returns in a special
way).
Since only the index of a variable is being used in actual execution, the only
concern is that this particular  i be used out of context. This is ensured by
hiding it when the parser sees "end for".
The parser doesn't goto or loop through code, it linearly ploughs through it.
The i variable is a variable like any other, but with a special scope, so that
the only references to it will appear inside the for loop it indexes.

What may be an issue is jumping into a for loop from outside. The first code in
a for loop initialises i, so strange things may happen if that code is skipped.
And the logic needed for goto to understand that it must reinitialise the for
loop index(es) involved before jumping in is probably costly. This can work in an
interpreter with multple passes over the source, but not with the current parser,
which is one pass only for speed.

CChris

new topic     » goto parent     » topic index » view message » categorize

86. Re: New keyword added: continue

Kat wrote:
> 
> Derek Parnell wrote:
> > 
> > Kat wrote:
> > > }}}
<eucode>
> > > :restart
> > > for loop = 1 to 12 do
> > > :retry
> > >  -- code
> > >  if blah then goto restart end if
> > >  if blorg then goto retry end if
> > >  if not x then goto exit end if
> > >  if CK then goto next end if
> > >  if worstcase then goto cleanup&return end if
> > >  -- code
> > >  :next
> > > end for
> > > :exit
> > > </eucode>
{{{

> > 
> > Hi Kat,
> > just a few of quick questions ...
> > 
> > ** How, as a maintainer of the code above, can I be sure that process flow
> > only
> > gets to the "restart:" label from either the statement immediately preceding
> > it or the 'goto' inside the loop? In other words, how can I be sure that
> > there
> > is not another 'goto restart' elsewhere in the code?
> 
> You can't. You read the code to see if there is another "goto" that label. The
> same with "exit", "return", etc.. I have a fair amount of code that has
> "return"
> sprinkled around, and no one has ever complained about more than one place
> leaving
> the function. One way to restrict the "where from" is to localise all "goto"
> to procedure/function blocks, and not allow it in top level code. Exactly like
> in OOEU.
> 
> > ** If I have to place another looping construct within the same scope as the
> > one above, what should I call the labels?
> 
> Umm, how about "loop2" ? Or you mean the targets for more "goto" of the same
> umm, form? Pick a name. You have the freedom to restart the inner loop, the
> outer loop, the nested while loop in there which you added later, etc.. I tend
> to give my nested loop names some description, even if it's just "index1", so
> i could have a "goto restart_index1", which sorta reads easily, and i know
> just
> where it's going, and i can get there with the one "goto" keyword from any
> depth
> of nested loops. The target being present alerts me, as i am reading down the
> code, that i may be going back to that point from somewhere.
>  
> > ** Under what circumstanes might I have to rename the labels?
> 
> Never, i believe. If you add loops, or other code, you do not need to change
> anything, assuming your intent to goto the :target is the same. If you wish
> to add a target, choose another name. Like i said, i tend to use the loop name
> as part of the target, and/or/as well as the purpose, if i need any
> clairification,
> rather insuring unique target names. This way i can wrap or unwrap nested
> loops,
> and not have a problem, as well as skip blocks during debug.
> 
> With goto scope restricted to proc/funct blocks, it makes some code even
> easier,
> such as "goto cleanup&return", which i know has the local scope of variables,
> is at the bottom of the block where code will fall thru to anyhow, and execute
> the "cleanup&return". With Eu the way it is now, i have hunks of code
> copy/pasted
> thruout which does the cleanup with local vars and returns, and those hunks
> are a nightmare to keep identical. Just as an aside, one other cure for that
> would be nested procedures, which could be called inside the nesting
> procedure,
> and the nested one have the scope of the nesting one's vars, i did this in
> Turbo
> Pascal a *lot*.
> 
> I believe Matt scored 100 with the way he did goto in OOEU, and i reiterate
> my suggestion all of OOEU be merged into Eu v4.
> 
> Kat

Which I'd support, with probably reservations about namespace handling.

CChris

new topic     » goto parent     » topic index » view message » categorize

87. Re: New keyword added: continue

Kat wrote:
> 
> Derek Parnell wrote:
> > 
> > Kat wrote:
> > 
> > Thanks Kat. 
> > 
> > > Derek Parnell wrote:
> > >> ... how can I be sure that there is not another 'goto restart'
> > >> elsewhere in the code?
> > > 
> > > You can't. You read the code to see if there is another "goto" that label.
> > >
> > 
> > How likely would this requirement increase the cost of maintenance?
> 
> In Textpad, drag the cursor over the label, and keypress for search. You
> could,
> i suppose, add a "came_from" var you interrogate in some way.
> 
> > > The same with "exit", "return", etc.. I have a fair amount
> > > of code that has "return" sprinkled around, and no one has
> > > ever complained about more than one place leaving
> > > the function.
> > 
> > I see this as a different issue. With 'goto' the question I raise deals with
> > how ones arrives at the label and has nothing to do with the 'goto'
> > statement
> > itself, but with 'exit' and 'return', the process flow to arrive at that
> > statement
> > is clear and local.
> 
> It is as clear as goto, i think. If i have a function, and i can return from
> it in several points, how do you know which return got you back out of the
> function?
>  
> > > One way to restrict the "where from" is to localise all "goto"
> > > to procedure/function blocks, and not allow it in top level code.
> > > Exactly like in OOEU.
> > 
> > Does the number of statements in a routine affect this position?
> 
> What?  I don't see the connection between statement count and use of any
> keyword.
> 
> > >> ** If I have to place another looping construct within the same
> > >> scope as the one above, what should I call the labels?
> > > 
> > > Umm, how about "loop2" ?
> > 
> > Does the requirement that a 'goto' needs a (unique within the scope) label,
> > reduce the amount of code that has to be read by maintainers? To me it seems
> > that using the combination of 'label xyz' and 'goto xyz' contains a lot more
> > redundant content than 'next' does.
> 
> But you *know* where goto will goto, and across languages, you haveto remember
> where each language differs, as well as how each human language interprets
> each
> of those other keywords, such as "next", "continue", etc.
> 
> > If such a loop containing labels, needs to be later nested inside another
> > loop,
> > what is the suggested naming convention, if any?
> > 
> > e.g. We start with ...
> >   restart1:
> >   loop
> >      -- some code --
> >      goto restart1
> >      -- some more code ---
> >      restart2:
> >      loop
> >        -- some code ---
> >        goto restart2:
> >        -- some code --
> >        goto restart1
> >        -- some code
> >      end loop
> >   end loop
> > 
> > But later this needs to be nested, such as ...
> > 
> >  restart3:
> >  loop
> >     -- some code ---
> >     restart1:
> >     loop
> >        -- some code --
> >        goto restart1
> >        -- some more code ---
> >        restart2:
> >        loop
> >          -- some code ---
> >          goto restart2:
> >          -- some code --
> >          goto restart1
> >          -- some code --
> >        end loop
> >     end loop
> >     -- some code --
> >     goto restart3
> >     -- some code --
> >  end loop
> > 
> > Would it be better to keep the existing label names as above, or is it
> > better
> > to rename them to keep the implied nesting level obvious?
> 
> Better to find a better way to code that. I would keep the labels more
> descriptive
> of what they do, and then not change them if you are wrapping or inserting new
> code that describes another function.
> 
> > >> ** Under what circumstanes might I have to rename the labels?
> >  
> > > Never, i believe. 
> > 
> > See above.
> 
> Did.
>  
> > > Just as an aside, one other cure for that
> > > would be nested procedures, which could be
> > > called inside the nesting procedure, and the
> > > nested one have the scope of the nesting one's
> > > vars 
> > 
> > Yes, nested routines would be very very nice. I suspect that we will have
> > this
> > ability soon, but not for v4.0
> 
> Cool.
> 
> Kat

It can be in 4.0 in a matter of days. The code works in interpreted mode in Æ.
There may be issues with translated code, as I recently discovered, but the bulk
of it could take like 3 days to port in, and a couple more for any residual bugs
(I have always stated tat that code was experimental and not thoroughly tested).

CChris

new topic     » goto parent     » topic index » view message » categorize

88. Re: New keyword added: continue

Derek Parnell wrote:
> 
> Kat wrote:
> >>> Why are these two blocks so different that
> >>> you call the 2nd one "dangerous"
> 
> 
> > I do not know why you'd do that code anyhow.
> 
> That is not the point, Kat. I know that you and all the other responsible
> coders
> would not write such code. But if 'goto' exists then it it possible for
> SOMEONE
> to write such code. And because of that possibility, the code maintainer has
> to check EVERY BLOODY time what the actual control flow is just in case some
> dunderhead wrote something this bad.
> 

Yeah, some coder did it wrong on the internet...

Code which is hard to maintain won't be maintained and will quietly die, like
many goto-less contribs in the Archive. Why should we care?

> > Likewise, i could code up 100 procedures or functions, calling
> > every one of them thru oddball routine_id() names, and cause
> > everyone fits trying to trace them.
> 
> That is true. That is why the usage of each routine_id() needs to be justified
> too. However, because of the forward referencing restriction in Euphoria,
> routine_id()
> must be used in some cases because there is no alternative (apart from code
> duplication).
> 
> > And strangely, isn't that
> > :next target where someone(?) wants to put an "entry" keyword? OUCH!!
> 
> Also true. I've gone off the 'entry' keyword now for that reason and others.
> 
> > Do you want me to say you shouldn't code like that? 
> > Granted. Do you want me to say someone could code like that? Granted.
> > Are you asking me if i think that is good code? No.
> > Would i code like that? No.
> 
> However, that is not the point, Kat. This is not about you. It is about that
> "someone" who could code like this.
> 
> > I cannot write up every possible piece of code that
> > could possibly contain a "goto" for your support. 
> 
> Then don't. No one is forcing you too. However, if anyone wants me,
> specifically,
> to support their code that happens to use a 'goto', then they need to convince
> me that there is no better way but to use 'goto'.
> 
> >  i am still in favor of goto being added to Eu.
> 
> I have no issue with goto being added to Euphoria. I have issues with me
> having
> to support code (Euphoria or otherwise) that uses goto.
> 

We may agree that the standard library, nor the interpreter, shoud not have goto
(the C code in backend and translated code has them galore). If you supervise
coders, you may ask them not to use it, since you are the boss. Any remaining
concern?

CChris

> -- 
> Derek Parnell
> Melbourne, Australia
> Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

89. Re: New keyword added: continue

CChris wrote:

> Which I'd support, with probably reservations about namespace handling.

What is it that you would support? Your response is not clear about what section
of that very long post you're referring to.

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

90. Re: New keyword added: continue

CChris wrote:

> It can be in 4.0 in a matter of days. 

What is the 'it' you talk about here?

Whatever it is, don't add it to Eu until we all know what 'it' is that you are
proposing to do.


-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

91. Re: New keyword added: continue

CChris wrote:

> If you supervise coders, you may ask them not to use it,
> since you are the boss. Any remaining concern?

Are you talking to me, Chris? If so, what are you talking about? I really
haven't got a clue what trying to say to me.

-- 
Derek Parnell
Melbourne, Australia
Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

92. Re: New keyword added: continue

Derek Parnell wrote:
> 
> CChris wrote:
> 
> > Which I'd support, with probably reservations about namespace handling.
> 
> What is it that you would support? Your response is not clear about what
> section
> of that very long post you're referring to.
> 

The section preceding my comment, ie getting 80+% of OOEu into official Eu.

CChris

> -- 
> Derek Parnell
> Melbourne, Australia
> Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

93. Re: New keyword added: continue

CChris wrote:
> 
> 
> The section preceding my comment, ie getting 80+% of OOEu into official Eu.
> 

What specific functionality of OOeu?

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

94. Re: New keyword added: continue

Derek Parnell wrote:
> 
> CChris wrote:
> 
> > It can be in 4.0 in a matter of days. 
> 
> What is the 'it' you talk about here?
> 

Support for nested routines. Like in
function umbrella()
integer n1
sequence s2
procedure foo()
--...
end procedure
-- umbrella code
end function


A nested routine can be called only by
* itself
* the routine it is nested in (recursively)
* any routine recursively nested in it
* a sibling, ie another routine singly nested into the same parent
* any routine recursively nested in a sibling

Top level code is not considered to have any nested routine.

The rules are needed in case of multiple nesting, so that no variable name clash
occurs.

Calling an indirect descendent (grandchild or more) is not forbidden, but
probably to be frowned upon.

Only vars defined by a routine or any of its ancestors are available to it.

> Whatever it is, don't add it to Eu until we all know what 'it' is that you are
> proposing to do.

Of course smile

CChris

> 
> 
> -- 
> Derek Parnell
> Melbourne, Australia
> Skype name: derek.j.parnell

new topic     » goto parent     » topic index » view message » categorize

95. Re: New keyword added: continue

Derek Parnell wrote:
> 
> CChris wrote:
> 
> > If you supervise coders, you may ask them not to use it,
> > since you are the boss. Any remaining concern?
> 
> Are you talking to me, Chris? If so, what are you talking about? I really
> haven't
> got a clue what trying to say to me.
> 
> -- 
> Derek Parnell
> Melbourne, Australia
> Skype name: derek.j.parnell

You said: I'm concerned about having someday to maintain code that someone wrote
badly using goto.

Let's assume the oncern is not overplayed. Now how would that situation be
happening?
1/ Because the Eu interpreter or the standard lib uses goto. We mat reasonably
agree not to let this happen. After all, they are in the greater common
denominator of Eu, which dosn't include goto.
2/ Because someone you supervise is giving you such code. Then you are free to
set your coding rules, including not using goto.
3/ Because a supervisor hands you that job, and he accepted goto in code. But
then you were aware that it ould happen, right?
4/ Otherwise, you have hardly any obligation to maintain any code you didn't
write, so you can decide to not maintain if there's a goto.

Is that clearer? 
So, you can always avoid maintaining the dreaded code, and your concerns will
remain theory, even with goto in the language, not actual.

CChris

Notes: 
1/ I'm not actively pushing for goto, as it may be of scarce usefulness 
with the new flow control statements in, and has serious pitfalls. However, I
see that most of the reasons put forward against it are quite wrong.

2/ Can someone point me to actual publicly released spaghetti code? It's
everyone's talk, but I have never seen any. Preferrably something less than 5
year old.

new topic     » goto parent     » topic index » view message » categorize

96. Re: New keyword added: continue

> 
> You said: I'm concerned about having someday to maintain code that someone
> wrote
> badly using goto.
>

<snip>
 
> Let's assume the concern is not overplayed. Now how would that situation be 
> happening?
>
> 1/ Because the Eu interpreter or the standard lib uses goto. We mat 
> reasonably agree not to let this happen. After all, they are in the greater 
> common denominator of Eu, which dosn't include goto.

I've heard a few people say this and it does not make sense to me. I am not
arguing for or against goto but here is my simple observation on the above
statement.

If goto is not good for the standard libraries than it's not good for the
language. If it is good for the language than it's good for the standard library.
I see no exceptions to this rule. Why would we add language functionality and
then ban it from use? If we have the idea it should be banned, then it shouldn't
be added! If we think it should be added then we cannot/should not ban it's use!

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

97. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> CChris wrote:
> > 
> > 
> > The section preceding my comment, ie getting 80+% of OOEu into official Eu.
> > 
> 
> What specific functionality of OOeu?
> 
> --
> Jeremy Cowgar
> <a href="http://jeremy.cowgar.com">http://jeremy.cowgar.com</a>

- prototype based classes
- dynamic variables (var_id(), read_variable(), ...)
- dynamic code execution (eval() and friends)
- supportfor optional : return_type in funvtion headers
- and, why not?, goto

CChris

new topic     » goto parent     » topic index » view message » categorize

98. Re: New keyword added: continue

CChris wrote:
> 
> Jeremy Cowgar wrote:
> > 
> > CChris wrote:
> > > 
> > > 
> > > The section preceding my comment, ie getting 80+% of OOEu into official
> > > Eu.
> > > 
> > 
> > What specific functionality of OOeu?
> > 
> > --
> > Jeremy Cowgar
> > <a href="http://jeremy.cowgar.com">http://jeremy.cowgar.com</a>
> 
> - prototype based classes

Wait -- OOEU has classes. I don't remember it having "prototype-based classes".

From my readings, prototype-based OO is very different from class-based OO
 because in class-based OO classes and objects are different kinds of things and
 in prototype-based they aren't.

> - dynamic variables (var_id(), read_variable(), ...)
> - dynamic code execution (eval() and friends)
> - supportfor optional : return_type in funvtion headers

What is "optional : return_type in function headers"? That sounds like a move
away from genericity to me.

> - and, why not?, goto
> 
> CChris



--
A complex system that works is invariably found to have evolved from a simple
system that works.
--John Gall's 15th law of Systemantics.

"Premature optimization is the root of all evil in programming."
--C.A.R. Hoare

j.

new topic     » goto parent     » topic index » view message » categorize

99. Re: New keyword added: continue

Jason Gade wrote:
> 
> CChris wrote:
> > 
> > - supportfor optional : return_type in funvtion headers
> 
> What is "optional : return_type in function headers"? That sounds like a move
> away from genericity to me.

You could overload class methods as long as they had different signatures.  
ooeu mangled names similar to C++.  So you could have two different methods
with the same name and same number of parameters.  The return type helped
the parser figure out which method to use based upon the return parameters
from functions.  It wasn't enforced in ooeu.
euclass complex( sequence c )
    atom real, imaginary
    
    function add( atom a ) : complex
        ...
    end function

    function add( complex c )
        ... 
    end function

    function complex( atom r ) : complex
        return {r, 0}
    end function

    function complex( atom r, atom i ) : complex
        return {r, i}
    end function

    function complex( complex c ) : complex
        return c
    end function
end euclass

complex x, y
x = complex( 0 )
y = complex( 5, 2 )

x = x.add( 3 )
x = x.add( y )
x = x.add( y.add( 2 ) )


new topic     » goto parent     » topic index » view message » categorize

100. Re: New keyword added: continue

Matt Lewis wrote:
> 
> Jason Gade wrote:
> > 
> > CChris wrote:
> > > 
> > > - supportfor optional : return_type in funvtion headers
> > 
> > What is "optional : return_type in function headers"? That sounds like a
> > move
> > away from genericity to me.
> 
> You could overload class methods as long as they had different signatures. 
> 
> ooeu mangled names similar to C++.  So you could have two different methods
> with the same name and same number of parameters.  The return type helped
> the parser figure out which method to use based upon the return parameters
> from functions.  It wasn't enforced in ooeu.
> }}}
<eucode>
> euclass complex( sequence c )
>     atom real, imaginary
>     
>     function add( atom a ) : complex
>         ...
>     end function
> 
>     function add( complex c )
>         ... 
>     end function
> 
>     function complex( atom r ) : complex
>         return {r, 0}
>     end function
> 
>     function complex( atom r, atom i ) : complex
>         return {r, i}
>     end function
> 
>     function complex( complex c ) : complex
>         return c
>     end function
> end euclass
> 
> complex x, y
> x = complex( 0 )
> y = complex( 5, 2 )
> 
> x = x.add( 3 )
> x = x.add( y )
> x = x.add( y.add( 2 ) )
> </eucode>
{{{


Yeah, I had to recheck the docs after CChris mentioned it.

How does that affect non-method routines?

--
A complex system that works is invariably found to have evolved from a simple
system that works.
--John Gall's 15th law of Systemantics.

"Premature optimization is the root of all evil in programming."
--C.A.R. Hoare

j.

new topic     » goto parent     » topic index » view message » categorize

101. Re: New keyword added: continue

Jason Gade wrote:
> 
> Matt Lewis wrote:
> > 
> > Jason Gade wrote:
> > > 
> > > What is "optional : return_type in function headers"? That sounds like a
> > > move
> > > away from genericity to me.
> > 
> > You could overload class methods as long as they had different signatures. 
> > 
> > ooeu mangled names similar to C++.  So you could have two different methods
> > with the same name and same number of parameters.  The return type helped
> > the parser figure out which method to use based upon the return parameters
> > from functions.  It wasn't enforced in ooeu.
>
> 
> Yeah, I had to recheck the docs after CChris mentioned it.
> 
> How does that affect non-method routines?

It doesn't, except when they're used as parameters for method calls.  
Basically, the return type was stored in a slot in the symbol table for
each function (defaulted to object, IIRC).  It was therefore an additional
couple of tokens to parse, and a little bit of additional information in the
symbol table that the OO symbol resolution code used.

Matt

new topic     » goto parent     » topic index » view message » categorize

102. Re: New keyword added: continue

CChris wrote:
> So, you can always avoid maintaining the dreaded code, and your concerns will
> remain theory, even with goto in the language, not actual.

With all due respect, this is incorrect.  In the real world, supervisors are
not baby sitters.  They usually (almost always) do not have time for a full
(or even partial) code review.  Even if a supervisor assigns a senior
programmer to review a junior programmers code, in a real shop where
everybodies working on there own stuff, it just doesn't get done.

Only when code review is part of an institutional and formal process does
it get done, which is hardly ever the case.  So if you agree (and you
certainly have the right not to) that some feature makes maintainance a
greater issue; if that feature is in the language you can be assured that
some will abuse it.  OTOH, whatever doesn't exist can not be abused.

new topic     » goto parent     » topic index » view message » categorize

103. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> 
> > You said: I'm concerned about having someday to maintain code that someone
> > wrote
> > badly using goto.
> >
> 
> <snip>
>  
> > Let's assume the concern is not overplayed. Now how would that situation be 
> > happening?
> >
> > 1/ Because the Eu interpreter or the standard lib uses goto. We mat 
> > reasonably agree not to let this happen. After all, they are in the greater 
> > common denominator of Eu, which dosn't include goto.
> 
> I've heard a few people say this and it does not make sense to me. I am not
> arguing for or against goto but here is my simple observation on the above
> statement.
> 
> If goto is not good for the standard libraries than it's not good for the
> language.
> If it is good for the language than it's good for the standard library. I see
> no exceptions to this rule. Why would we add language functionality and then
> ban it from use? If we have the idea it should be banned, then it shouldn't
> be added! If we think it should be added then we cannot/should not ban it's
> use!

That's just too logical Jeremy.  What are you, some kind of fanatic? blink

new topic     » goto parent     » topic index » view message » categorize

104. Re: New keyword added: continue

Jason Gade wrote:
> 
> Matt Lewis wrote:
> > 
> > Jason Gade wrote:
> > > 
> > > CChris wrote:
> > > > 
> > > > - supportfor optional : return_type in funvtion headers
> > > 
> > > What is "optional : return_type in function headers"? That sounds like a
> > > move
> > > away from genericity to me.
> > 
> > You could overload class methods as long as they had different signatures. 
> > 
> > ooeu mangled names similar to C++.  So you could have two different methods
> > with the same name and same number of parameters.  The return type helped
> > the parser figure out which method to use based upon the return parameters
> > from functions.  It wasn't enforced in ooeu.
> > }}}
<eucode>
> > euclass complex( sequence c )
> >     atom real, imaginary
> >     
> >     function add( atom a ) : complex
> >         ...
> >     end function
> > 
> >     function add( complex c )
> >         ... 
> >     end function
> > 
> >     function complex( atom r ) : complex
> >         return {r, 0}
> >     end function
> > 
> >     function complex( atom r, atom i ) : complex
> >         return {r, i}
> >     end function
> > 
> >     function complex( complex c ) : complex
> >         return c
> >     end function
> > end euclass
> > 
> > complex x, y
> > x = complex( 0 )
> > y = complex( 5, 2 )
> > 
> > x = x.add( 3 )
> > x = x.add( y )
> > x = x.add( y.add( 2 ) )
> > </eucode>
{{{

> 
> Yeah, I had to recheck the docs after CChris mentioned it.
> 
> How does that affect non-method routines?
> 
> --
> A complex system that works is invariably found to have evolved from a simple
> system that works.
> --John Gall's 15th law of Systemantics.
> 
> "Premature optimization is the root of all evil in programming."
> --C.A.R. Hoare
> 
> j.

In self documentation, optimisation in returning vlues and again clearer code.
That's why it would be optional for non OO routines.

CChris

new topic     » goto parent     » topic index » view message » categorize

105. Re: New keyword added: continue

Jeremy Cowgar wrote:
> 
> If goto is not good for the standard libraries than it's not good for the
> language. If it is good for the language than it's good for the standard
> library. I see no exceptions to this rule. Why would we add language
> functionality and then ban it from use? If we have the idea it should be
> banned, then it shouldn't be added! If we think it should be added then we
> cannot/should not ban it's use!

That's a good general principle, but not necessarily true for every case.  One
place where goto can be a lifesaver is in porting code from other languages
that either have goto, or have other flow control structures that we don't.

Goto emulation in these cases can lead to really messy code that's technically
structured code, but the mess of nested ifs and flags can make a giant knot
that could be cut with a well placed goto here and there.  They can also be
used in certain cases to great effect in optimizing (take a look at the back
end of the interpreter :).

I accept that some view this as insufficient reason for adding goto.  I 
happen to disagree with them.

Matt

new topic     » goto parent     » topic index » view message » categorize

106. Re: New keyword added: continue

ken mortenson wrote:
> 
> Jeremy Cowgar wrote:
> > 
> > 
> > > You said: I'm concerned about having someday to maintain code that someone
> > > wrote
> > > badly using goto.
> > >
> > 
> > <snip>
> >  
> > > Let's assume the concern is not overplayed. Now how would that situation
> > > be
> > > happening?
> > >
> > > 1/ Because the Eu interpreter or the standard lib uses goto. We mat 
> > > reasonably agree not to let this happen. After all, they are in the
> > > greater
> > > common denominator of Eu, which dosn't include goto.
> > 
> > I've heard a few people say this and it does not make sense to me. I am not
> > arguing for or against goto but here is my simple observation on the above
> > statement.
> > 
> > If goto is not good for the standard libraries than it's not good for the
> > language.
> > If it is good for the language than it's good for the standard library. I
> > see
> > no exceptions to this rule. Why would we add language functionality and then
> > ban it from use? If we have the idea it should be banned, then it shouldn't
> > be added! If we think it should be added then we cannot/should not ban it's
> > use!
> 
> That's just too logical Jeremy.  What are you, some kind of fanatic? blink

1/ The standard library is made of very short routines, with perhaps the
exception of sort.e. There would be hardly any point in using goto there anyway.

2/The interpreter is made of a few source files maintained by a few programmers.
That selected group may decide anything that helps keep it cohesive.

In both cases, there is no reason to apply the same strategy to general code.

CChris

new topic     » goto parent     » topic index » view message » categorize

107. Re: New keyword added: continue

Matt Lewis wrote:
>  
> I accept that some view this as insufficient reason for adding goto.  I 
> happen to disagree with them.
> 

I think goto should be added, however, if goto exists and it makes sense to use
it in a given situation, then it should be allowed in the standard library.
Everyone is afraid of spaghetti code. We can create spaghetti code with or
without goto. What stops us from doing so? Hopefully those contributing to
Euphoria know how to program w/o spaghetti. Hopefully those peer reviewing
commits will recognize spaghetti when it's committed. To say that goto could
*possibly* create spaghetti *if* used improperly by a *novice* programmer
therefore it should not be allowed in the standard library sounds a bit odd to
me.

--
Jeremy Cowgar
http://jeremy.cowgar.com

new topic     » goto parent     » topic index » view message » categorize

108. Re: New keyword added: continue

Matt Lewis wrote:
> 
> Goto emulation in these cases can lead to really messy code that's technically
> structured code, but the mess of nested ifs and flags can make a giant knot
> that could be cut with a well placed goto here and there.

Matt, here's something to think about for a moment.  If GOTO is so essential,
how is it that MILLIONS of programmer, writing BILLIONS of lines of code
over DECADES have been able to forgo using it?  This is a serious thing to
ponder.

I admit the adustment to writing structured code is not an easy one, but the
rewards (this is just one of many voices of experience) are more than you know.

new topic     » goto parent     » topic index » view message » categorize

109. Re: New keyword added: continue

ken mortenson wrote:
> 
> Matt Lewis wrote:
> > 
> > Goto emulation in these cases can lead to really messy code that's
> > technically
> > structured code, but the mess of nested ifs and flags can make a giant knot
> > that could be cut with a well placed goto here and there.
> 
> Matt, here's something to think about for a moment.  If GOTO is so essential,
> how is it that MILLIONS of programmer, writing BILLIONS of lines of code
> over DECADES have been able to forgo using it?  This is a serious thing to
> ponder.

Yes, lot's of code has been written without using $language_feature.  It does
not follow that $language_feature is superfluous.
 
> I admit the adjustment to writing structured code is not an easy one, but the
> rewards (this is just one of many voices of experience) are more than you
> know.

This statement makes even less sense than the one before.  Are you sure that
you meant to respond to me?

Matt

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu