Discussion:
60 Jahre BASIC
(zu alt für eine Antwort)
F. W.
2024-05-06 13:14:12 UTC
Permalink
John Kemeny und Thomas Kurtz starteten am 01.05.1964 das erste
BASIC-Programm. Es berechnete irgendeine nicht weiter wichtige Formel.
Aber was daraus wurde, damit haben die beiden wohl selbst nicht gerechnet.

Mein erster BASIC-Computer war eine ausgewachsene DEC pdp-11/35 mit acht
Plätzen. Ich hatte zwar noch keinen Informatikunterricht (die Kurse
kamen damals tatsächlich mangels Interesse nie zustande), aber ich
wollte eben unbedingt die Knöpfchen drücken und diese merkwürdigen
Zeichenhaufen verstehen, die da geheimnisvoll durch den ansonsten
dunklen Computerraum leuchteten.

MU-BASIC/11 - RT/11. Wir schreiben Dezember 1980.

Ich durfte, dank eines sehr liebenswürdigen Lehrers, dann aber doch
arbeiten, das heißt, ich bekam ein Benutzerkonto (auch wenn man das
damals noch nicht so nannte). Zum Beweis meiner Würdigkeit der
geheimnisvollen Maschine sollte ich zwei Programme abliefern. Man wollte
wissen, ob ich nicht die Maschine kaputt mache.

So eingeschüchtert dachte ich nach und da ich oft und gern in der
Schulbibliothek arbeitete, lieh ich mir kurzerhand ein Buch aus "BASIC
for Beginners", 1978 geschrieben, also brandneu.

Die Programme wurden damals auf Papier geschrieben. Ich nahm einen
Bleistift (eine der besten Ideen meines Lebens: Programme mit Bleistift
schreiben! Life-Hack!) und schrieb zwei Programme "Planet" und das heute
in Einsteigerkursen unvermeidliche "Zahlenraten".

"Zahlenraten" muss ich wohl kaum erklären. "Planet" errechnet mein
Gewicht auf allen neun Planeten unseres Sonnensystems. Das war schon
damals so weird wie es heute noch klingt. Aber niemand schrieb sowas.
Lehrer war begeistert (Physik!). Also legte ich los.

Problem war natürlich, dass ich nicht in die heiligen Hallen durfte, bis
ich ein Programm vorweisen konnte, das dort laufen kann und keinen Unfug
treibt. Andererseits musste ich natürlich ein Programm auch irgendwie
mal auf einem Computer laufen haben, sollten meine Werke nicht als
pubertäre Meisterwerke an der Wand enden.

So fristete ich die nächsten Wochenenden als menschlicher Debugger:
Variablenbelegung, Ablauf, Sprünge "simulierte" ich allein mit Bleistift
und Papier. Der Kopf war der Rechner.

Die Programme gab ich im Lehrerzimmer ab und widmete mich dann dem, was
man mit 16 halt so tut oder eben nicht tut.

Der Lehrer kam dann eines Tages auf mich zu. Auf einem Zettel standen
die beiden begehrtesten Wörter meines damaligen Lebens: eine
Benutzerkennung und ein Passwort.

Die Programme liefen übrigens NICHT auf Anhieb. Ich war wohl eines der
ersten Opfer der Inkompatibilität von BASIC-Interpretern. Ich schrieb in
Nixdorf Basic (Buch), brauchte aber DEC-Basic (Computer). Aber das
verstand man und verzieh es mir.

Damit begann eine "Karriere", die bis zu Siemens-Nixdorf und sogar IBM
reichte. Programmieren konnte ich in vielen BASIC-Dialekten, Pascal,
Modula-2, C und ein bisschen C++, COBOL und dBase/Clipper bis in zu
Assemblerroutinen in 6502, Z80 und 8086 - neben vielen längst
vergessenen Nischensprachen, die ich einfach mal ausprobierte.

Unter anderem COMAL und Paradox-Script.

An Rechnern besaß ich sehr viele: Trommeschläger VideoGenie (ein
TRS-80-Clone), dann folgten Oric-1, Atari 800 XL, TI-99/4a, C64, C128.
Am Schluss ein Apple ][ mit Monitor, später ein Apple //c, bevor ich
endlich dem (Commodore) PC anheim fiel. Ich war nie faul und arbeitete
ferienmäßig stets in Firmen, bis die Lehre begann.

Die anderen hatten dann eben Mofas und Stereoanlagen. Aber ich war diese
urige Type, die sich solche "Komputer" kaufte. Bei Frauen kam das
übrigens nicht gut an. Da waren die musikalischen Mofafahrer besser
dran. Sie kriegten die besten Weiber.

Ja, das meiste waren BASIC-Computer (das von Atari fand ich am
grottigsten). Auch auf dem PC machte ich allerhand BASIC für Firmen, bis
ich mir endlich mal Turbo-Pascal kaufte und mich neu verliebte. Aber
BASIC war immer am Start irgendwie. Auch heute habe ich auf meinen
Rechnern stets irgendwelche Compiler oder Interpreter unter Windows,
DOS, Linux und Android. Sogar einen Basic-Interpreter unter IOS habe ich
aufgetan.

Und so sage ich D A N K E an John und Tom! Diese einfache Idee des
Interpreters, diese vielen Computer, sie haben mein Leben entscheidend
geprägt. Man wird mich wohl noch auf dem Sterbebett fragen können, wie
man zwei FOR-Schleifen ineinander verschachtelt...HOLD MY BEER...

FW
Sebastian Barthel
2024-05-08 13:10:36 UTC
Permalink
Post by F. W.
John Kemeny und Thomas Kurtz starteten am 01.05.1964 das erste
BASIC-Programm. Es berechnete irgendeine nicht weiter wichtige Formel.
Aber was daraus wurde, damit haben die beiden wohl selbst nicht gerechnet.
Mein erster BASIC-Computer war eine ausgewachsene DEC pdp-11/35 mit acht
Plätzen. Ich hatte zwar noch keinen Informatikunterricht ... aber ich
wollte eben unbedingt die Knöpfchen drücken ...
MU-BASIC/11 - RT/11. Wir schreiben Dezember 1980.
Ich durfte, dank eines sehr liebenswürdigen Lehrers, dann aber doch
arbeiten, das heißt, ich bekam ein Benutzerkonto ... sollte ich zwei
Programme abliefern.
Post by F. W.
Die Programme wurden damals auf Papier geschrieben. Ich nahm einen
Bleistift (eine der besten Ideen meines Lebens: Programme mit Bleistift
schreiben! Life-Hack!) und schrieb zwei Programme "Planet" und das heute
in Einsteigerkursen unvermeidliche "Zahlenraten".
"Zahlenraten" muss ich wohl kaum erklären. "Planet" errechnet mein
Gewicht auf allen neun Planeten unseres Sonnensystems. Das war schon
damals so weird wie es heute noch klingt. Aber niemand schrieb sowas.
Lehrer war begeistert (Physik!). Also legte ich los.
...
Damit begann eine "Karriere", die bis zu Siemens-Nixdorf und sogar IBM
reichte. Programmieren konnte ich in vielen BASIC-Dialekten, Pascal,
Modula-2, C und ein bisschen C++, COBOL und dBase/Clipper bis in zu
Assemblerroutinen in 6502, Z80 und 8086 - neben vielen längst
vergessenen Nischensprachen, die ich einfach mal ausprobierte.
Unter anderem COMAL und Paradox-Script.
An Rechnern besaß ich sehr viele: Trommeschläger VideoGenie (ein
TRS-80-Clone), dann folgten Oric-1, Atari 800 XL, TI-99/4a, C64, C128.
Am Schluss ein Apple ][ mit Monitor, später ein Apple //c, bevor ich
endlich dem (Commodore) PC anheim fiel. Ich war nie faul und arbeitete
ferienmäßig stets in Firmen, bis die Lehre begann.
... Auch auf dem PC machte ich allerhand BASIC für Firmen, bis
ich mir endlich mal Turbo-Pascal kaufte und mich neu verliebte. Aber
BASIC war immer am Start irgendwie. Auch heute habe ich auf meinen
Rechnern stets irgendwelche Compiler oder Interpreter unter Windows,
DOS, Linux und Android. Sogar einen Basic-Interpreter unter IOS habe ich
aufgetan.
Und so sage ich D A N K E an John und Tom! ... ...HOLD MY BEER...
Schöne Geschichte.

Das mit den Planeten ist doch mittlerweile gar nicht mehr so abwegig, wie
es erstmal klingt. Der A.Gerst hat als weitgereister Kosmosfahrer neulich
mal in einem Interview erzählt, daß er den Mond als so eine Art 8ten
Kontinent begreifen würde. Da will man dann schon auch so ein Programm
haben.

Eine PDP 11/35 hätte aber 1980 auch schon ganz andere Programme haben
können. Es gab da wohl gerade ganz neu was, was mit dem einfachen Namen
"C" belegt war. Trotzdem ist BASIC natürlich irgendwie schon ein
interessanter Glücksgriff - hier in der Geschichte ebenso wie in der
Informatikgeschichte, auch weil es eben so massenhaft auf den
Microcomputern vorhanden war und so wahrscheinlich nicht ganz zufällig
aber vielleicht ungewollt ein unglaublicher Booster (!) für die weitere
Informatikweiterentwicklung geworden ist. Auch wenn es natürlich seine
Ecken und Kanten und Undefiniertheiten hat(te).

Es wird wohl auch noch eine Weile die für Uneingeweihte am einfachsten
entschlüsselbare / lesbare Sprache bleiben, wenn man mal von den POKE
Wüsten in einem C64 Basic absieht.

Vielleicht wäre es ja auch an der Zeit, das mal zu standardisieren, um es
zu einem neuen Revival zu bringen.

Das "Beginners All Purpose ..." wird ihm - im positiven Sinne - auf alle
Fälle wohl noch lange erhalten bleiben und in den bißchen aufwendigeren
Varianten kann es dann ja auch alles das, was Leuten wie Dijkstra und
Wirth zu ihrer Zeit so überhaupt nicht daran gefallen hat.

Auf alle Fälle eine große "Erfindung", die bestimmt so nicht geplant war.


VG,
SBn
Stefan Ram
2024-05-08 13:25:17 UTC
Permalink
Post by Sebastian Barthel
Es wird wohl auch noch eine Weile die für Uneingeweihte am einfachsten
entschlüsselbare / lesbare Sprache bleiben, wenn man mal von den POKE
Wüsten in einem C64 Basic absieht.
1977 war ich so ein "Uneingeweihter". Ich las dann ein Buch. Wohl:

|Haase, V. und W. Stucky: BASIC, Programmieren für Anfänger;
|Bibliographisches Institut; Mannheim; 1977

. Meinen Pet 2001 hatte ich bestellt. Aber er war noch nicht
eingetroffen. Also schrieb ich meine ersten BASIC-Programme
mit Bleistift auf Papier.

Die Eigenschaften der Programmiersprache BASIC waren für mich bei
der Wahl dieser Programmiersprache nicht von Bedeutung. Diese Wahl
hatten andere Leute für mich getroffen, die entschieden hatten, daß
das die Programmiersprache des Pet sein soll. Ich hätte damals jede
Sprache gelernt und verwendete, die auf dem bestellten Pet läuft.

Maschinensprache (6502) fand ich damals schwierig. Heute würde
ich sie vielleicht eher verwenden.

Nach einigen Jahren gab es dann auch andere Sprachen für den
Pet: Pascal, MAE (Makro-Assembler-Editor), LISP oder Comal.
Aber die Handhabung war immer etwas schwierig, wenn die Sprache
nicht beim Einschalten fest im ROM ist.

Ich habe zum Beispiel im Auftrag 1981 oder 1982 eine Faktura
mit Aufmaßen für einen Malereibetrieb erstellt, wobei ich in
BASIC WIMRE eine Listenverarbeitung mit Zeigern verwendete, die
ich auf der Basis (kein Wortspiel beabsichtigt) der vorhandenen
Reihungen implementiert hatte.
Stefan Ram
2024-05-08 13:32:07 UTC
Permalink
Post by Stefan Ram
Ich habe zum Beispiel im Auftrag 1981 oder 1982 eine Faktura
mit Aufmaßen für einen Malereibetrieb erstellt, wobei ich in
BASIC WIMRE eine Listenverarbeitung mit Zeigern verwendete, die
ich auf der Basis (kein Wortspiel beabsichtigt) der vorhandenen
Reihungen implementiert hatte.
Ich hatte damals immerhin schon gelesen:

Listenverarbeitung / J. M. Foster.
München: Carl Hanser, 1970.
(Computer Monographien; Band 4)

. Wenn ich mich recht erinnere, wurde dort Listenverarbeitung
behandelt, ohne daß LISP dabei verwendet wurde.
Stefan Ram
2024-05-08 14:04:09 UTC
Permalink
Post by Stefan Ram
Die Eigenschaften der Programmiersprache BASIC waren für mich bei
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht
zu findenden Anweisungen "DATA" und "READ". Wie in

DATA 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365

. In Python könnte man dafür schreiben:

data = 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365

. Außerdem typisch die MAT-Anweisungen wie in

MAT Z = X * Y

. Das wäre in Python mit NumPy:

Z = X @ Y

. Diese Data-Anweisung kam in meinen Volkshochschulkursen zu BASIC
vor, als es um die Berechnung von Wochentagen aus einem Datum ging.
Peter J. Holzer
2024-05-08 19:38:57 UTC
Permalink
Post by Stefan Ram
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht
zu findenden Anweisungen "DATA" und "READ". Wie in
[...]
Post by Stefan Ram
. Außerdem typisch die MAT-Anweisungen wie in
MAT Z = X * Y
Das ist typisch für BASIC?

Ich glaube nicht, dass einer der BASIC-Dialekte, die ich in den
80er-Jahren verwendet habe, dieses Kommando kannte.

hp
Arno Welzel
2024-05-09 10:32:10 UTC
Permalink
Post by Peter J. Holzer
Post by Stefan Ram
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht
zu findenden Anweisungen "DATA" und "READ". Wie in
[...]
Post by Stefan Ram
. Außerdem typisch die MAT-Anweisungen wie in
MAT Z = X * Y
Das ist typisch für BASIC?
Nein, zumindest nicht im "Original" Dartmouth BASIC.

Siehe auch: <https://www.dartmouth.edu/basicfifty/commands.html>

Hier ist es aber beschrieben, Seite 150 des PDF:

<http://www.bitsavers.org/pdf/phaseOneSystems/oasis/BASIC_Language_Reference_Manual_Mar80.pdf>

Zitat:

1 MAT <array name> = <array name>
2 MAT <array name> = (<expression>)

See also: LET statement

Purpose:

The MAT statement allows you to either copy one array to another or to
assign one value to all of the elements of an array.

Comment:

Format 1 of the MAT statement copies one array to another. Both arrays
must have the same dimensions or a "Subscript Range" error will occur.

Forrmat 2 of the MAT statement sets all elements of the array to a
specific value.

Example: Explanation:

0010 DIM A$(5),B$(5),C(20) Define size of arrays A$, B$, and C
0020 FOR I%=0 TO 5 Set array B$ to initial values
0030 B$(I%) = STR(I%)
0040 NEXT
0050 MAT A$ = B$ Copies B$ into A$ (B$ unchanged)
0060 MAT B$ = ("") Sets all 6 elements in B$ to be empty.
0070 MAT C = (1) Sets all 21 elements of C to be 1.

(Zitat Ende)
Post by Peter J. Holzer
Ich glaube nicht, dass einer der BASIC-Dialekte, die ich in den
80er-Jahren verwendet habe, dieses Kommando kannte.
Ich kann mich auch nicht erinnern. Vermutlich wurde das bei vielen
Dialekten einfach weggelassen.
--
Arno Welzel
https://arnowelzel.de
Sebastian Barthel
2024-05-09 13:57:40 UTC
Permalink
Post by Peter J. Holzer
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht zu
findenden Anweisungen "DATA" und "READ". Wie in
[...]
. Außerdem typisch die MAT-Anweisungen wie in
MAT Z = X * Y
Das ist typisch für BASIC?
Ich glaube nicht, dass einer der BASIC-Dialekte, die ich in den
80er-Jahren verwendet habe, dieses Kommando kannte.
Würd ich auch sagen, daß das eher untypisch war. Das BBC Basic konnte
aber mit Matrizen umgehen und die "großen" Basic's ala HP und später GfA
konnten es ziemlich sicher auch.

Ich glaub, ich hab sowas auch noch nie in einem Zeitschriftenlisting
gesehen. War da wohl eher unüblich wenn nicht sogar unbekannt.
Stefan Ram
2024-05-09 14:39:34 UTC
Permalink
Post by Sebastian Barthel
Post by Peter J. Holzer
Ich glaube nicht, dass einer der BASIC-Dialekte, die ich in den
80er-Jahren verwendet habe, dieses Kommando kannte.
Würd ich auch sagen, daß das eher untypisch war.
|The original Dartmouth Basic was unusual in having a matrix
|keyword, MAT.
Wikipedia
Arno Welzel
2024-05-09 15:46:27 UTC
Permalink
Post by Stefan Ram
Post by Sebastian Barthel
Post by Peter J. Holzer
Ich glaube nicht, dass einer der BASIC-Dialekte, die ich in den
80er-Jahren verwendet habe, dieses Kommando kannte.
Würd ich auch sagen, daß das eher untypisch war.
|The original Dartmouth Basic was unusual in having a matrix
|keyword, MAT.
Wikipedia
BASIC wurde in Dartmouth erfunden.

Die erste Version hatte noch keine Matrix-Operationen, das kam erst
später dazu.
--
Arno Welzel
https://arnowelzel.de
Arno Welzel
2024-05-09 15:45:47 UTC
Permalink
Post by Sebastian Barthel
Post by Peter J. Holzer
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht zu
findenden Anweisungen "DATA" und "READ". Wie in
[...]
. Außerdem typisch die MAT-Anweisungen wie in
MAT Z = X * Y
Das ist typisch für BASIC?
Ich glaube nicht, dass einer der BASIC-Dialekte, die ich in den
80er-Jahren verwendet habe, dieses Kommando kannte.
Würd ich auch sagen, daß das eher untypisch war. Das BBC Basic konnte
aber mit Matrizen umgehen und die "großen" Basic's ala HP und später GfA
konnten es ziemlich sicher auch.
Ja, GfA konnte es ebenso, aber damit habe ich nie ernsthaft was gemacht,
auf meinem Atari ST habe ich von Anfang an in C programmiert:

<https://info-coach.fr/atari/documents/general/gfabasic.pdf>
--
Arno Welzel
https://arnowelzel.de
Sebastian Barthel
2024-05-09 18:06:42 UTC
Permalink
Post by Arno Welzel
Post by Sebastian Barthel
Post by Peter J. Holzer
Post by Stefan Ram
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht
zu findenden Anweisungen "DATA" und "READ". Wie in
[...]
Post by Stefan Ram
. Außerdem typisch die MAT-Anweisungen wie in
MAT Z = X * Y
Das ist typisch für BASIC?
Ich glaube nicht, dass einer der BASIC-Dialekte, die ich in den
80er-Jahren verwendet habe, dieses Kommando kannte.
Würd ich auch sagen, daß das eher untypisch war. Das BBC Basic konnte
aber mit Matrizen umgehen und die "großen" Basic's ala HP und später
GfA konnten es ziemlich sicher auch.
Ja, GfA konnte es ebenso, aber damit habe ich nie ernsthaft was gemacht,
<https://info-coach.fr/atari/documents/general/gfabasic.pdf>
Schöne Übersicht. Danke für den Link.
Wolf gang P u f f e
2024-05-09 09:14:36 UTC
Permalink
Post by Stefan Ram
Post by Stefan Ram
Die Eigenschaften der Programmiersprache BASIC waren für mich bei
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht
zu findenden Anweisungen "DATA" und "READ". Wie in
DATA 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
...
Post by Stefan Ram
. Diese Data-Anweisung kam in meinen Volkshochschulkursen zu BASIC
vor, als es um die Berechnung von Wochentagen aus einem Datum ging.
Mitte der 80er habe ich auch an der VHS einige Computer-Kurse belegt.
Das mit den Kalendertagen in BASIC Berechnen hatten wir auch.
Da wurde ua. eine Formeln aus dem Buch "Ewige Kalender" von Butkewitsch
und Selikson in BASIC verwendet.
https://www.lehmanns.de/shop/naturwissenschaften/18902535-9783322003935-ewige-kalender
1983 kostete das Buch nur 5,90M (DDR!)
Ich hätte mein Geld in Bücher anlegen sollen, bei der Preisentwicklung.
;-)
Sebastian Barthel
2024-05-09 13:55:03 UTC
Permalink
Post by Wolf gang P u f f e
Post by Stefan Ram
Die Eigenschaften der Programmiersprache BASIC waren für mich bei
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht zu
findenden Anweisungen "DATA" und "READ". Wie in
DATA 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
...
. Diese Data-Anweisung kam in meinen Volkshochschulkursen zu BASIC
vor, als es um die Berechnung von Wochentagen aus einem Datum ging.
Mitte der 80er habe ich auch an der VHS einige Computer-Kurse belegt.
Das mit den Kalendertagen in BASIC Berechnen hatten wir auch.
Da wurde ua. eine Formeln aus dem Buch "Ewige Kalender" von Butkewitsch
und Selikson in BASIC verwendet.
https://www.lehmanns.de/shop/naturwissenschaften/18902535-9783322003935-
ewige-kalender
Post by Wolf gang P u f f e
1983 kostete das Buch nur 5,90M (DDR!)
Ich hätte mein Geld in Bücher anlegen sollen, bei der Preisentwicklung.
Viel besser wären einige der alten Rechner gewesen, auf denen BASIC lief.

Ich sag mal Apple 1, C65, Güldene 64er Version, Falcon, A1200 usf.

Wobei bei den letzteren die BASIC Story schon ein wenig am Vergehen war -
oder je nach Gesichtspunkt ihren totalen Höhepunkt erreicht hat.
(Stichwort GfA)

Das mit den DATA Zeilen geht prinzipiell aber auch woanders so ähnlich.
In C lassen sich Variablen, auch Arrays, direkt vorbelegen. Das ist so
von der Benutzung her ziemlich nahe an den BASIC DATA-READ Statements,
wie so meistens benutzt worden sind. Was damit nur bedingt geht, ist das
umbelegen mit RESTORE.
Stefan Ram
2024-05-09 14:37:19 UTC
Permalink
Post by Sebastian Barthel
Das mit den DATA Zeilen geht prinzipiell aber auch woanders so ähnlich.
In C lassen sich Variablen, auch Arrays, direkt vorbelegen. Das ist so
von der Benutzung her ziemlich nahe an den BASIC DATA-READ Statements,
wie so meistens benutzt worden sind. Was damit nur bedingt geht, ist das
umbelegen mit RESTORE.
Allerdings kann man in BASIC verschiedene Datentypen in einer
"DATA"-Anweisung mischen. Selbst in Python kann man nicht alle
Eigenschaften von DATA, READ und RESTORE genau nachbilden, aber
hier ein Versuch, wenigstens einige Eigenschaften nachzubilden:

main.py

class OUT_OF_DATA( StopIteration ):
pass

def INIT():
global _data_list
global _data_pos
try:
_data_list
except NameError:
_data_list = []
try:
_data_pos
except NameError:
_data_pos = iter( _data_list )

def RESTORE():
global _data_pos
INIT()
_data_pos = iter( _data_list )

def DATA( *args ):
global _data_list
INIT()
_data_list += args
RESTORE()

def READ():
INIT()
try:
return next( _data_pos )
except StopIteration:
pass
raise OUT_OF_DATA

DATA( 10, "OK" )
DATA( 2.5 )

print( READ() )
print( READ() )
RESTORE()
print( READ() )
print( READ() )
print( READ() )
print( READ() )

Ausgabe (Fehlermeldung gekürzt)

10
OK
10
OK
2.5
OUT_OF_DATA
Sebastian Barthel
2024-05-09 18:03:37 UTC
Permalink
Post by Stefan Ram
Post by Sebastian Barthel
Das mit den DATA Zeilen geht prinzipiell aber auch woanders so ähnlich.
In C lassen sich Variablen, auch Arrays, direkt vorbelegen. Das ist so
von der Benutzung her ziemlich nahe an den BASIC DATA-READ Statements,
wie so meistens benutzt worden sind. Was damit nur bedingt geht, ist das
umbelegen mit RESTORE.
Allerdings kann man in BASIC verschiedene Datentypen in einer
"DATA"-Anweisung mischen. Selbst in Python kann man nicht alle
Eigenschaften von DATA, READ und RESTORE genau nachbilden, aber hier
main.py
pass
_data_list
_data_list = []
_data_pos
_data_pos = iter( _data_list )
global _data_pos INIT()
_data_pos = iter( _data_list )
global _data_list INIT()
_data_list += args RESTORE()
INIT()
return next( _data_pos )
pass
raise OUT_OF_DATA
DATA( 10, "OK" )
DATA( 2.5 )
print( READ() )
print( READ() )
RESTORE()
print( READ() )
print( READ() )
print( READ() )
print( READ() )
Ausgabe (Fehlermeldung gekürzt)
10 OK 10 OK 2.5 OUT_OF_DATA
OK. Das wird potentiell sogar funktionieren, aber es wird wohl niemand so
machen. Viele wahrscheinlicher ist doch, daß man dann einfach Files
anlegt und halt von da aus "einliest".

Das mit den gemischten Datentype in einer DATA Zeile ist aber ein guter
Punkt und sicherlich auch öfters benutzt worden. Allerdings ist das dann
genau sowas, wo ein BASIC eben ein BASIC ist und bei Undefiniertheiten
dann auch mal schnell komische Fehler entstehen, etwa wenn jemand dann in
den DATA Zeilen irgendwo mal ein Komma vergißt.

Was mir immer nicht so gefallen hat, war das "undefinierte" Ende. Soll
heißen, es fehlten irgendwie sowas wie ein DATASTOP als Anweisung, die
man mit in die DATA Zeilen schreibt. So muß man immer irgendwie mitzählen
oder selbst einen "Endemarker" definieren, der dann auch wieder mal
Probleme nach sich zieht. (z.B. -1, -1 oder 9999, 9999)
Stefan Ram
2024-05-09 18:38:03 UTC
Permalink
Post by Sebastian Barthel
OK. Das wird potentiell sogar funktionieren, aber es wird wohl niemand so
machen. Viele wahrscheinlicher ist doch, daß man dann einfach Files
anlegt und halt von da aus "einliest".
Die genaue Vorgehensweise hängt von der genauen Aufgabenstellung ab,
aber fast immer hat man in Python bessere Möglichkeiten als die
Imitation von BASIC. Das stimmt.
Post by Sebastian Barthel
Was mir immer nicht so gefallen hat, war das "undefinierte" Ende. Soll
heißen, es fehlten irgendwie sowas wie ein DATASTOP als Anweisung, die
man mit in die DATA Zeilen schreibt. So muß man immer irgendwie mitzählen
oder selbst einen "Endemarker" definieren, der dann auch wieder mal
Probleme nach sich zieht. (z.B. -1, -1 oder 9999, 9999)
Genau dafür hat Python "StopIteration", was ich in dem folgenden
Programm auch verwende. Ich begann mit dem Verfassen jenes Programms
erst, nachdem ich Dein hier zitiertes Posting las. Man kann also
relativ schnell in Python einen Mikro-Interpretierer schreiben!

Das folgende Programm ist ein BASIC-Interpretierer, der aber auf
rudimentäre Formen von DATA, READ und PRINT eingeschränkt ist.
Aber immerhin kann man die DATA-Anweisungen nun wie bei BASIC
irgendwo im Programm plazieren und die Werte der Variablen
haben alle schon den richtigen Typ (hier: int, float und str).

Python-3.10-Quelltext

import ast
import sys

source = '''
DATA 10
READ N
PRINT N
READ X
PRINT X
READ S
PRINT S
READ T
PRINT T
DATA 3.5, "Hi there!"
'''

class interpreter_class():
def __init__( self, source ):
lines = source.split( '\n' )
self.lines = lines
self.data = []
self.var = {}
for line in lines:
segments = line.split( ' ', 1 )
match segments:
case[ 'DATA', rest ]:
items = rest.split( ',' )
self.data +=\
[ ast.literal_eval( item )for item in items ]
def run( self ):
self.datum = iter( self.data )
lines = self.lines
for line in lines:
segments = line.split( ' ', 1 )
match segments:
case[ 'READ', name ]:
try:
self.var[ name ]= next( self.datum )
except StopIteration:
print( '?OUT OF DATA', file=sys.stderr )
return
case[ 'PRINT', name ]:
print( self.var[ name ])

interpreter = interpreter_class( source )
interpreter.run()

Ausgabe

10
3.5
Hi there!
?OUT OF DATA
Stefan Ram
2024-05-09 19:33:54 UTC
Permalink
Post by Stefan Ram
items = rest.split( ',' )
self.data +=\
[ ast.literal_eval( item )for item in items ]
PS: Ersetzt man jene drei Zeilen durch

self.data += ast.literal_eval( f'[{rest}]' )

, wird nicht nur das Programm kürzer, sondern sind auch Kommas
in Zeichenfolgenliteralen erlaubt!

Mikro-BASIC-Programm

DATA 10
READ N
PRINT N
READ X
PRINT X
READ S
PRINT S
READ E
PRINT E
DATA 3.5, "Hi, you there!"

Ausgabe

10
3.5
Hi, you there!
?OUT OF DATA

Thomas Koenig
2024-05-09 14:05:44 UTC
Permalink
Post by Stefan Ram
Post by Stefan Ram
Die Eigenschaften der Programmiersprache BASIC waren für mich bei
Typisch für BASIC sind für mich die bei anderen Sprachen so nicht
zu findenden Anweisungen "DATA" und "READ". Wie in
DATA 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
Vor allem, um Maschinenprogramme in Computerzeitschriften abzudrucken...

Ich erinnere mich noch an eine Atari-ST - Zeitschrift (04/88 oder
so), die versprach, mit einer Assembler-Routine die Taktfrequenz
von 8 MHz auf 10 MHz hochzuschrauben. Die armen Leute, die das
machten, bekamen erst einen Prüfsummenfehler, der sich auch beim
sorgfältigsten Kontrollieren nicht auflösen ließ. Und wer die
Prüfsumme dann ignorierte und das Programm laufen lies, der
orxnz qnaa tnam tebff NCEVY, NCEVY nhs qra Ovyqfpuvez.
Hermann Riemann
2024-05-08 14:31:12 UTC
Permalink
Post by F. W.
Mein erster BASIC-Computer war eine ausgewachsene DEC pdp-11/35 mit acht
Plätzen. Ich hatte zwar noch keinen Informatikunterricht (die Kurse
kamen damals tatsächlich mangels Interesse nie zustande),
Informatikunterricht hatte ich nie.
Da hinderte mich nicht daran Programmierer zu werden
und eigene mini ( 8 Bit CPU) Betriebssysteme zu entwickeln.
Post by F. W.
aber ich
wollte eben unbedingt die Knöpfchen drücken und diese merkwürdigen
Zeichenhaufen verstehen, die da geheimnisvoll durch den ansonsten
dunklen Computerraum leuchteten.
Der computerraum war nicht dunkel.
Selber, wie eine Mischung aus Kapitän und Steuermann,
an einem computer sitzen, habe ich an einer Siemens 2002 erlebt.
Ich habe da mein Algol60 Programm,
was "den Grenzen des Wachstums" entsprach,
mal weiter rechnen lassen.
Es gab da Schwingungen bei der Bevölkerung.
Post by F. W.
MU-BASIC/11 - RT/11. Wir schreiben Dezember 1980.
Ich durfte, dank eines sehr liebenswürdigen Lehrers, dann aber doch
arbeiten, das heißt, ich bekam ein Benutzerkonto (auch wenn man das
damals noch nicht so nannte). Zum Beweis meiner Würdigkeit der
geheimnisvollen Maschine sollte ich zwei Programme abliefern. Man wollte
wissen, ob ich nicht die Maschine kaputt mache.
Irgendwann hatte ich keine freie Rechenerlaubnis mehr.
Das hat mich zu eigenen computer motiviert.
Post by F. W.
So eingeschüchtert dachte ich nach und da ich oft und gern in der
Schulbibliothek arbeitete, lieh ich mir kurzerhand ein Buch aus "BASIC
for Beginners", 1978 geschrieben, also brandneu.
Basic war ein Mini FORTRAN für 8 und 16 Bit computer.
Wie z.B. Atari ST
Post by F. W.
Die Programme wurden damals auf Papier geschrieben. Ich nahm einen
Bleistift (eine der besten Ideen meines Lebens: Programme mit Bleistift
schreiben! Life-Hack!) und schrieb zwei Programme "Planet" und das heute
in Einsteigerkursen unvermeidliche "Zahlenraten".
Während meiner Ausbildung ab es Lochkarten,
Im Beruf Bildschirme.
Post by F. W.
Der Lehrer kam dann eines Tages auf mich zu. Auf einem Zettel standen
die beiden begehrtesten Wörter meines damaligen Lebens: eine
Benutzerkennung und ein Passwort.
Bei mainframe war das etwas anders.
Post by F. W.
Die Programme liefen übrigens NICHT auf Anhieb.
Das war wohl kein Lochstreifen.
Da musste ( sollte) man fehlerfreie Programme schreiben.
Also bei jedem Fehler das ganze Programm neu eintippen.
Da lernt man konzentriert fehlerfrei programmieren.
Post by F. W.
Damit begann eine "Karriere", die bis zu Siemens-Nixdorf und sogar IBM
reichte. Programmieren konnte ich in vielen BASIC-Dialekten, Pascal,
Modula-2, C und ein bisschen C++, COBOL und dBase/Clipper bis in zu
Assemblerroutinen in 6502, Z80 und 8086 - neben vielen längst
vergessenen Nischensprachen, die ich einfach mal ausprobierte.
Programmieren konnte ich in vielen Sprachen.
Beruflich wurde, abgesehen von einem Assembler
nur eine Sprache verwendet.
Später zusätzlich kam auch C dazu.
Gering Pascal, und am Ende musste ich mich auch mit COBOL beschäftigen.
Mehr als 2 kleine COBOL Programme habe ich vermutlich nicht geschrieben.
Post by F. W.
Unter anderem COMAL und Paradox-Script.
An Rechnern besaß ich sehr viele: Trommeschläger VideoGenie (ein
TRS-80-Clone), dann folgten Oric-1, Atari 800 XL, TI-99/4a, C64, C128.
Am Schluss ein Apple ][ mit Monitor, später ein Apple //c, bevor ich
endlich dem (Commodore) PC anheim fiel. Ich war nie faul und arbeitete
ferienmäßig stets in Firmen, bis die Lehre begann.
8 bit habe ich nahezu nur hex programmiert.
Post by F. W.
Die anderen hatten dann eben Mofas und Stereoanlagen. Aber ich war diese
urige Type, die sich solche "Komputer" kaufte.
<Loading Image...>
Post by F. W.
Bei Frauen kam das übrigens nicht gut an.
Deren software war mir überwiegend zu inkompatibel.
Nachbarschaft geht gut, gewisse Beziehung nicht.
Post by F. W.
Ja, das meiste waren BASIC-Computer (das von Atari fand ich am
grottigsten). Auch auf dem PC machte ich allerhand BASIC für Firmen, bis
ich mir endlich mal Turbo-Pascal kaufte und mich neu verliebte. Aber
BASIC war immer am Start irgendwie. Auch heute habe ich auf meinen
Rechnern stets irgendwelche Compiler oder Interpreter unter Windows,
DOS, Linux und Android. Sogar einen Basic-Interpreter unter IOS habe ich
aufgetan.
Dann hast Du kein Arduino..
Unter DOS und Android habe ich nie programmiert.
Basic ist IMHO wegen Python überholt.
Die damalige Systemnähe von Basic wird heute von Python
bis auf peek und poke ( Da wird noch C benötigt ) erledigt.
--
<http://www.hermann-riemann.de>
Loading...