Share on Facebook Share on Twitter Email
Answers.com

go-to

 
Dictionary: go-to   ('')
adj.
Being a player on an athletic team who is relied upon to make important plays, especially in clutch situations: the team's go-to receiver.


Search unanswered questions...
Enter a question here...
Search: All sources Community Q&A Reference topics
Idioms: go to
Top


1.  See going to.
2.  Also, go toward. Contribute to a result, as in Can you name the bones that go to make the arms and legs? or The director has a good eye for seeing what will go toward an entire scene. [c. 1600]
3.  Begin, start, as in By the time she went to call, she'd forgotten what she wanted to say. The related idiom go to it means "get started, get going." P.G. Wodehouse used it in Louder & Funnier (1932): "Stoke up and go to it." [First half of 1700s]


WordNet: go to
Top
Note: click on a word meaning below to see its connections and related words.

The verb has 2 meanings:

Meaning #1: move, travel, or proceed toward some place
  Synonyms: repair to, resort to

Meaning #2: be present at (meetings, church services, university), etc.
  Synonym: attend


Wikipedia: Goto
Top

GOTO is a statement found in many computer programming languages. It is a combination of the English words go and to. It performs a one-way jump to another line of code. The jumped-to locations are usually identified using labels, though some languages use line numbers. At the machine code level, a goto is a form of branch or jump statement.

Many languages support the goto statement, and many do not. In Java, goto is a reserved word, but is unusable.[1][2]

Contents

Usage

   goto label

The goto statement is often combined with the if statement to cause a conditional transfer of control.

   IF condition THEN goto label

Programming languages impose different restrictions with respect to the destination of a goto statement. For example, in the C programming language it is not allowed to jump to a label contained within another function.[3] The setjmp/longjmp functions provide support for non-local gotos.

Criticism of goto usage and decline

The 1960s and 1970s saw computer scientists move away from GOTO statements in favor of the "structured programming" paradigm. Some programming style coding standards prohibit use of GOTO statements, particularly in view of the structured program theorem, which proved theoretically that a combination of the three structured programming constructs of sequence , repetition and selection was sufficient to perform any computation. While it didn't prove that the resulting program would be easier to write and maintain than one using the GOTO statement, or that it would execute efficiently in every context, this formal academic proof sparked a prominent debate among computer scientists, educators, language designers and application programmers that saw a slow but steady shift away from the formerly ubiquitous use of the GOTO.

Probably the most famous criticism of GOTO is a 1968 letter by Edsger Dijkstra called Go To Statement Considered Harmful.[4] In that letter Dijkstra argued that unrestricted GOTO statements should be abolished from higher-level languages because they complicated the task of analyzing and verifying the correctness of programs (particularly those involving loops). An alternative viewpoint is presented in Donald Knuth's Structured Programming with go to Statements [5] which analyzes many common programming tasks and finds that in some of them GOTO is the optimal language construct to use.

The perception that the GOTO was an undesirable feature had an effect on the design of some programming languages, and the effect was most prominent in the Algol family especially Pascal and its derivatives. Niklaus Wirth retained the GOTO and statement labels to act as destinations of the GOTO in Pascal, but his design forced the programmer to declare labels at the very top of the block in which they occurred, before the declaration of constants used in the block.[6] Ada, largely based on Pascal, retained this requirement although it dropped the rigid ordering of declarations and used a different format for statement labels. [7] Fortran introduced structured programming constructs in 1978 and in successive revisions the relatively loose semantic rules governing the allowable use of goto were tightened; the "extended range" in which a programmer could use a GOTO to enter and leave a still-executing DO loop was removed from the language in 1978,[8] and by 1995 several of forms of Fortran GOTO, including the Computed GOTO and the Assigned GOTO, had been deleted from the language.[9] Some successful modern programming languages, such as Java, Python and Ruby, lack the GOTO statement, though most provide some means of breaking out of a selection, or either breaking out of or moving on to the next step of an iteration.

Alternatives

Structured programming

In classical structured programming, three basic structures are used: sequence, repetition, and selection. Sequence is the execution of one program unit following another; repetition is the repeated execution of the same program unit until a desired program state is reached; and selection is the executing of one and only one of a fixed set of possible alternative program units depending on the program state. Here typically the "program unit" is a compound statement constructed in turn using the three basic structures.

Although these three control structures can all be hand-coded using gotos and ifs, the desire for clarity and efficient optimization led to the introduction and refinement of supporting structures such as (in Pascal) procedure and function blocks, while, repeat until, and for statements, and case statements.

In practice the need arose to refine this basic three-structure template, because the attempt to eliminate exceptional changes of control altogether generated a need for quite complex program state data, and language design had to adapt in order to reduce the combinatorial explosion. Typically the language designers provided a way to exit a structured unit prematurely (in C, break and continue). For handling exceptional situations, specialized exception handling constructs were added, such as try/catch/finally in Java.

Tail calls

In a paper delivered to the ACM conference in Seattle in 1977, Guy L. Steele summarized the debate over the GOTO and structured programming, and observed that procedure calls in the tail position of a procedure can be most optimally treated as a direct transfer of control to the called procedure, typically eliminating unnecessary stack manipulation operations. [10] Since such "tail calls" are very common in Lisp, a language where procedure calls are ubiquitous, this form of optimization considerably reduces the cost of a procedure call compared to the GOTO used in other languages. Steele argued that poorly implemented procedure calls had led to an artificial perception that the GOTO was cheap compared to the procedure call. Steele further argued that "in general procedure calls may be usefully thought of as GOTO statements which also pass parameters, and can be uniformly coded as [machine code] JUMP instructions", with the machine code stack manipulation instructions "considered an optimization (rather than vice versa!)".[10] Steele cited evidence that well optimized numerical algorithms in Lisp could execute faster than code produced by then-available commercial Fortran compilers because the cost of a procedure call in Lisp was much lower. In Scheme, a Lisp dialect developed by Steele with Gerald Jay Sussman, tail call optimization is mandatory.[11]

Although Steele's paper did not introduce much that was new to computer science, at least as it was practised at MIT, it brought to light the scope for procedure call optimization, which made the modularity-promoting qualities of procedures into a more credible alternative to the then-common coding habits of large monolithic procedures with complex internal control structures and extensive state data. In particular, the tail call optimizations discussed by Steele turned the procedure into a credible way of implementing iteration through tail recursion.

Object oriented programming

The influential languages Simula and Smalltalk were among the first to introduce the concepts of messages and objects. By encapsulating state data, object-oriented programming reduced software complexity to interactions (messages) between objects.

Variations

There are a number of different language constructs under the class of goto statements.

Computed GOTO

A computed GOTO (originally Fortran terminology) jumps to one of several labels based on the value of an expression. The ON ... GOTO statement in BASIC supports the computed GOTO and is useful for case-by-case branching, as in C's switch statement.[12] Some variants of BASIC support a computed GOTO that can be any line number, not just one from a list. For example, one could write GOTO i*1000 to jump to the line numbered 1000 times the value of a variable i (which might represent a selected menu option, for example).

Assigned GOTO

Originally found in Fortran, this variant transfers control to a statement label which is stored in (assigned to) a variable.

Some C compilers (e.g., gcc) support goto with a label variable using the label value operator. The label value operator && returns the address of its operand, which must be a label defined in the current function or a containing function. The value is a constant of type void * and should be used only in a computed goto statement. The feature is an extension to C and C++, implemented to facilitate porting programs developed with GNU C.[13] This C extension is sometimes referred to as a Computed goto, but it has the semantics of an assigned goto.

Continuations

A continuation is similar to a GOTO in that it transfers control from an arbitrary point in the program to a previously marked point. A continuation is more flexible than GOTO in those languages that support it, because it can transfer control out of the current function, something that a GOTO cannot do in most languages. In those language implementations that maintain stack frames for storage of local variables and function arguments, executing a continuation involves adjusting the program's call stack in addition to a jump. The longjmp function of the C programming language is an example of an escape continuation that may be used to escape the current context to a surrounding one. The Common Lisp GO operator also has this stack unwinding property, despite the construct being lexically scoped, as the label to be jumped to can be referenced from a closure.

In Scheme, continuations can even move control from an outer context to an inner one if desired. This almost limitless control over what code is executed next makes complex control structures such as coroutines and cooperative multitasking relatively easy to write.

Perl GOTO

In Perl, there is a variant of the goto statement that is not a traditional GOTO statement at all. It takes a function name and transfers control by effectively substituting one function call for another (a tail call): the new function will not return to the GOTO, but instead to the place from which the original function was called. Early versions of COBOL had the ALTER verb to accomplish this.

See also

References

  1. ^ "The Java Language Specification, Third Edition". http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.9. "The keywords const and goto are reserved, even though they are not currently used. This may allow a Java compiler to produce better error messages if these C++ keywords incorrectly appear in programs." 
  2. ^ "The Java Language Specification, Third Edition". http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.7. "Unlike C and C++, the Java programming language has no goto statement; identifier statement labels are used with break (§14.15) or continue (§14.16) statements appearing anywhere within the labeled statement." 
  3. ^ C Standard section 6.8.6.1 The goto statement
  4. ^ Edsger Dijkstra (March 1968). "Go To Statement Considered Harmful". Communications of the ACM 11 (3): 147–148. doi:10.1145/362929.362947. http://portal.acm.org/citation.cfm?id=1241518&coll=ACM&dl=ACM&CFID=11218690&CFTOKEN=24551268. 
  5. ^ Donald Knuth (1974). "Structured Programming with go to Statements". Computing Surveys 6 (4): 261–301. doi:10.1145/356635.356640. http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf. 
  6. ^ * Kathleen Jensen and Niklaus Wirth: PASCAL - User Manual and Report. Springer-Verlag, 1974, 1985, 1991, ISBN 0-387-97649-3 and ISBN 3-540-97649-3
  7. ^ John Barnes (2006-06-30). Programming in Ada 2005. Addison Wesley. p. 114–115. ISBN 0-32-134078-7. 
  8. ^ ANSI X3.9-1978. American National Standard – Programming Language FORTRAN. American National Standards Institute. Also known as ISO 1539-1980, informally known as FORTRAN 77
  9. ^ ISO/IEC 1539-1:1997. Information technology – Programming languages – Fortran – Part 1: Base language. Informally known as Fortran 95. There are a further two parts to this standard. Part 1 has been formally adopted by ANSI.
  10. ^ a b Guy Lewis Steele, Jr.. "Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO". MIT AI Lab. AI Lab Memo AIM-443. October 1977.
  11. ^ R5RS Sec. 3.5, Richard Kelsey, William Clinger, Jonathan Rees et al. (August 1998). "Revised5 Report on the Algorithmic Language Scheme". Higher-Order and Symbolic Computation 11 (1): 7–105. doi:10.1023/A:1010051815785. http://www.schemers.org/Documents/Standards/R5RS/. 
  12. ^ "Microsoft QuickBASIC: ON...GOSUB, ON...GOTO Statements QuickSCREEN.". Microsoft. 1988. http://www.qbasicnews.com/qboho/qckadvr@l804a.shtml. Retrieved 2008-07-03. 
  13. ^ Computed goto, IBM XL C/C++ compiler

External links


 
 
Learn More
Sahler, Leslie Jeanne (Quotes By)
ascend
fetch

Are you going to go out with her? Read answer...
Who does he go out with? Read answer...
Can you go out with me? Read answer...

Help us answer these
Keeps going and going and going?
Go will you go with?
Do you get a to go with you?

Post a question - any question - to the WikiAnswers community:

 

Copyrights:

Dictionary. The American Heritage® Dictionary of the English Language, Fourth Edition Copyright © 2007, 2000 by Houghton Mifflin Company. Updated in 2009. Published by Houghton Mifflin Company. All rights reserved.  Read more
Idioms. The American Heritage® Dictionary of Idioms by Christine Ammer. Copyright © 1997 by The Christine Ammer 1992 Trust. Published by Houghton Mifflin Company. All rights reserved.  Read more
WordNet. WordNet 1.7.1 Copyright © 2001 by Princeton University. All rights reserved.  Read more
Wikipedia. This article is licensed under the Creative Commons Attribution/Share-Alike License. It uses material from the Wikipedia article "Goto" Read more