1. with entry and goto statement

did not quite get the explanation of the entry statement.

 
 public function find_all ( object x, sequence source , integer from ) 
 sequence ret = {} 
 
 while from > 0 with entry do 
 ret &= from 
 from += 1 
 entry 
 from = find_from (x, source , from ) 
 end while 
 return ret 
 end function 

also why no example for the goto statement.for beginners like me reading a lot of english can be boring.i mean a practical example in the explanation well explained is kind of better.i did expect it in some explanations cos to be honest sometimes the things explained can be confusing.i have to practically take a sheet of paper and try to practise on my own to get the concept.nevertheless i have to say its a very good manual cos so far i get almost all the explanations.this is just my view anyway.you know taking it from a more practical approach.i really wanna learn this language and do something with it.thanks guys

new topic     » topic index » view message » categorize

2. Re: with entry and goto statement

mexzony said...

also why no example for the goto statement.

There shouldn't be an example. As a beginner, you should consider the goto statement as pure evil, something you use once-in-a-decade, when you really have no other choice. If you have a block of code that you need to invoke from several places, put it in a subroutine.

Regards, Pete

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

3. Re: with entry and goto statement

petelomax said...
mexzony said...

also why no example for the goto statement.

There shouldn't be an example. As a beginner, you should consider the goto statement as pure evil, something you use once-in-a-decade, when you really have no other choice. If you have a block of code that you need to invoke from several places, put it in a subroutine.

Regards, Pete

I know it is the current fashion amongst all developers to bash the GOTO statement. It is undesirable to do so.

Let me be precise. There is unjustified abhorrence of GOTO and many other features which are direct descendants of CPU behavior (as seen in Assembler). Jump Relative, Jump Conditional and Jump Absolute are the cornerstone of writing in Assembler. Their cousins, Call Relative, Call Absolute and Call Conditional are seen in the GOSUB statement.

It is a matter of great surprise that we accept all the implied GOTOs within IF-THEN-ELSE and even Exits from this and DO-WHILE loops and frown upon GPTOs created by the program writer.

Funnily when we write an Application for the end user we give the End User ALL the facility of GOTO and GOSUB, by allowing him to branch out to any part of application and return or not return at the user's own choosing! It seems that Application users are very comfortable working with these facilities which the compiler writer is denying to the sophisticated Application developer.

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

4. Re: with entry and goto statement

Vinoba said...

I know it is the current fashion amongst all developers to bash the GOTO statement. It is undesirable to do so.

Let me be precise. There is unjustified abhorrence of GOTO and many other features which are direct descendants of CPU behavior (as seen in Assembler). Jump Relative, Jump Conditional and Jump Absolute are the cornerstone of writing in Assembler. Their cousins, Call Relative, Call Absolute and Call Conditional are seen in the GOSUB statement.

It is a matter of great surprise that we accept all the implied GOTOs within IF-THEN-ELSE and even Exits from this and DO-WHILE loops and frown upon GPTOs created by the program writer.

Funnily when we write an Application for the end user we give the End User ALL the facility of GOTO and GOSUB, by allowing him to branch out to any part of application and return or not return at the user's own choosing! It seems that Application users are very comfortable working with these facilities which the compiler writer is denying to the sophisticated Application developer.

I'm with you 100%. GOTO is a very valid and powerful tool that should be used much more than it currently is. It can greatly simplify code make it more clean, easier to maintain and easier to understand. However, as programmers in todays age we have been "programmed" to think it's a terrible evil. This is not true.

When reading the history of GOTO, the first paper published against it was when languages used almost ALL goto's for EVERY loop construct. No way I would program like that today. We have, now, nice loops such as for, while and loop. We have if blocks instead of a single if X goto Y statment, etc... GOTO certainly should not be used for every jump that exists but goto is far from evil. It's beautiful!

What I see as worse than goto is returning from a function in 5 different places on error conditions or deeply nesting if statments checking for these error conditions so you can have only one exit point and not have to use goto. This is evil. Goto can be used and should be used in such situations. Code will, again, be much more readable, concise, understandable and maintainable.

People should not be afraid of goto. People should not replace if, while, loop, for with a goto. People should not have a hundred exit points from their functions. People should not break their functions into illogical blocks to avoid a goto. The Euphoria standard library uses goto in a few well placed situations. All of your translated applications use goto. There are many valid uses. I just posted a message about Best Practices, I think some valid examples of goto should be placed there to help everyone decide when to and when not to use goto. But to say it's evil is incorrect in my book. Now, global? That's another story global is evil (in most situations grin) but even it has a place ;-D

Jeremy

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

5. Re: with entry and goto statement

mexzony said...

did not quite get the explanation of the entry statement.

public function find_all ( object x, sequence source , integer from ) 
    sequence ret = {} 
 
    while from > 0 with entry do 
        ret &= from 
        from += 1 
    entry 
        from = find_from (x, source , from ) 
    end while 
    return ret 
end function 

With entry causes the while loop to skip its initial check (in this case from > 0) and jump directly to the entry statement on its first execution only. So, in this case the loop first executes from = find_from(x, source, from) before doing any condition check and before doing the ret &= from and from += 1 lines. This loop could be rewritten (for demo purposes) as:

from = find_from(x, source, from) 
while from > 0 do 
    ret &= from 
    from += 1 
    from = find_from(x, source, from) 
end while 

See how the with entry in this case eliminated the duplicate "initialization" code? In this case the "initialization" code and the "increment" code are the same, so a with entry makes sense as to remove the duplication.

Does that clear it up any?

Jeremy

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

6. Re: with entry and goto statement

I just stumbled across this thread from Linus Torvalds:

From: Linus Torvalds 
Subject: Re: any chance of 2.6.0-test*? 
Date: 	Sun, 12 Jan 2003 12:22:26 -0800 (PST) 
On Sun, 12 Jan 2003, Rob Wilkens wrote: 
> 
> However, I have always been taught, and have always believed that 
> "goto"s are inherently evil.  They are the creators of spaghetti code 
 
No, you've been brainwashed by CS people who thought that Niklaus Wirth 
actually knew what he was talking about. He didn't. He doesn't have a 
frigging clue. 
 
> (you start reading through the code to understand it (months or years 
> after its written), and suddenly you jump to somewhere totally 
> unrelated, and then jump somewhere else backwards, and it all gets ugly 
> quickly).  This makes later debugging of code total hell. 
 
Any if-statement is a goto. As are all structured loops. 
And sometimes structure is good. When it's good, you should use it. 
And sometimes structure is _bad_, and gets into the way, and using a 
"goto" is just much clearer. 
 
For example, it is quite common to have conditionals THAT DO NOT NEST. 
In which case you have two possibilities 
- use goto, and be happy, since it doesn't enforce nesting 
This makes the code _more_ readable, since the code just does what 
the algorithm says it should do. 
- duplicate the code, and rewrite it in a nesting form so that you can 
use the structured jumps. 
This often makes the code much LESS readable, harder to maintain, 
and bigger. 
 
The Pascal language is a prime example of the latter problem. Because it 
doesn't have a "break" statement, loops in (traditional) Pascal end up 
often looking like total shit, because you have to add totally arbitrary 
logic to say "I'm done now". 
 
Linus 

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

7. Re: with entry and goto statement

I learned to program in the '70s using Pascal and learned all about the evils of the GOTO statement.

While I can understand that people don't like to use "I'm done" type tests, I'm still not completely comfortable with break commands because they sometimes seem ambiguous. Off the top of my head I'm going to try some bogus code to try to point to some possible confusion with break statements.

while condition1 do 
  if condition2 then break 
  for 1 to 100 do 
    if condition3 then break 
    while condition4 do 
      if condition5 then break 
    end while 
    if condition6 then break 
  end for 
  if condition7 then break 
end while 

Do all of these break to the end of the innermost loop construct it is within? This would mean that breaking on condition3 or condition6 would jump to the end of the for loop and breaking on either condition2 or condition7 would jump to the end of the outer while loop.

What if I want to break to the end of the outer while loop on condition5? Are there loop labels for identifying which loop construct is being broken out of? For instance, could I label the outer while loop as OuterW and then break to OuterW from anywhere within the while's code regardless of what other looping I might be doing within the while loop?

I've used Euphoria just for fun (see my JoKoSoKo game) and haven't yet tried it with the newly released version (though I do have it working with a beta version, so I assume that it should not need much if any mods to work with the public release). Maybe these concerns are addressed and I just haven't looked at the manual enough to recognize it.

I appreciate all of the hard work done by the people supporting Euphoria and look forward to continuing to use it. I'm thinking of trying to rewrite my game using wxWindows (I think that's what I've seen referred to) instead of Win32Lib so that I could have it available for both Windows and Linux.

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

8. Re: with entry and goto statement

JoKeR said...

... break and loops ...

<snip>

Euphoria is amongst the best (dare I say) with this. I think by break, you mean exit. exit alone always exits from the containing loop. You can, however, have labels:

while 1 label "for-ever" do 
    for i = 1 to length(families) label "each-family" do 
        sequence children = families[i][CHILDREN] 
        for j = 1 to length(children) label "each-child" do 
            if equal(children[j][NAME], "John Doe") then 
                exit -- exits the containing loop, 'each-child' 
            elsif equal(children[j][NAME], "Jane Doe") then 
                exit "each-family" -- exits from the 'each-family' loop 
            elsif equal(children[j][NAME], "Jeff Doe") then 
                exit "for-ever" -- exit all three loops 
            end if 
        end for 
    end for 
end while 

Now, as you say, poorly written, break, exit, continue and retry can all make some terrible code. They are powerful when used correctly and a virtual disaster when poorly written.

Jeremy

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

9. Re: with entry and goto statement

Thanks for the explanation, Jeremy. That really is a sensible way for such a construct to work.

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

10. Re: with entry and goto statement

Vinoba said...

I know it is the current fashion amongst all developers to bash the GOTO statement. It is undesirable to do so.

Let me be precise. There is unjustified abhorrence of GOTO and many other features which are direct descendants of CPU behavior (as seen in Assembler). Jump Relative, Jump Conditional and Jump Absolute are the cornerstone of writing in Assembler. Their cousins, Call Relative, Call Absolute and Call Conditional are seen in the GOSUB statement.

Because we aren't programming in machine language or assembler. We're programming at a higher level with better abstractions, abstractions which should hopefully be clearer.

Vinoba said...

It is a matter of great surprise that we accept all the implied GOTOs within IF-THEN-ELSE and even Exits from this and DO-WHILE loops and frown upon GPTOs created by the program writer.

Which is the abstraction. You know exactly where the program will branch and you do not end up with spaghetti code.

Back when I first started programming in BASIC, GOTO and GOSUB were all there was. There wasn't even an "ELSE" clause. And we had to use line numbers instead of labels, which are themselves an abstraction.

Vinoba said...

Funnily when we write an Application for the end user we give the End User ALL the facility of GOTO and GOSUB, by allowing him to branch out to any part of application and return or not return at the user's own choosing! It seems that Application users are very comfortable working with these facilities which the compiler writer is denying to the sophisticated Application developer.

Okay. And? That's like apples and oranges. Or apples and bowling balls, rather.

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

11. Re: with entry and goto statement

jaygade said...

and you do not end up with spaghetti code.

Yeah, that's the point - *a single* goto can be quite elegant, but 37 overlapping and interweaving gotos cannot.

We must disuade newbie programmers from adopting goto as a weapon of choice.

Pete

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

12. Re: with entry and goto statement

petelomax said...

We must disuade newbie programmers from adopting goto as a weapon of choice.

Indeed, but not to the point of those who came before us and made a whole crop of programmers who are so afraid of goto they cease to use a language or a library that has or uses a goto statement. goto is a very valid, powerful and elegant solution in quite a few cases once you understand its proper use.

Jeremy

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

13. Re: with entry and goto statement

[/quote]Okay. And? That's like apples and oranges. Or apples and bowling balls, rather. [/quote]

Yes. We toss a lot of balls and bunch of grapes all over a Microsoft window and desktop, give the novice application user about 50-100 actions. He can choose any, come back or never come back, give him all kinds of options to go on a world trip and leave home (site) sometimes forgetting where his journey started. We call this a good application program and good software that can "do a lot things". Yet we shudder at a reasonably good application programmer using about 20 GOTOs in his work. Why? because the writer of Basic, or similar language could not give the application programmer a guarantee to be able to look after him.

Why so? Because we use C language. I just compiled one program (in another (higher) language - not euphoria). It did not compile under One C compiler. It compiled well in another but would not run, and compiled in a third and it runs so far.

Happy New year to everybody.

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

14. Re: with entry and goto statement

Users are not the same as programmers. Programs perform a specific task. Users are much more freeform in their actions.

I just don't see the comparison.

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

15. Re: with entry and goto statement

I think there is only one "goto" in a well-written user interface, and that is to goto the exit (file-quit). Everything else is more like a procedure or function. If that were not so, the program would be unusable.

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

16. Re: with entry and goto statement

jaygade said...

Users are not the same as programmers. Programs perform a specific task. Users are much more freeform in their actions.

I just don't see the comparison.

Contradictions in your statements abound. If one accepts that programmers have MORE knowledge of the tools they are using than End Users, and then accept your argument that users need a lot of freedom in their actions, which we often successfully endeavor to give then it is fair conclusion to accept that we, the programmers, have even better ability to do our "GOTOs" than the end user has.

How can we, the application programmers, give a thousand GOTOs to our end users in a program WHICH THEY DID NOT CREATE THEMSELVES, when we ourselves don't have the ability to navigate though a program of our own creation? If they have the ability to navigate through an unknown program, we, with better abilities than them, should have the ability to navigate though a program of our own creation.

Anyway, this discussion is not leading us anywhere. So Happy New year to you and your family. Happy programming with version 4.0.

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

17. Re: with entry and goto statement

irv said...

I think there is only one "goto" in a well-written user interface, and that is to goto the exit (file-quit). Everything else is more like a procedure or function. If that were not so, the program would be unusable.


LOL
useless

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

18. Re: with entry and goto statement

Vinoba said...

How can we, the application programmers, give a thousand GOTOs to our end users in a program WHICH THEY DID NOT CREATE THEMSELVES, when we ourselves don't have the ability to navigate though a program of our own creation? If they have the ability to navigate through an unknown program, we, with better abilities than them, should have the ability to navigate though a program of our own creation.

Because we do not. Every action by the user, either at the command line or even at the gui, is more akin to a function or procedure call than to a lowly goto. It is only a goto at the lowest, least abstract level.

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

19. Re: with entry and goto statement

Vinoba said...

How can we, the application programmers, give a thousand GOTOs to our end users in a program WHICH THEY DID NOT CREATE THEMSELVES, when we ourselves don't have the ability to navigate though a program of our own creation? If they have the ability to navigate through an unknown program, we, with better abilities than them, should have the ability to navigate though a program of our own creation.

It this is true, there would have to be a corresponding "come-from".

Without a "come-from", just about every program would be dead in the water the first time the user did anything.

Take for example notepad.exe. Without a come-from, the first time you pressed a key, and the character was displayed on the screen, you'd be at a dead end, unable to enter more characters.

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

20. Re: with entry and goto statement

name them

That is Jeremy, specify the places in a program where goto is necessary. I think it is where you need a bail out clause. Is this what you are referring to? Or do you have a another use?

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

Search



Quick Links

User menu

Not signed in.

Misc Menu