Diskussion zum Thema GOTO in der Shoutbox - Zusammenfassung

  • Nene Oscar das war kein C64, aber in dieser Zeit war das, sogar noch etwas vorher.

    Und bei dem damaligen Basic gab es noch keine Labels=Sprungmarken sondern eben nur Zeilennumern.

    Mit Labels wäre es ja kinderleicht gewesen, dann hätte man nicht soviele ungewollte Endlosschleifen produziert, die man dann eben finden und ausbügeln musst.

    Ach war das spassig.

    • Offizieller Beitrag

    Ja, es gab noch keine Labels (leider). Meine ersten Programmiererfahrungen stammen vom C64.

    Basic nur mit Zeilennummern, Assembler im Maschinensprachemonitor (Sprünge durch abzählen der Bytes ermittelt :rolleyes:).

    So gesehen ist AutoIt da doch sehr komfortabel und dem fehlenden Goto weine ich keine Träne nach. Ich hab's in AutoIt nie gebraucht.

  • Oscar !

    Sorry für den no-content Beitrag, aber :

    Ja, es gab noch keine Labels (leider). Meine ersten Programmiererfahrungen stammen vom C64.


    Basic nur mit Zeilennummern, Assembler im Maschinensprachemonitor (Sprünge durch abzählen der Bytes ermittelt :rolleyes:).

    weckt bei mir alte, längst verschollene Erinnerungen :D.

    Gruß Musashi

  • Ui, jetzt kramt ihr aber ;)

    Ich hatte noch mit dem guten VC20 zu tun, dem Vorgänger des C64 - und da gab es doch damals dieses GOSUB....

    BTW, weiß noch jemand wie die Commodore-Computer vor dem VC20 hießen? Wir hatten damals den "Neigungskurs Mathematik am Computer" im Gym und das war so einer, ich weiß aber nicht mehr wie er hieß.

  • Das einzige GOTO das ich brauche ist: GOTO Kneipe 8o

  • Also... Vielleicht kann sich nicht jeder direkt vorstellen, wie goto korrekt und sinnvoll verwendet wird. Mal ein kleines Beispiel in mehr oder weniger Pseudocode, weiß nicht, ob jetzt alle Funktionsnamen stimmen. Habe gerade nur ein Mobilgerät.

    [autoit][/autoit][autoit]

    Func drawRedRect($hGfx)

    [/autoit][autoit]

    Local $hBrush

    [/autoit][autoit]

    $hBrush = _GDIPlus_BrushCreate(0xffff0000)

    [/autoit][autoit]

    If $hBrush = Null Then Goto CleanUp

    [/autoit][autoit]

    _GDIPlus_GraphicsFillRect($hGfx, 0, 0, 100, 100, $hBrush)

    [/autoit][autoit]

    CleanUp:

    [/autoit][autoit]

    _GDIPlus_BrushDispose($hBrush)

    [/autoit][autoit]

    Return

    [/autoit][autoit]

    EndFunc

    [/autoit][autoit][/autoit]

    Für eine funktionsinterne Cleanup-Funktion (gerade bei mehreren möglichen Fehlern, nach denen aufgeräumt werden muss) ist das wirklich praktisch. Und lässt sich sehr angenehm lesen, verstehen und warten. Ganz anders, als sonst über goto behauptet. ;)

  • Stehst du heute wieder auf dem Schlauch oder übersehe ich da etwas? Wenn $hBrush = Null ist, dann existiert das Objekt doch offenbar nicht und muss nicht extra disposed werden.

  • Ja, war etwas ungünstig. Zugegeben, in dem Minimalbeispiel ist das nur unnötiger Overhead. Deswegen auch der Nachsatz "gerade bei mehreren möglichen Fehlern, nach denen aufgeräumt werden muss". Bei einem zweiten BrushCreate o.Ä. macht das schon Sinn.

    Ich wollte auf 'nem 5"-Display aber nicht noch mehr Code schreiben und hatte gehofft, dass die Idee auch so erkennbar ist.

  • @ oscar,

    auf die Idee, dass eine Function auch beendet werden muss - muss man erst mal kommen! Nicht dass man das bewußt macht, Deine Beispiele sind schon ziemlich excesiv, aber ich will nicht ausschließen - dass ich irgendwo Funktionen habe, die ich nicht "zun Ende" führe.

    Nur ehrlich - wo steht das? Nicht dass ich Deine Aussage bezweifeln möchte! Aber es währe nett wenn das im Handbuch stünde. Und NEIN nicht jeder der "ein wenig programiert" ist Informatiker oder ähnl.

    Wenn jemand behauptet das sei Allgemeinwissen - auch gut dann hatte ich Bildungslücken.

    Zur GOTO Diskussion fällt mir noch ein - gab es nicht sogar programierbare Taschenrechner mit GOTO Befelssatz?

    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Frei nach Albert Einstein)

    • Offizieller Beitrag

    Nur ehrlich - wo steht das? Nicht dass ich Deine Aussage bezweifeln möchte! Aber es währe nett wenn das im Handbuch stünde.

    Da musste ich jetzt selbst mal nachsehen. Nein, das steht nicht wirklich im Hilfe.

    Man lernt das wohl erst mit der Zeit. Vor allem, wenn man sich mit rekursiven Funktionen beschäftigt.

    Denn generell kann man Funktionen auch rekursiv aufrufen, nur muss man für klare Abbruchbedingungen und eine Rückkehr aus den Rekursionen sorgen.

    Außerdem muss man die maximale Rekursionstiefe beachten: 3900 bei x64 und 1900 bei x86 (das steht in der Hilfe unter: AutoIt3 Limits/defaults).

    Rekursive Funktionen werden gern benutzt, um eine Ordnerstruktur (inkl. Unterordner) einzulesen oder beim erstellen von Treeviews.

  • Diese haben meistens eine Implementation eines Akzentes von BASIC. Mein alter Schultaschenrechner (TI-84+) unterstützt Goto und Labels.

    Unser damaliger Schultaschenrechner war ein TI30 von 1978 oder 79, der hat den Rechenschieber abgelöst...

    Auf dem TG hatte ich dann einen "richtigen" Computer als "Taschenrechner", meinen heute noch auf dem Schreibtisch stehenden und immer noch benutzten PC1401. Der hat satte 3534 Bytes (ja, BYTES) Ram und ist BASIC-programmierbar. Dazu noch Maschinensprachetauglich (KEIN Assembler, reine Binärkodierung mit Bytes)) mit einer Schnittstelle, über die ich 1986 in der Lehre eine NC-Fräsmaschine (IBM Baujahr 1969) zu einer CNC "umgebaut" hatte. Komplette 3-Achsen Steuerung, Controlling und rudimentäres G-Code in 3534 Bytes....

    Falls sich jemand fragt, wo meine Besessenheit bei Assembler herkommt, Bytes zu zählen:rofl:

    Btw. GOSUB/RETURN war eh Standard, Zeilennummern genauso. Allerdings konnte man auch Einbuchstabige "Label" hinter die Zeilennummer schreiben also bspw. 10 "H" For %i=1 to 25 blablub und dann mit einem Tastendruck diese "Programme" direkt anspringen.

    Gespeichert wurde mit einem selbstgelöteten Interface über die Schnittstelle und den Mikrofoneingang auf Musikkassette :o) , Kassettenrecorder vorrausgesetzt....

    Alternativ Code abschreiben, abheften und dann irgendwann nach einem Reset wieder alles neu eintippern.

    Ich erinnere mich sogar daran, dass wir über die Punktmatrixanzeige "Grafiken" und Spiele programmiert hatten. Basketball mit einem 1 "Pixel" großen Ball und 5x7 Pixel großen, animierten(!) Spielfiguren....alles natürlich in schwarzweiß^^

  • Ich hab nur noch den "letzten" HP 15 C aber keinen "Nachbau sondern tatsächlich ein Original aus den 80ern. Davorwaren es irgendwelche Privileg (Quelle) Taschenrechner. War ein netter Rechenstab Ersatz.

    @ Andy - ja jede Eier Uhr hat heute mehr Speicher als unsere Rechner der Anfangsjahre. Ich kenne noch Drehbänke mit "Festo" Pneumatik Steuerungen und Abtast Stiften - als Kopierautomaten. Den Vorschub regelte ein Hydojack. Frag mich nicht wann das war - ich verweigere die Antwort :)))). Meine erste Festplatte hatte doch tatsächlich 30 MB das war ca. das Speichervolumen von 30 Disketten . Das Ding war so groß wie eine Stange Camel.

    Gruß


    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Frei nach Albert Einstein)

  • Meine erste Festplatte hatte doch tatsächlich 30 MB das war ca. das Speichervolumen von 30 Disketten . Das Ding war so groß wie eine Stange Camel.

    hehe, meine erste Festplatte hatte 10MB, die steckte in einem orginal IBM-PC, den ich sehr günstig gebraucht erstanden habe. 8088 Prozessor @4,77Mhz und CGA Grafikkarte https://de.wikipedia.org/wiki/Color_Graphics_Adapter...

    Betriebssystem waren diverse DOS-Clone bis ich schliesslich bei Novell-DOS gelandet bin.

    Damals hatte man noch irre Angst vor Headcrashes der Festplatte, ich hab also den Rechner gekauft und einen Kumpel gebeten mein Auto (Käfer BJ1965) zu fahren von Wiesbaden nach Mainz, ich auf dem Rücksitz und den Rechner freischwebend in den Händen gehalten um ja die kleinste Erschütterung abzufangen. Ich hatte, um mir das Gerät zu kaufen, neben der Schule ca. ein Jahr gearbeitet. Ich glaube ich hatte in meinem Leben nie so geschwitzt wie auf dieser Fahrt^^

    Heutzutage fällt ein Laptop vom Tisch und während der ersten 3cm freien Falls merkt das die Festplatte, schreibt gemütlich während der nächsten 2cm des Fallens den Cacheinhalt auf die Platte zurück, fährt die Köpfe in in die Parkposition, legt das System schlafen, und wartet gemütlich auf den Einschlag....

    Für die Fließkommaberechnungen konnte man einen 8087 Koprozessor kaufen und in den dafür vorgesehenen Sockel stecken, den hab ich mir dann irgendwann geleistet, und konnte somit die FPU-Befehle direkt ausführen, das hat etliche Programme zig mal schneller gemacht, u.a. mein in Assembler programmiertes Apfelmännchen. Da bin ich heute noch stolz drauf, denn das lief komplett im 8 Speicherzellen großen Stack der FPU, btw. ist der Code heute noch exakt so lauffähig auf neuester CPU!

    Mein nächster Rechner war ein gebrauchter 80386sx, auch orginal IBM PS2-Modell, den hatte ich dann während des Studiums. Ich könnte heute noch die IBM-Jungs verdreschen, das System war derartig geil, aber leider wollten die für Zusatzkarten für den Microchannel irre hohe Lizenzkosten. Ansonsten hätte der Microchannel die restliche PC-Welt hinweggefegt.

    Ich kam günstig an eine Netzwerkkarte, Rechner aufgemacht, Karte in den Microchannel gesteckt, Rechner gebootet, fertig. HEUTE, 30 Jahre später lädt JEDES PC-Betriebsystem aus dem Internet erst mal Treiber nach...ohne Internet keine Hardwarebenutzung, wtf!!!

    Im Microchannelsystem befand sich alles zum Betrieb notwendige im ROM der Karte, incl. aller Systemparameter. Karte an Microchannel: "Hey, ich bin die neue Netzwerkkarte, meine ID lautet blablub und alle Infos zu mir sind an Adresse tralala!" Microchannel an Karte:" Hey Netzwerkkarte, willkommen im Club, deine Kumpels Festplatte XYZ, Grafikkarte 123, Soundkarte, PCMCIA, SCSI und und und und die anderen Mitglieder der Party heißen dich willkommen! ". Systemboot, Fertig.

    Über OS/2 (hiess bei mir nur OShalbe^^) verliere ich aus Pietätsgründen besser kein Wort. IBM hat, wie üblich, auch dieses geile BS in den Sand gesetzt. Weil an die Microchannelsysteme gebunden und aufgrund fehlender Anpassung an 386er Prozessoren die Entwicklung verpennt...

    Da lob ich mir die AS/400, auf der Kiste hat es RICHTIG Spass gemacht zu arbeiten. Leider habe ich mich damals auf den Maschinenbau konzentriert und bis heute nur noch "nebenbei" programmiert.

    Das Software-Konzept der AS/400, hardwareunabhängigen Code zu compilieren, wird bis heute noch praktiziert. So laufen auf der absolut allerneuesten Hardware aktuelle Programme und Tasks neben Programmen die unverändert 15 Jahre alt sind.

    Naja, hat alles vor und Nachteile....

    Heute geht man zu Aldi, kauft für 400 Euro einen Laptop, startet das Ding und kann sofort loslegen. Ich würde definitiv nicht mehr mit "Gebastel" anfangen.

  • @ alpines - da gibt es nicht zu lachen. Ich habe ein Federbett auf den Rücksitz gelegt und darin die Festplatte gelagert.

    Mein erster war ein Atari ST - man war allen andern überlegen mit TOS. Turbo Pascal dabei, und alles ging.

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Frei nach Albert Einstein)

  • Da kommen auch bei mir längst verschollen geglaubte Erinnerungen hoch :D

    hehe, meine erste Festplatte hatte 10MB

    ...

    Damals hatte man noch irre Angst vor Headcrashes der Festplatte, ich hab also den Rechner gekauft und einen Kumpel gebeten mein Auto (Käfer BJ1965) zu fahren von Wiesbaden nach Mainz, ich auf dem Rücksitz und den Rechner freischwebend in den Händen gehalten um ja die kleinste Erschütterung abzufangen.

    Damit stehst Du nicht allein da.

    Meine erste Platte hatte 20 MB, kostete fast 2000 DM, und wurde auch behandelt wie die Kronjuwelen - es spielt übrigens keine Rolle, welche 'Kronjuwelen' einem gerade in den Sinn kommen sollten ;) . Ich habe mich nach dem Kauf echt gefragt, ob ich die Platte jemals voll bekomme :Face:.

    Mein erster programmierbarer Taschenrechner war der TI-59. Zur Speicherung der Programme gab es kleine Magnetstreifen mit je 1 KB (ja, 1024 Bytes !) Speicherkapazität. Was vielen Lehrern zu der Zeit gänzlich unbekannt war : Man konnte die Streifen auch hervorragend als Spickzettel verwenden :P. Genutzt habe ich diese Möglichkeit aber nie, da man die Sachen nach dem Schreiben auch im Kopf hatte. Wahrscheinlich steht aus diesem Grund ein Flipchart neben meinem Arbeitsplatz ^^.

    Einen Rechenschieber habe ich immer noch, inkl. der rot-weißen Schutzverpackung. Es muss für Jüngere verrückt klingen, dass man damit mal Hochhäuser und Flugzeuge konstruiert hat.

    Ansonsten fällt mir als Anekdote noch die Sache mit den EPROM's ein :

    Das sind kleine Bausteine, die man mittels eines Zusatzgerätes beschreiben ('brennen') kann. Das Löschen erfolgt durch UV-Licht, daher haben diese Bausteine auch ein rundes Fenster auf der Oberseite.

    Die Heimwerkerlösung für das Löschen sah folgendermaßen aus :

    Man legte die EPROM's in die Badewanne, und bestrahlte sie eine Nacht lang mit einer Bräunungslampe.

    Stichwort AS/400 :

    Dabei muss ich immer an eine 'Dilbert'-Folge denken (die Serie, nicht die 3-Bilder Cartoons). Dort gab es, in irgendeinem Kellergewölbe, den Großrechner 'Black Betty', ohne den in der ach so modernen Firma rein gar nichts lief. Das Ding sah aus, als hätten es die Borg zusammengebaut.

    Ich würde definitiv nicht mehr mit "Gebastel" anfangen.

    Ja, das wohl nicht - trotzdem war es eine interessante und lehrreiche Zeit :P.

    Gruß Musashi

  • Da lob ich mir die AS/400, auf der Kiste hat es RICHTIG Spass gemacht zu arbeiten. Leider habe ich mich damals auf den Maschinenbau konzentriert und bis heute nur noch "nebenbei" programmiert.

    Das Software-Konzept der AS/400, hardwareunabhängigen Code zu compilieren, wird bis heute noch praktiziert. So laufen auf der absolut allerneuesten Hardware aktuelle Programme und Tasks neben Programmen die unverändert 15 Jahre alt sind.

    Wir haben auch noch eine AS/400 im Einsatz. Gut, das Modell heißt schon IBM iSeries, aber die Software... Warenwirtschaft von 1995, läuft ohne irgendwelche Probleme. Unsere beiden Nadeldrucker sind nach wie vor über zwei Logikeinheiten angebunden, welche wiederum über TwinAx mit der AS/400 verbunden sind. Tägliche Bedienung erfolgt aber mittlerweile über eine TN5250-Emulation unter Windows. :D

    Wobei das System für mich den Status der Unkaputtbarkeit langsam verliert... Wir hatten innerhalb des letzten Jahres insgesamt eine tote Netzwerkkarte und 6 (!!!!!!) defekte Platten. Bei 4 verbauten; zwei direkt über einen IBM-Servicepartner bezogene Ersatzplatten sind auch schon wieder getauscht worden. Das macht mir doch etwas Sorgen...