mboost-dp1

Trifork A/S

JAOO bliver til GOTO

- Via Version2 - , indsendt af arne_v

Softwarekonferencen JAOO, der afvikles disse dage i Århus, er Danmarks største af sin art, og nu får den et nyt navn: GOTO.

Navneskiftet sker, fordi mange har den antagelse, at konferencen kun har fokus på Java, og det er ikke tilfældet. Version2 har talt med Kresten Krab Throrup, der er teknisk chef hos arrangøren Trifork, og han synes, det nye navn er et godt valg.

Kresten Krab Thorup til Version2 skrev:
Goto har charme og lidt glimt i øjet og så er det jo et sted, hvor man går hen.

Ud over at kunne annoncere det nye navn, så blev det også oplyst, at der vil komme en udgave af konferencen i København.

Den første GOTO-konference i Hovedstaden vil finde sted til maj næste år, hvor man satser på at lave en mindre udgave end moder-konferencen i Århus. Grundlaget burde ifølge Thorup være til stede, idet 200 ud af de 1.100 besøgende på konferencen i Århus kommer fra hovedstadsområdet.





Gå til bund
Gravatar #1 - Slettet Bruger [4082358464]
6. okt. 2010 07:04
Jeg har aldrig "programmeret" mere end 2 eller 3 bat filer. Men jeg synes da det er et genialt navn ^^
Gravatar #2 - GrillBiller
6. okt. 2010 07:04
jeg troede at goto var et fyfy ord i kodeverden...
Gravatar #3 - Remmerboy
6. okt. 2010 07:29
#2
det er det også, men den kan bruges, hvis man kan argumenterer for det, men ikke anbefalelsesværdigt
Gravatar #4 - mathiass
6. okt. 2010 07:31
#3: Nja, der er ingen goto i Java fx...
Gravatar #5 - Borgbjerg
6. okt. 2010 07:32
Jeg brugte det ihvertfald i stor stil - der er vel ikke andre måder at lave løkker i BASIC 64 ?

Det eneste argument imod det, er vel at det er svært at læse?
Gravatar #6 - MortVader
6. okt. 2010 07:33
GrillBiller (2) skrev:
jeg troede at goto var et fyfy ord i kodeverden...


Jojo, men det var det jo ikke i gamle dage. Det ved du også godt, vil jeg tro -når jeg kigger på dit avatar :D
Gravatar #7 - MortVader
6. okt. 2010 07:33
Borgbjerg (5) skrev:
Jeg brugte det ihvertfald i stor stil - der er vel ikke andre måder at lave løkker i BASIC 64 ?


Joh, der var da også FOR - NEXT løkker :)
Gravatar #8 - tazly
6. okt. 2010 07:41
Edsger Wybe Dijkstra: "Go-to statement considered harmful"
http://www.cs.utexas.edu/users/EWD/ewd02xx/EWD215....

I øvrigt interessant ræsonnement, at vores intellektuelle evner er stærke til at overskue komplekse statiske relationer, mens vi har vanskeligt ved at visualisere processer i udvikling, hvorfor vi bør tilstræbe at eksekveringsforløbet er let at læse ud fra koden.

#5, #7 Og gosub ;-)
Gravatar #9 - MortVader
6. okt. 2010 07:47
tazly (8) skrev:
#5, #7 Og gosub ;-)


Gosub kalder en subrutine. Det er ikke helt det samme ;)
Gravatar #10 - tazly
6. okt. 2010 07:55
MortVader (9) skrev:
Gosub kalder en subrutine. Det er ikke helt det samme ;)


Rekursive kald af subrutine kan også være nyttige til at opnå samme opførsel som løkker. Du har ret i, at der er forskel på rekursion og "normale" løkker. Rekursive kald putter jo på stakken for hver iteration.

Vh
Gravatar #11 - myplacedk
6. okt. 2010 08:02
GrillBiller (2) skrev:
jeg troede at goto var et fyfy ord i kodeverden...

Det er det skam ikke. Det er bare et spørgsmål om at bruge det rette værktøj, og det er langt de færreste der laver noget, hvor "goto" er det rette værktøj.

Java er allerede nævnt. Man må ikke bruge "goto" i Java, men det er alligevel et reserveret ord. Hvorfor? Fordi det bliver brugt i bytecoden.

Det samme gælder vel ca. alle andre kompilerede kode-formater.

Goto bliver brugt i primitive systemer. Nogle gange koder man i sådan et primitivt system, men typisk koder man i noget på et højere abstraktionsniveu, som så bliver oversat.

Tag fx. denne Java-kode:


		for (int i = 0; i<10; i++) {
System.out.println("Hello World!");
}


I min lille test blev det til noget i denne stil i bytecode:

0:iconst_0
1:istore_1
2:iload_1
3:bipush 10
5:icmpge 22

8:getstatic #2 <Field PrintStream System.out>
11:ldc1 #3 <String "Hello World!">
13:invokevirtual #4 <Method void PrintStream.println(String)>

16:iinc 1 1
19:goto 2


Altså:
0: Tag tallet 0
1: Placer det i variabel 1
2: Tag indholdet i variabel 1
3-4: Og tag tallet 10
5-7: Hvis tal to er større end tal et, gå til 22
8-15: Udskriv "Hello World"
16-18: Forøg variabel 1 med 1
19: Gå til 2

Én simpel for-løkke, to "goto". Den ene implicit, den anden explicit.

På dette niveau er "goto" ikke bare passende, men helt nødvendig. Men det niveau er godt nok besværligt at arbejde med. Derfor fandt man på at kode i et højere abstraktionsniveau, og så oversætte/compile til noget computeren kan bruge.
Gravatar #12 - PaulPeterPorges
6. okt. 2010 08:09
#11: Ja, så længe computeren selv anvender det på et lavere abstraktionsniveau, så er det fint. Som #8, klogt henviser til Dijkstra, så er goto en abstraktion som giver problemer, da relationerne ender med at være stærkt dynamiske. Lad computeren rode med det og evt. til enkelttilfælde for der kræves ekstrem kodeoptimering, hvor computeren ikke kan løse opgaven.
Gravatar #13 - gensplejs
6. okt. 2010 08:25
GÅ NU VÆK.... DUMME HATERE... Der er ikke noget galt i gode gamle goto. Hvis muligt har jeg altid en og kun en goto i alle programmer jeg skriver. (nostalgi er smukt)

Programming microsoft windows with C# af Charles Petzold skrev:
The goto is useful for getting out of deeply nested blocks and for writing amusingly obscure code.

Er min favorit beskrivelse af goto.
Det er bare ikke muligt at argumentere logisk mod
amusingly obscure code.
Gravatar #14 - 1000tusind
6. okt. 2010 08:51
Der er to typer programmører: Dem som er kloge nok til at undgå GOTO og dem som er kloge nok til at bruge GOTO uden problemer.

End of discussion
GOTO "topic" :)
Gravatar #15 - gensplejs
6. okt. 2010 09:03
1000tusind (14) skrev:
Der er to typer programmører: Dem som er kloge nok til at undgå GOTO og dem som er kloge nok til at bruge GOTO uden problemer.

End of discussion
GOTO "topic" :)

Hvad med dem der bruger goto uden at fatte en dart af hvad de laver :-)
Gravatar #16 - skipperskip
6. okt. 2010 09:12
gensplejs (15) skrev:
1000tusind (14) skrev:
Der er to typer programmører: Dem som er kloge nok til at undgå GOTO og dem som er kloge nok til at bruge GOTO uden problemer.

End of discussion
GOTO "topic" :)

Hvad med dem der bruger goto uden at fatte en dart af hvad de laver :-)

De kan vel ikke kaldes programmører.
Gravatar #17 - psn
6. okt. 2010 10:36
hey, HEY, stop for fanden!
"Sagde han egentlig ikke lige G-ordet, ham manden?"
Gravatar #18 - esbenr
6. okt. 2010 10:50
psn skrev:
hey, HEY, stop for fanden!
"Sagde han egentlig ikke lige G-ordet, ham manden?"


Der falder en stille tåre fra mit hjerte. den sang havde jeg lige glemt et kort splitsekund. {epic}

goto minder mig også om de gamle pascal-dage. - Herligt :-)

goto er gemt i de fleste sprog - også de mere højniveau. F.eks. C# har goto. (Hvis man har brug for det, har man for megentligt gjort noget andet galt ;-))
Gravatar #19 - vision-dk
6. okt. 2010 11:54
esbenr (18) skrev:
goto er gemt i de fleste sprog - også de mere højniveau. F.eks. C# har goto. (Hvis man har brug for det, har man for megentligt gjort noget andet galt ;-))


Tjaa... på den anden side set kan man sagtens finde et par fine anvendelses eksempler fra MS: goto
Gravatar #20 - mathiass
6. okt. 2010 12:06
myplacedk (11) skrev:
Java er allerede nævnt. Man må ikke bruge "goto" i Java, men det er alligevel et reserveret ord. Hvorfor? Fordi det bliver brugt i bytecoden.
Nja, det argument giver ingen mening. I så fald burde ord som aload, istore osv også være reserverede.

I øvrigt er den goto som kan bruges i de fleste højniveau sprog forskellig fra assembler goto i og med at goto er en statement i fx. C og C# og dermed begrænset til at kunne bruges når der ikke ligger noget på stakken.
Gravatar #21 - mathiass
6. okt. 2010 12:09
#19: Det første eksemel er et eksempel på noget helt andet, nemlig at goto kan bruges til at hoppe til en anden case i en switch statement i C#. Det andet eksempel (som er en rigtig anvendelse af en goto) løses i Java ved at man kan sætte en label på en løkke og bruge break og continue med denne label. Det finder jeg personligt mere elegant en at have en meget mere generel goto mekanisme som kun bør bruges til netop dette formål...
Gravatar #22 - arne_v
6. okt. 2010 12:26
#goto

GOTO i gamle dage i Basic og Fortran 66 blev ofte noget gyseligt kode.

Brugt fornuftigt er det ikke et problem. Fornuftigt kræver bl.a.:
- hopper nedad
- max. en goto i samlede flow i metoden
- bruges til et markant skift i flow

Fornuftigt brug vil formentligt være et sted mellem 0.1 og 1.0 promille af klasserne.
Gravatar #23 - arne_v
6. okt. 2010 12:27
#goto læsbarhed

Prøv og regn ud hvad disse 18 linier udskriver:


INTEGER LBL
INTEGER*4 I
731 GOTO 113
ASSIGN 399 TO LBL
113 I=0
WRITE(*,*) I
247 ASSIGN 601 TO LBL
IF(I) 588,922,399
588 I=I+1
WRITE(*,*) I
GOTO 399
761 GOTO LBL
922 I=I+1
WRITE(*,*) I
GOTO(588,399,922) I
399 GOTO 761
601 CONTINUE
END
Gravatar #24 - myplacedk
6. okt. 2010 12:30
mathiass (20) skrev:
Nja, det argument giver ingen mening. I så fald burde ord som aload, istore osv også være reserverede.

Det nærmeste jeg kan finde en officiel forklaring:

http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#229308 skrev:
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.


Så du har ret, jeg kom med en forkert årsag.

Men det er nu alligevel praktisk nok. Jeg har flere gange oplevet at decompile Java, hvor decompileren har opgivet af lave valid kode, og i stedet brugt "goto". Resultatet gav fuldt ud mening for mig, men skulle omskrives for at kunne compiles igen.

Lignende har jeg aldrig oplevet med de andre bytecode funktioner. Andre decompile-problemer har været langt dybere problemer.
Gravatar #25 - arne_v
6. okt. 2010 13:00
#24

Jeg kan forestille mig en anden mulig forklaring.

Måske ville man gerne have mulighed for at bruge disse keywords senere.

Det ville have sparet en del problemer, hvis de havde puttet enum på den liste!
Gravatar #26 - woodydrn
6. okt. 2010 22:46
Nok den værste irrelevante diskussion ever, jeg giver skylden på #2 ;)
Gravatar #27 - Ildhesten
7. okt. 2010 00:38
tazly (#10) skrev:
"Rekursive kald putter jo på stakken for hver iteration."


Det behøver de ikke nødvendigvis at gøre... Kigger man fx på funktionelle sprog. Se fx:
Tail recursion
Selv hvis man ikke har skrevet sine funktioner tail recursive, vil compileren ofte transformere dit program om til
Continuation Passing Style
hvor alle kald er tail calls. Så kan (og vil den ofte) lave Tail Call Optimization på programmet, derfor er rekursion ikke altid så ondt ved stakken.

Hvor vidt det gør sig gældende i de sprog du koder i, skal jeg ikke kunne sige.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login