1. Eine kurze Einführung in FreeBASIC
Das Kapitel will Ihnen die Grundbegriffe zum Thema Programmierung und Compilierung nahe bringen. In Kapitel 1.3 erfahren Sie außerdem, welche Unterschiede zwischen Q(uick)BASIC und FreeBASIC bestehen.
1.1 Was ist eine Programmiersprache?
Computer besitzen eine eigene Maschinensprache, in der ihre Programme ablaufen. Da ein Computer in Binärcode „denkt“, der für Menschen sehr schwer verständlich ist, werden Programmiersprachen eingesetzt, um Computerprogramme in einem für Menschen leichter verständlichen Programmcode, sogenannten Quelltext, niederzuschreiben. Nun muss jedoch dieser Programmcode zuerst in Maschinensprache übersetzt werden, um vom Computer verarbeitet werden zu können. Ursprünglich übernahm bei BASIC diese Aufgabe ein Interpreter, der die Anweisungen bei jeder Ausführung Zeile für Zeile übersetzte. Heute werden vielfach Compiler eingesetzt, die den Quelltext einmal komplett in Maschinencode übersetzen. Diese übersetzten Programme — unter Windows handelt es sich dabei um die bekannten .exe-Dateien — können anschließend jederzeit ausgeführt werden, ohne dass man sie jedes Mal aufs Neue übersetzen muss.
Wurde ein Quelltext erfolgreich z. B. für Windows übersetzt, so kann das erzeugte Programm von allen binärkompatiblen Windowssystemen ausgeführt werden — nicht jedoch von anderen Systemen wie z. B. Linux. Die Programmiersprache selbst ist dagegen nicht an das Betriebssystem gebunden. Der Quelltext eines Programmes kann also für mehrere verschiedene Betriebssysteme übersetzt werden, sofern für dieses System ein Compiler existiert. Man spricht dabei von Maschinenunabhängigkeit. Während das compilierte Programm problemlos an andere Nutzer desselben Betriebssystems weitergegeben werden kann, ohne dass diese den Compiler besitzen müssen, kann der Quelltext ohne weiteres zwischen verschiedenen Betriebssystemen ausgetauscht werden, muss dann aber noch für das neue System compiliert werden.
1.2 Was ist FreeBASIC?
Wie der Name schon sagt, ist FreeBASIC ein BASIC-Dialekt. BASIC steht für Beginner‘s All-purpose Symbolic Instruction Code (symbolische Allzweck-Programmiersprache für Anfänger) und wurde 1964 mit dem Ziel entwickelt, eine einfache, für Anfänger geeignete Programmiersprache zu erschaffen.
Der Befehlssatz von FreeBASIC baut auf QuickBASIC der Firma Microsoft auf, welches in der abgespeckten Version namens QBasic noch unter Windows 98 mit der Installations-CD ausgeliefert wurde. Vorrangiges Ziel bei der Entwicklung von FreeBASIC war die Kompatibilität zu QuickBASIC. Jedoch gibt es für FreeBASIC zur Zeit keinen Interpreter (jedenfalls keinen, der den vollen Befehlssatz unterstützt), sondern stattdessen den FreeBASIC-Compiler fbc zur Erstellung von 32- bzw. 64-Bit-Anwendungen. Der Compiler steht für Microsoft Windows, Linux, DOS und Xbox zur Verfügung. In FreeBASIC erstellte Programme sind — von wenigen Ausnahmen abgesehen — auf allen drei Plattformen ohne Änderung lauffähig. Oder, etwas genauer ausgedrückt: Quelltexte, die in FreeBASIC geschrieben wurden, können — von wenigen Ausnahmen abgesehen — für alle genannten Plattformen ohne Änderung compiliert werden.
Der Compiler ist außerdem Open Source, was bedeutet, dass der Quelltext frei betrachtet und an die eigenen Bedürfnisse angepasst werden kann.
1.3 Unterschiede zu QuickBASIC
Dieser Abschnitt behandelt QuickBASIC und dessen abgespeckte Version QBASIC gleichermaßen; der Einfachheit halber wird nur von QuickBASIC gesprochen. Wer noch nie mit QuickBASIC in Berührung gekommen ist, kann den Abschnitt getrost überspringen — er ist eher für Programmierer interessant, die von QuickBASIC zu FreeBASIC wechseln wollen.
Trotz hoher Kompatibilität zu QuickBASIC gibt es eine Reihe von Unterschieden zwischen beiden BASIC-Dialekten. Einige davon beruhen auf der einfachen Tatsache, dass QuickBASIC für MS-DOS entwickelt wurde und einige Elemente wie beispielsweise direkte Hardware-Zugriffe unter echten Multitaskingsystemen wie höhere Windows-Systeme oder Linux nicht oder nur eingeschränkt laufen. Des Weiteren legt FreeBASIC größeren Wert auf eine ordnungsgemäße Variablendeklaration, womit Programmierfehler leichter vermieden werden können.
Kompatibilitätsmodus: Mit der Compiler-Option -lang qb kann eine größere Kompatibilität zu QuickBASIC erzeugt werden. Verwenden Sie diese Option, um alte Programme zum Laufen zu bringen. Mehr dazu erfahren Sie in Anhang B. |
-
Nicht explizit deklarierte Variablen (
DEF###
)
In FreeBASIC müssen alle Variablen und Arrays explizit (z. B. durchDIM
) deklariert werden. Die Verwendung vonDEFINT
usw. ist nicht mehr zulässig. -
OPTION BASE
Die Einstellung der unteren Array-Grenze mittelsOPTION BASE
ist nicht mehr zulässig. Sofern die untere Grenze eines Arrays nicht explizit angegeben wird, verwendet FreeBASIC den Wert 0. -
Datentyp
INTEGER
QuickBASIC verwendet 16 Bit für die Speicherung eines Integers. In FreeBASIC sind es, je nach Compilerversion, 32 bzw. 64 Bit. Verwenden Sie den DatentypSHORT
, wenn Sie eine 16-Bit-Variable verwenden wollen. -
Funktionsaufruf
Alle Funktionen und Prozeduren, die aufgerufen werden, bevor sie definiert wurden, müssen mitDECLARE
deklariert werden. Der BefehlCALL
wird in FreeBASIC nicht mehr unterstützt. -
Verwendung von Suffixen
Suffixe (z. B. ein $ am Ende des Variablennamens, um die Variable als String zu kennzeichnen) werden nicht mehr unterstützt. Jede Variable und ihr Typ müssen, z. B. durchDIM
, explizit deklariert werden.
Damit dürfen Variablen auch keinen Namen erhalten, der bereits von einem Schlüsselwort belegt ist. -
Padding von
TYPE
-Feldern
Unter QuickBASIC wird kein Padding durchgeführt. In FreeBASIC werden UDTs standardmäßig auf ein Vielfaches von 4 oder 8 Byte ausgedehnt, abhängig vom System. Dieses Verhalten kann durch das SchlüsselwortFIELD
angepasst werden. -
Strings
Unter FreeBASIC wird an das Ende des Strings intern einCHR(0)
angehängt. Strings können in der 32-Bit Version des Compilers eine maximale Länge von 2 GB besitzen, in der 64-Bit-Version eine maximale Länge von 8.388.607 TB. -
BYREF
Alle Zahlen-Variablen werden standardmäßigBYVAL
übergeben. Arrays werden immerBYREF
übergeben; hier ist eine Übergabe mittelsBYVAL
nicht möglich. -
Punkte in Symbolnamen
Punkte in Symbolnamen sind nicht mehr zulässig, da die Punkte für die objektorientierte Programmierung eine neue Bedeutung besitzen. -
nicht mehr unterstützte Befehle
GOSUB
/RETURN
1 ,ON…GOSUB
,ON…GOTO
,ON ERROR
undRESUME
sind nicht mehr erlaubt. Es gibt jedoch andere Befehlskonstrukte, um die gewünschten Ergebnisse zu erzielen.
In Kommentare eingebundene Meta-Befehle'$DYNAMIC
,'$STATIC
,'$INCLUDE
und'$INCLIB
existieren nicht mehr. Verwenden Sie#INCLUDE
bzw.#INCLIB
, um diese Befehle zu ersetzen.
CALL
existiert nicht mehr und kann einfach weggelassen werden.
LET
kann nicht mehr für eine einfache Variablenzuweisung verwendet werden; lassen Sie dazuLET
einfach weg. Stattdessen erlaubt der Befehl eine mehrfache Variablenzuweisung für die Attribute eines UDTs. -
numerische Labels
Labels, die nur aus Ziffern bestehen, werden nicht mehr unterstützt. -
globale Symbole, die den Namen eines internen Schlüsselworts besitzen
Möchten Sie diese weiterhin benutzen, müssen Sie sie in einemNAMESPACE
deklarieren.
1.4 Vor- und Nachteile von FreeBASIC
Jede Programmiersprache hat ihre Vor- und Nachteile. Je nachdem, welche Ansprüche der Programmierer an sein Programm stellt, ist die eine oder die andere Sprache besser für ihn geeignet. Für die Wahl der richtigen Programmiersprache ist es daher wichtig, ihre Vor- und Nachteile zu kennen.
Als 32- bzw. 64-Bit-BASIC-Compiler besitzt fbc eine Reihe von Vorzügen:
-
FreeBASIC ist eine leicht erlernbare Sprache mit einem einprägsamen Befehlssatz, der an die englische Sprache angelehnt ist. Die Funktionsweise der Grundbefehle lässt sich damit auch bereits mit wenigen Programmierkenntnissen recht leicht erschließen.
-
Der Compiler erzeugt ausführbare 32- bzw. 64-Bit-Anwendungen, die auf anderen Computern mit gleichem Betriebssystem ohne Zusatzprogramme (Interpreter, Virtual Machine o. ä.) ausgeführt werden können.
-
Sofern keine speziellen systemabhängigen Bibliotheken eingesetzt werden, kann der Quelltext ohne Änderungen für Windows und Linux compiliert werden. Durch den Einsatz von Präprozessoren kann die Portabilität weiter erhöht werden.
-
FreeBASIC kann alle in C geschriebenen Bibliotheken einbinden. Viele davon können ohne zusätzliche Vorarbeit direkt eingesetzt werden.
-
Der Quelltext kann ohne Schwierigkeiten in mehrere Module aufgeteilt werden, wodurch einzelne Codeabschnitte leicht wiederverwertet werden können. Je nach Deklaration sind die in den Modulen definierten Variablen und Prozeduren nur im jeweiligen Modul oder im ganzen Programm aufrufbar.
-
Die eingebaute gfx-Grafikbibliothek erlaubt eine einfache Erstellung grafischer Anwendungen. Auch Windows-Bitmaps können direkt eingesetzt werden. Für den Einsatz weiterer Grafikformate wie PNG und JPEG gibt es eine Reihe von unterstützenden Bibliotheken.
-
FreeBASIC unterstützt Grundlagen der Objektorientierung. Dazu gehören benutzerdefinierte Datentypen, Überladung von Operatoren, Kapselung und Vererbung.
-
Der eingebauten Inline-Assembler erlaubt die direkte Einbindung von Assemblerprogrammen in den Quelltext. Zeitkritische Operationen können damit unter Umständen optimiert werden.
Jedes Programmierkonzept besitzt jedoch auch Nachteile. Für FreeBASIC sind zu nennen:
-
Ein FreeBASIC-Programm kann, im Gegensatz zu Interpretersprachen, erst ausgeführt werden, wenn es compiliert wurde. Nach jeder Änderung im Programm ist ein neuer Compiliervorgang nötig. Da dieser jedoch recht schnell durchgeführt wird, ist das nur bei sehr umfangreichen Quelltexten mit entsprechend langer Compilierzeit ein Nachteil.
-
Der für Anfänger leicht verständlich gehaltene Befehlssatz sorgt dafür, dass viele Befehlsstrukturen etwas ausschweifender formuliert werden müssen. Abstraktere Sprachen erlauben hier oft eine knappere und elegantere (aber für Anfänger schwerer verstehbare) Form.
-
So wie viele BASIC-Dialekt besitzt FreeBASIC, im Vergleich zu anderen Sprachen, eine sehr große Zahl an fest integrierten Schlüsselwörtern, die (wie bereits erwähnt) nicht ohne Weiteres als Namen für Variablen oder Funktionen verwendet werden können. Diese Situation wird durch das Ziel der Rückwärtskompatilbilität noch verschärft.
-
Einige Konzepte, die aus der objektorientierten Programmierung bekannt sind, sind in FreeBASIC nicht implementiert. Weder Mehrfachvererbung noch Interfaces werden unterstützt. Auch generische Typen können nicht eingesetzt werden.
-
Im Gegensatz zu einem BASIC-Interpreter führt FreeBASIC keine Laufzeitüberprüfung der Variablen durch. Der Überlauf einer Variablen wird nicht als Fehler erkannt. Das kann genau so gewünscht sein, kann bei fehlender Sorgfalt aber auch zu schwer lokalisierbaren Fehlern führen.
Fußnoten:
1) RETURN
kann stattdessen eingesetzt werden, um Prozeduren vorzeitig zu verlassen.