
FreeBASIC ist eine prozedurale Programmiersprache aus der BASIC-Sprachfamilie, die stark an QuickBASIC angelehnt ist. Die Entwicklung begann im Herbst 2004. Als Initiator des Projektes gilt der Brasilianer Andre Victor T. Vincentini. 2014 erschien FreeBASIC in der Version 1.00.0, welche unter anderem 64-Bit-Unterstützung beinhaltete.
In diesem Beitrag setze ich mich neben FreeBASIC auch mit der BASIC-Sprachfamilie auseinander.
BASIC
BASIC – Beginners‘ All-purpose Symbolic Instruction Code – ist eine Sprachfamilie, die ihren Ursprung im Jahr 1963 hat. Die beiden Professoren John George Kemeny und Thomas Eugene Kurtz entwickelten das erste BASIC am Dartmouth College für das Betriebssystem Dartmouth Time Sharing System (DTSS). Zur Differenzierung wurde es erst später als Dartmouth BASIC bezeichnet.
BASIC orientierte sich in der Syntax an Fortran und Algol und erschien als Fortsetzung der ein Jahr zuvor von John George Kemeny entwickelten sehr rudimentären Sprache Dartmouth Oversimplified Programming Experiment (DOPE). Mit der Entwicklung dieser Sprachen zielten Kemeny und Kurtz darauf ab, Studenten und Lehrkräften den einfachen Umgang mit Computern zu ermöglichen.
Our vision was that every student on campus should have access to a computer, and any faculty member should be able to use a computer in the classroom whenever appropriate. It was as simple as that.
John George Kemeny
Charakteristisch für das originale BASIC war die Verwendung von Zeilennummern und das heute berüchtigte GOTO
-Statement. Variablen wurden über das Schlüsselwort DIM
deklariert und waren anfänglich auf 286 Stück begrenzt. Text wurde mit dem Statement PRINT
auf dem Bildschirm ausgegeben und Kommentare wurden durch ein vorangestelltes REM
identifiziert. Mit DEF
konnten Einzeiler-Funktionen deklariert werden. Blöcke gab es in der originalen Version nicht, mittels des Statements GOSUB
konnte aber in eine Zeilennummer gesprungen werden, bis durch ein RETURN
-Statement ein Rücksprung eingeleitet wurde.
Die erste Version von BASIC kam mit lediglich zehn mathematischen Funktionen als „Standard-Bibliothek“. Die Interaktion mit Dateien war erst in späteren Versionen möglich.
Bereits zu Beginn in den 1970er Jahren gab es über ein Dutzend BASIC-Dialekte. Als 1975 mit Altair 8800 einer der ersten Heimcomputer auf den Markt kam, erschien im gleichen Jahr für diesen der Interpreter Altair BASIC, entwickelt von Paul Allen und Bill Gates. Von dieser Version stammen heute etwa 30 BASIC-Dialekte ab, darunter auch FreeBASIC, als offene Implementierung inspiriert von QuickBASIC.
Microsoft QuickBASIC erschien ursprünglich 1985 als integrierte Entwicklungsumgebung mit BASIC-Compiler für MS-DOS. Mit QBasic erschien 1991 eine Art Nachfolger für MS-DOS und Windows, der bis einschließlich Windows ME mit dem Betriebssystem ausgeliefert wurde. QBasic blieb abwärtskompatibel, brachte aber zugleich modernere Konzepte in die Sprache ein, wie Labels als Sprungadresse alternativ zu Zeilennummern, Subroutinen und strukturierte Typen.
Mit dem Erscheinen moderner Sprachen wie C, Python, Java oder JavaScript und immer leistungsfähigerer Heimcomputer und Betriebssysteme verlor BASIC massiv an Bedeutung und wird heutzutage primär von Hobbyisten verwendet. Bemerkenswert für BASIC ist, dass viele heutzutage noch in Weiterentwicklung befindlichen Dialekte proprietär sind.
Einer der modernen Vertreter von BASIC ist Visual Basic von Microsoft, das 1991 seinen Anfang nahm. Dieser Zweig von BASIC-Sprachen, zu dem auch Visual Basic for Applications (VBA) und Visual Basic Script (VBScript) zählen, zielt vergleichbar mit Delphi auf Rapid Application Development ab und hat in seiner Gesamtheit mit dem ursprünglichen BASIC nicht mehr viel zu tun.
Die folgende Tabelle liefert eine groben Einordnung der Bedeutung einiger ausgewählter noch heute verwendeter BASIC-Dialekte. Die Treffer bezeichnen die Anzahl der Treffer bei einer Suche auf google.com in einem Incognito-Browser-Fenster Anfang 2024 als oder-verknüpfte Getrennt- und Zusammengeschrieben-Suche, also zum Beispiel "freebasic" OR "free basic"
. Die Suche ist nicht-repräsentativ und von vielen Faktoren beeinflusst, soll aber auch nur eine grobe Einordnung abgeben.
Dialekt | Treffer (2024) |
---|---|
Visual Basic | 31.600.000 |
FreeBASIC | 7.270.000 |
QuickBASIC / QBasic | 1.570.000 |
REALbasic / Xojo | 1.370.000 |
SmallBasic | 1.320.000 |
PureBasic | 568.000 |
PowerBASIC | 548.000 |
True BASIC | 536.000 |
Persönliche Erfahrung mit BASIC
Als ich in der Grundschule war, brachte mein Vater einen aussortierten Computer mit Windows 3.11 von der Arbeit nach Hause. Auf diesem war QBasic vorinstalliert und ich machte dort unter Zuhilfenahme eines Buches aus der örtlichen Bücherei meine ersten Programmiererfahrungen. Es handelte sich dabei um einfache Ein- und Ausgaben. Da ich nicht wusste, wie man ein Programm speicherte, bzw. dass man es speichern konnte, fing ich jedes Mal von vorne an.
Später lernte ich DarkBASIC kennen, einen BASIC-Dialekt mit 3D-Engine für die Spieleentwicklung. Ich baute damit mehrere kleine Spiele, die zum Teil Sound und Sprites beinhalteten. Mit der 3D-Engine selbst hatte ich nur sehr rudimentäre Erfahrung gemacht. Eines der Spiele, welches wir auch mal auf einer LAN-Party gespielt hatten, ergab kompiliert eine Exe-Datei mit einer Größe von 100MB, da sämtliche Assets im Executable enthalten waren.
Im beruflichen Kontext habe ich mich später oberflächlich mit Visual Basic Script befasst, da einige zeitlich gesteuerte Jobs auf den Windows-Servern meines Kunden in dieser Sprache geschrieben waren.
Alleinstellungsmerkmale
BASIC ist wohl in seinen Grundzügen eine der am einfachsten zu erlernenden Programmiersprachen, gerade wenn man auf Dialekte wie QuickBASIC und ältere Varianten schaut, die keine strukturierten Typen und Subroutinen bieten. Man konnte programmieren lernen, ohne sich mit Objektorientierung, Parametrisierung und Rückgabewerten auseinandersetzen zu müssen. BASIC ist so simpel, dass ich als Grundschüler autodidaktisch kleine Programme darin schreiben konnte.
FreeBASIC differenziert sich von anderen BASIC-Dialekten durch seine verhältnismäßig große Verbreitung, Quelloffenheit und Plattformunabhängigkeit.
Einsatzbereiche
FreeBASIC und auch die anderen heute noch genutzten Vertreter von BASIC werden überwiegend für Freizeitprojekte eingesetzt.
Im beruflichen Kontext trifft man wenn überhaupt noch auf Dialekte von Visual Basic. VBA wird noch als Teil der aktuellen Office-Suite ausgeliefert und ist unter anderem in Microsoft Access und Microsoft Excel integriert. Für VBScript wurde 2023 verkündet, dass es in zukünftigen Versionen von Windows als deprecated markiert und irgendwann nicht mehr mit dem Betriebssystem ausgeliefert wird.
Pros
FreeBASIC ist sehr leicht zu erlernen. Es bietet nur wenige Datentypen, eine einfache Zeigerarithmetik und leicht handhabbare dynamische Arrays. Da es keine moderneren Datenstrukturen wie Tupels oder Maps gibt, kann man sich gut auf die absoluten Programmiergrundlagen fokussieren.
Beim Zugriff auf Arrays kann der Indexbereich frei gewählt werden, so dass das erste Element nicht zwingend an Position 0 ist, was Anfänger oft verwirrt und leicht zu Off-by-one-Fehlern führt.
Historisch noch unterstützte Zeilennummern und das GOTO
-Statement erlauben einen besonders leichten Einstieg und die Erfahrung, sich mit den Fallstricken dieser Möglichkeiten vertraut zu machen. Der folgende Code mit Compiler-Flag -lang qb
gibt die Zahlen der Fibonacci-Folge kleiner 100 aus:
10 DIM A AS INTEGER
20 DIM B AS INTEGER
30 DIM C AS INTEGER
40 A = 0
50 B = 1
60 PRINT A
70 PRINT B
80 C = A + B
90 IF C > 100 THEN GOTO 140
100 PRINT C
110 A = B
120 B = C
130 GOTO 80
140 PRINT "BYE!"
FreeBASIC hat wie die meisten BASIC-Dialekte eine an menschliche Sprache angelehnte Syntax mit sehr wenigen Sonderzeichen. Runde Klammern an Subroutinen oder Funktionen müssen nur in Ausdrücken gesetzt werden. Sowohl in Bedingungen als auch bei Zuweisungen wird das einfache Gleichheitszeichen verwendet. Für Negierung und Verknüpfungen dienen sprechende Schlüsselwörter wie NOT
und OR
.
FreeBASIC bietet native Unterstützungen für Vollbildanwendungen und populäre Graphikbibliotheken wie OpenGL, SDL und Cairo und taugt durchaus zur Entwicklung einfacher Spiele.
FreeBASIC kann Anfängern, die systemnahe Programmierung erlernen wollen, als Sprungbrett dienen, um sich in einem zweiten Schritt mit Sprachen wie C und Pascal vertraut zu machen.
Cons
FreeBASIC differenziert wie Pascal-ähnliche Sprachen zwischen Subroutinen und Funktionen, wobei nur letztere einen Rückgabewert besitzen. Diese Unterscheidung hat aus meiner persönlichen Sicht mehr Nachteile als Vorteile, da sie die Syntax in erster Linie komplizierter macht als sie sein müsste.
Wie auch in Pascal gibt es mehrere Möglichkeiten, einen Wert aus einer Funktion zurückzugeben. Es können zwei implizite Variablen dafür verwendet werden, von denen die erste den Namen der Funktion trägt und die andere FUNCTION
heißt, oder es kann ein Wert direkt mit RETURN
zurückgegeben werden, was im Gegensatz zu den Alternativen auch direkt die Funktion beendet. Auch hier finde ich, dass die Differenzierung wenig Vorteile hat, aber die Sprache im Gegenzug komplizierter macht.
Auch bei der Deklaration einer Variablen via DIM
gibt es zwei Alternativen: DIM AS <TYPE> <VARIABLE>
ist gleichwertig mit DIM <VARIABLE> AS TYPE
. Wie schon zuvor erhöht dies unnötig die Komplexität bei einer Sprache, die es als primäres Ziel hat, Anfängern einen Einstieg in die Programmierung zu bieten.
BASIC ist case insensitive, was bedeutet, dass Person
, person
und PERSON
gleichbedeutend sind und man bei der Namenswahl kreativ werden muss, da man nicht wie in vielen anderen Sprachen Person
als Typ und person
als Variable verwenden kann. Im Kombination mit der Vielzahl bereits im Standard enthaltener Funktionen wie VAL
, LEN
und LEFT
kann man leicht darüber stolpern, dass man schnell eine Variable redeklariert, deren Existenz man sich nicht bewusst war. Als ich beispielsweise eine Benutzereingabe in einer Variable zwischenspeichern wollte, war mir zunächst nicht klar, dass sowohl INPUT
als auch INP
bereits durch Funktionen belegt sind und ich mir einen anderen Namen einfallen lassen musste.
FreeBASIC ist leicht zu erlernen, bietet aber andererseits wenig moderne Konzepte und Strukturen. Dictionaries fehlen genauso wie Sets und Queues. Es gibt keine Objektorientierung, auch wenn sie für FreeBASIC konkret in Planung ist, keine Zugriffsmodifikatoren, die bei Informatione Hiding und Modularisierung unterstützen würden, und nur eine begrenzte Fehlerbehandlung.
Darüber hinaus hat FreeBASIC quasi keine berufliche Relevanz, was das Erlernen zu einem reinen Freizeitvorhaben macht, sofern man nicht vorhat, mit FreeBASIC ein Produkt zu bauen, mit dem man Geld verdienen möchte – und davon ist wohl eher abzuraten.
Auch wenn BASIC sich auf die Fahne schreibt, besonders einfach zu sein, wird FreeBASIC diesem Ruf nicht immer gerecht. So hat ein Semikolon ;
die alleinige Aufgabe, bei einer Ausgabe nach stdout den Zeilenumbruch zu unterdrücken. Ein einem String vorangestelltes Ausrufezeichen !
sorgt dafür, dass Escape-Codes wie \t
für Tab in Strings interpretiert werden. Strings werden mit einem Kaufmanns-Und &
aneinandergehängt, das aber nur notwendig ist, wenn der String in einer Variablen oder einem Rückgabewert steckt, "foo" "bar"
wird automatisch zu "foobar"
, während das Kaufmanns-Und in "foo" & bar
notwendig ist, wenn es sich bei bar
um eine Variable handelt. Mehrzeilige Statements werden durch einen Unterstrich _
am Ende der Zeile ermöglicht.
Datenblatt
Name | FreeBASIC |
Webseite | https://www.freebasic.net/ |
Erscheinungsjahr | 2004 |
Aktuellste Version (Stand 28. Juli 2024) | 1.10.0 |
Typisierung | statisch |
Paradigmen | prozedural |
Pros | Cons |
---|---|
sehr leicht zu erlernen | Unterscheidung zwischen Subroutinen und Funktionen |
historisch interessant | unnötige Komplexität beim Setzen eines Rückgabewertes |
wenig Sonderzeichen in der Syntax | unnötige Komplexität bei der Deklaration von Variablen |
einfacher Einstieg in die Entwicklung von Vollbildanwendungen | case-insensitive und bereits verwendete Funktionsnamen kommen einem leicht in die Quere |
gute Wahl, wenn man sich mit Zeigern und dynamischen Arrays auseinandersetzen will, sich aber noch nicht an Sprachen wie C traut | viele moderne Konzepte fehlen |
keine berufliche Relevanz | |
manchmal unnötig kryptisch |
virtuallet
virtuallet ist ein kleines Programm von mir, welches ich in diversen Programmiersprachen implementiert habe. Hier geht es direkt zum FreeBASIC-Code von virtuallet auf GitLab. Hier gibt es weitere Infos zu virtuallet.