FreeBASIC
FreeBASIC (kurz FB) ist ein kostenloser Open-Source-Compiler und eine Programmiersprache, deren Syntax auf QuickBASIC aufbaut. Er ermöglicht das Erzeugen von 32-Bit und 64-Bit-Anwendungsprogrammen, Spielen etc. für Microsoft Windows, Linux, FreeBSD und DOS, teilweise auch für die Xbox. Versionen für weitere Betriebssysteme sind geplant.
FreeBASIC | |
---|---|
Seite aus dem Handbuch | |
Basisdaten | |
Entwickler | André Victor The Freebasic Development Team (Open Source) |
Erscheinungsjahr | 2004 |
Aktuelle Version | 1.08.0[1] (5. Juni 2021) |
Betriebssystem | Windows, Linux, DOS und FreeBSD (letzteres nur eingeschränkt) |
Programmiersprache | BASIC |
Kategorie | Compiler |
Lizenz | GPL/LGPL |
deutschsprachig | ja |
www.freebasic.net (official website) www.freebasic-portal.de[2] |
C-kompatible Bibliotheken können direkt, C++-Bibliotheken immerhin teilweise in FreeBASIC verwendet werden. So können beispielsweise GTK+, GSL, SDL, Allegro, Lua oder OpenGL genutzt werden, und mit jeder neuen Version steigert sich die Anzahl der unterstützten Bibliotheken.
Die erste Version wurde im November 2004 veröffentlicht.
Merkmale
Die Programmiersprache FreeBASIC lehnt sich in ihrer Syntax stark an den vom DOS-basierten QuickBASIC definierten Dialekt an, was der Compiler mit der Direktive -lang qb
nochmals verstärkt, wodurch die Möglichkeit besteht, QBasic-Code ohne größere Anpassung zu modernen Anwendungen zu kompilieren. Darüber hinaus zeichnet sich FreeBASIC durch zahlreiche Verbesserungen und moderne Features aus:
- Inline-Assembler
- Pointer auf Variablen und Funktionen
- Überladen von Funktionen, Subroutinen (Funktionen ohne Rückgabe) und Operatoren. Außerdem können Funktionen und Subroutinen mit optionalen Parametern erstellt werden.
- C-kompatible Schnittstelle für Funktionsaufrufe. Hierdurch werden Projekte in mehreren Programmiersprachen ermöglicht und man kann auf so gut wie alle Funktionen zurückgreifen, die heutige Programmierer nutzen, hierunter befinden sich auch die WinAPI und andere (C-kompatible) Bibliotheken, u. a. OpenGL oder DirectX.
- Shorthands,[3] Makros u. ä., die dem Programmierer einige Tipparbeit abnehmen
- Grundlagen der objektorientierten Programmierung wie Klassen („types“), sowie die Einfachvererbung (einige Merkmale wie beispielsweise Interfaces oder das Schlüsselwort „class“ anstelle von „type“ sind bereits angedacht, wurden aber noch nicht umgesetzt).
- Alle Funktionen (u. a. Dateizugriff, Zeichenketten etc.) der Laufzeitbibliothek sowie sämtliche internen Grafikbefehle sind plattformunabhängig, d. h. können auf Windows, Linux und DOS gleichermaßen verwendet werden. Das ermöglicht das einfache Schreiben plattformunabhängiger Anwendungen.
Der Compiler
Der FreeBASIC-Compiler („FBC“) erzeugt Maschinencode, welcher mit den Hilfsprogrammen der GCC-Suite kompiliert und gelinkt wird. Dadurch können auch Bibliotheken von der GCC-Suite verwendet werden, und man erhält ausführbare Binärdateien kleiner Größe für Windows, DOS und Linux. Alternativ zur direkten Generierung von Maschinencode durch den Compiler ist auch eine Einbeziehung des C-Compilers oder des LLVM-Backends möglich: So ist der Compiler in der Lage, über eine entsprechende Compiler-Option[4] C-Code, insbesondere für die GCC-Suite, zu erzeugen (sogenanntes „C backend“, im Gegensatz zum „assembler backend“). Ebenso kann mit einer ähnlichen Compiler-Option[5] Zwischencode generiert werden, der über das LLVM-Framework weiterverarbeitet werden kann. Durch diese zwei Optionen ist eine direkte Integration in bekannte Strukturen möglich.[6]
Der Compiler ist in der Lage, 32-Bit-x86- und 64-Bit-Programme zu erstellen. Durch das C-Backend sind überdies hinaus andere Plattformen wie ARM verfügbar.
Syntax
Es existieren derzeit über 400 Schlüsselwörter, die z. T. auf mehrerlei Art und Weise verwendet werden können. Generell werden drei Arten von Schlüsselwörtern unterschieden:[7]
- Anweisungen: Anweisungen erfüllen eine bestimmte Aufgabe, etwa die Ausgabe von Text auf dem Bildschirm.
- Funktionen: Sie zeichnen sich dadurch aus, dass nach ihrem Aufruf ein Wert zur Verfügung gestellt wird, der das Ergebnis des Funktionsaufrufs darstellt. Dabei kann der Wert den einzigen Sinn der Funktion darstellen (etwa bei mathematischen Funktionen wie
LOG
) oder nur über den Status des Funktionsaufrufs informieren (Funktionen mit Anweisungscharakter, wieGETMOUSE
; diese Funktion fragt den Status der Maus ab und gibt eine Zahl zurück, die bestätigt, dass die Abfrage erfolgreich war, oder ob dabei ein Fehler aufgetreten ist). - Klauseln: Sie beeinflussen das Verhalten von Anweisungen und Funktionen und können losgelöst von diesen nicht verwendet werden.
Die Groß/Kleinschreibung ist dabei, wie bei BASIC üblich, ohne Bedeutung. „GetMouse
“ und „GETMOUSE
“ werden vom Compiler gleich behandelt.
Variablen
Beim Umgang mit Werten (Zahlen, Zeichenketten, oder sonstige Arten von Informationen) werden Variablen und Konstanten verwendet, STRING
-Variablen (Zeichenketten) werden in doppelte Anführungszeichen «"» gesetzt. Wird der Zeichenkette ein «!» vorangestellt, können auch Escape-Sequenzen benutzt werden (z. B. Print !"Hello\nWorld"
– erzeugt einen Zeilenumbruch zwischen «Hello» und «World»). Mit diesen Variablen und Konstanten kann über verschiedene Operatoren gearbeitet werden. Bei Zahlen-Variablen stehen etwa verschiedene mathematische Operatoren zur Verfügung (+, −, *, /, LOG
, EXP
, SIN
, ASIN
, …). Bei STRINGs hingegen ist die Auswahl der Operatoren eingeschränkt, möglich ist nur die Verkettung (+ oder &) sowie die Indizierung (mittels eckiger Klammern).
Funktionen und Subroutinen
Ebenso ist es möglich, innerhalb eines Programmes eigene Befehle zu erstellen, die aus einer Aneinanderreihung bestehender Befehle bestehen. Ein solcher eigener Befehl kann eine SUB
(Abkürzung für Subroutine) sein, die sich wie eine Anweisung verhält, oder eine FUNCTION
, die ebenso wie FreeBASICs eigene Funktionen einen Wert zurückgeben kann. Beide können mit Parametern arbeiten, die auch optional sein dürfen. Es werden auch variable Parameterlisten analog zu C unterstützt.[8]
Im Gegensatz zu vielen anderen Sprachen werden Programmbefehle nicht mit einem Semikolon abgeschlossen, sondern mit einem Zeilenumbruch wie auch in QBasic. Möchte man einen Befehl über mehrere Zeilen ausdehnen, muss am Ende jeder Zeile, die den Befehl nicht beendet, ein Unterstrich geschrieben werden:
PRINT "Hallo, dieser String" + _
" ist ein einzelner String."
Mehrere Befehle können ohne Zeilenumbruch durch einen Doppelpunkt aneinandergereiht werden:
PRINT "Hallo, dieser String": PRINT " ist ein einzelner String."
Ein weiterer Unterschied zu anderen Sprachen ist, dass bei Aufrufen von Subroutinen die Klammersetzung optional ist, da man eine Subroutine sowohl mit Subroutine(Parameter)
als auch mit Subroutine Parameter
aufrufen kann. Diese Eigenschaft ist ebenfalls von QBasic abgeleitet. Jedoch ist dies nicht bei Funktionen möglich, dort müssen immer Klammern gesetzt werden.
Code-Beispiele
Hallo Welt
Ein einfaches Hallo-Welt-Programm in FreeBASIC sieht so aus:
PRINT "Hallo Welt!"
SLEEP
PRINT
ist hierbei eine Anweisung, die bewirkt, dass ein Text auf dem Bildschirm ausgegeben wird."Hallo Welt!"
ist hierbei ein Parameter; in diesem Fall wird alsoHallo Welt!
auf dem Bildschirm ausgegeben.- Der
SLEEP
-Befehl[9] wird nicht benötigt. Er wird nur benutzt, um zu verhindern, dass sich das Ausgabefenster der Anwendung automatisch schließt, wenn diese nicht aus der Konsole gestartet wurde.
Objektorientierte Programmierung
'Vektorklasse
Type Vector
W as Integer
H as Integer
Declare Constructor (nW as Integer, nH as Integer)
End Type
Constructor Vector (nW as Integer, nH as Integer)
W = nW
H = nH
End Constructor
'Klasse zur Erstellung eines Objekts
Type AObject
Private:
X as Integer
Y as Integer
Movement as Vector Pointer
Public:
'Öffentliche Methoden inklusive eines Konstruktors und eines Destruktors
Declare Constructor (nX as Integer, nY as Integer)
Declare Destructor ()
Declare Sub SetMotion (Motion as Vector Pointer)
Declare Sub Move ()
Declare Property GetX as Integer
End Type
'Initialwerte setzen
Constructor AObject (nX as Integer, nY as Integer)
X = nX
Y = nY
End Constructor
'Allozierten Speicher freigeben
Destructor AObject ()
delete Movement
End Destructor
'Bewegungsvektor setzen
Sub AObject.SetMotion (Motion as Vector Pointer)
Movement = Motion
End Sub
'Das Objekt anhand seines Bewegungsvektors bewegen
Sub AObject.Move ()
X += Movement->W
Y += Movement->H
End Sub
'Rückgabe von X, welches sonst nicht zugänglich wäre
Property AObject.GetX as Integer
Return X
End Property
'Hier beginnt das eigentliche Programm
'Eine neue Instanz von 'AObject' an den Koordinaten 100, 100 erstellen
Dim Player as AObject = Type<AObject>(100, 100)
'Ein neues Vektorobjekt dynamisch allozieren und dessen Position um 10 nach links und 5 nach unten verschieben
Player.SetMotion(new Vector (-10, 5))
'Die Position von 'Player' aktualisieren
Player.Move()
'Den neuen Wert von X (90) anzeigen
Print Player.GetX
'Weil 'Player' eine lokale Variable ist, wird sein Destruktor am Ende des Gültigkeitsbereichs ("scope") automatisch aufgerufen
'Vor Programmende auf Tastendruck warten
Sleep
IDE
Neben der Unterstützung durch bekannte Entwicklungsumgebungen, wie Geany, existieren auch zwei speziell auf FreeBASIC ausgelegte Editoren:
FBIde
Die FBIde ist ein schlanker Editor und die älteste IDE für FreeBasic. Die aktuelle Version ist 0.4.6r4.[10]
FBEdit
Mehr Möglichkeiten bietet der FreeBASIC-Editor, kurz FBEdit. Es gibt ein eigenes Interface zur Gestaltung von Dialogen mithilfe von Ressourcendateien und der Windows-API. Die aktuelle Version ist 1.0.7.6c vom 14. Dezember 2013.[11]
Weblinks
- FreeBASIC – Webseite des Compilers (englisch)
- FreeBASIC-Portal – mit Einführungen und Code-Beispielen (deutsch)
- Befehlsreferenz – (deutsch)
- Programmierwettbewerb – zu FreeBASIC und QuickBasic (deutsch)
Einzelnachweise
- Release 1.08.0. 5. Juni 2021 (abgerufen am 21. Juni 2021).
- inoffizielle Webseite von der dt. FreeBASIC „Community“, siehe German FreeBASIC portal
- z. B. statt a = a + 10 die Kurzform a += 10
- mit der Option „-gen gcc“
- mit der Option „-gen llvm“
- Zum C-Backend und zum LLVM-Backend siehe auch die Mitteilung auf der Homepage des FreeBasic-Portals, (abgerufen 12. Januar 2014).
- http://www.freebasic-portal.de/befehlsreferenz/ Weblinks: Online-Befehlsreferenz
- http://www.freebasic-portal.de/befehlsreferenz/auslassung-ellipsis-556.html Ellipsis in der deutschsprachigen Befehlsreferenz
- http://www.freebasic-portal.de/befehlsreferenz/sleep-400.html
- http://fbide.freebasic.net/
- https://www.freebasic-portal.de/downloads/ides-fuer-freebasic/fbedit-ide-30.html