Artikel zur Veröffentlichung von Gambas 2.0 RC1

Nach fast zweijähriger Entwicklungszeit freue ich mich, den ersten Release-Candidate von Gambas 2 vorstellen zu können.

Diese Ankündigung erfolgt in der Hoffnung, während des Release-Candidate-Zyklus weitere Tester Benutzer für das Projekt zu begeistern, um uns zu helfen, irgendwelche vergessenen Bugs aufzuspüren.

Einführung

Das neue Logo für Gambas 2
Gambas ist eine voll ausgestattete Objektsprache und eine Entwicklungsumgebung, die auf einem BASIC-Interpreter basiert. Die Veröffentlichung erfolgt unter der GNU General Public Licence.

Die Architektur ist stark durch Java inspiriert, und deshalb besteht Gambas aus:

  • einem Compiler

  • einem Interpreter

  • einem Archivar

  • einem Scripter

  • einer Entwicklungsumgebung

  • vielen Erweiterungskomponenten

Der Compiler selbst ist ein schnelles, kleines Executable, das in C geschrieben wurde:
  • Er kompiliert ca. 128000 gültige Zeilen pro Sekunde auf meinem Athlon 2000. Diese Geschwindigkeit erlaubt einen schnellen inkrementellen Entwicklungsprozess: koden/kompilieren/testen.

  • Momentan führt das System so gut wie keine Optimierungen durch und verlässt sich dabei zur Laufzeit auf den Interpreter.

  • Es verwaltet und kompiliert Stringtranslations mit Hilfe der GNU gettext Tools.

Der Interpreter ist ein kleines Executable von knapp 180 Kb, das ebenfalls in C geschrieben ist:
  • Es bietet alle nativen Features der Sprache an, indem es indirekten Zugriff auf fast alle POSIX glibc Features gewährt.

  • Es lädt auf Anforderung Klassen und optimiert den Bytecode beim ersten Lauf.

  • Das Linken zwischen Klassen wird ebenfalls komplett zur Laufzeit abgewickelt, und zwar so spät wie möglich. Dadurch starten auch große Executables schnell.

Schließlich ist der Archivar ein Programm, das Gambas-Executables aus einem Gambas-Projektverzeichnis heraus erstellt.

Beachten Sie, dass Gambas-Executables lediglich ein umkomprimiertes Archiv des Projekts sind. Es kann jede Dateiart enthalten, nicht nur kompilierten Bytecode, und wird intern vom Interpreter wie ein Dateisystem angesprochen.

Die Gambas-Sprache

Die Haupteigenschaften der Gambas BASIC-Sprache sind:
  • Ca. 250 Schlüsselwörter und native Funktionen, um nahezu alles zu verwalten: Arithmetik, Strings, Fehler, Input-Output, Dateien, Timer...

  • Komplettes Errormanagement

  • Komplette Prozesskontrolle mit Pseudoterminalmanagement

  • Volle Unterstützung der Überwachung von Input-Outputdateideskriptoren

  • Eventloop-Unterstützung mit Timern

  • Native UTF-8-String-Unterstützung

  • Volle Unterstützung von Internationalisierung und Übersetzung

  • Die Fähigkeit, in System-shared-Bibliotheken externe Funktionen aufzurufen

Doch Gambas ist auch eine echte objektorientierte Sprache mit:
  • Objekten und Klassen

  • Eigenschaften, Methoden, Konstanten und Events

  • Öffentlichen und privaten Symbolen

  • Polymorphismus, d. h. virtuellem Methoden-Dispatching

  • Einzelvererbung

  • Konstruktoren und Destruktoren

  • Array-Accessors, Enumeratoren, sortierbaren Objekten

Der Vererbungsmechanismus von Gambas ist vollständig dynamisch und kann:
  • Eine spezielle Version einer existierenden Klasse erzeugen

  • Eine Klasse reimplementieren und erweitern

  • Einige Methoden oder Eigenschaften einer Klasse überschreiben

Sämtliche Klassen können vererbt, reimplementiert oder überschrieben werden, sogar die nativen Klassen, die in C/C++ geschrieben wurden.

Und schließlich kann man mit einer nativen Klasse namens Observer jeden Event abfangen, der von irgendeinem Objekt angestoßen wurde.

Eine erweiterbare Sprache

Der Kern des Gambas-Interpreters ist ein reines Terminalprogramm. Alle anderen Features werden von Komponenten geleistet, die Gruppen von Klassen sind, die in C/C++ oder direkt in Gambas geschrieben wurden.

Unter anderem bieten diese Komponenten:
  • Zugriff auf viele Datenbanksysteme: MySQL, PostgreSQL, SQLite, Firebird, ODBC

  • Programmierung grafischer Oberflächen basierend auf dem QT-Toolkit oder dem GTK+-Toolkit

  • Netzwerkprogrammierung mit starkem Protokollmanagement: HTTP, FTP, SMTP, DNS

  • SDL-Programmierung

  • OpenGL-Programmierung

  • XML-Programmierung

  • CGI-Programmierung mit Sessionmanagement

Beachtenswert ist, dass alle diese Features von nur 351 Klassen und 4197 Symbolen (zum heutigen Zeitpunkt) abgedeckt werden. Verglichen mit anderen Sprachen muss nur eine kleine Anzahl an Konzepten erlernt werden. Außerdem haben wir versucht, die Namen dieser Symbole so kohärent wie möglich zu halten. All das hilft dabei, Gambas zu einer relativ leicht zu lernenden Sprache zu machen.

Komponenten, die in C/C++ geschrieben wurden, werden in Shared-Libraries gespeichert, während Komponenten, die in Gambas geschrieben wurden, lediglich Gambasprojekte wie alle anderen sind.

Sie werden beim Programmstart vom Interpreter geladen oder, wenn nötig, während der Ausführung des Programms.

Die Entwicklung einer Komponente in C/C++ ist ein bisschen wie das Entwickeln eines Gerätetreibers für den Linuxkernel:
  • Der Quellcode der Komponente wird innerhalb des Gambas-Quellbaums angeordnet

  • Die Komponenten und der Interpreter kommunizieren durch ein Application Programming Interface

  • Sie werden innerhalb der Umgebung des Interpreters ausgeführt und können so nicht einfach tun, was sie wollen.

Die Dokumentation des Komponentenschreibens ist noch nicht abgeschlossen, aber auf der Mailingliste findet man alle nötige Hilfe.

Eine Scripting-Sprache

Gambas hat seit kurzem die Möglichkeit bekommen, eine Scriptingsprache zu werden. Dieses Feature wird vom Scripter geleistet, einem kleinen Gambas-Executable, mit dem Sie beliebigen Gambas-Code in einer Textdatei unterbringen können.

Hier ist ein kleines Scriptbeispiel:
#!/usr/bin/env gbs2

' Dieses Script gibt den tatsächlich vom System verwendeten Speicher zurück,
' wobei Cache und Swap ausgenommen werden.

FUNCTION GetUsedMemory() AS Integer

  DIM sRes AS String
  DIM aRes AS String[]
  DIM cVal AS NEW Collection
  DIM sVal AS String

  EXEC ["cat", "/proc/meminfo"] TO sRes

  FOR EACH sVal IN Split(sRes, "\n", "", TRUE)
    aRes = Split(sVal, " ", "", TRUE)
    cVal[Left$(aRes[0], -1)] = CInt(aRes[1])
  NEXT

  RETURN cVal!MemTotal - cVal!MemFree - cVal!Buffers - cVal!Cached + cVal!SwapTotal - cVal!SwapFree - cVal!SwapCached

END

PRINT Subst("Verwendeter Speicher: &1 Bytes", GetUsedMemory())

Unabhängigkeit von Datenbanken, GUI und Desktop

Gambas-Komponenten sind nicht einfach Bindings. Sie versuchen, die zugrunde liegende Bibliothek, auf der sie basieren, zu abstrahieren, womit man Kohärenz und Einfachheit gewinnt.

Deshalb können Sie mit Gambas Programme schreiben, die:
  • unabhängig sind vom zugrunde liegenden Datenbanksystem: jedes Datenbanksystem wird durch dasselbe API angesprochen;

  • unabhängig sind vom grafischen Toolkit: Die QT-Komponente und die GTK+-Komponente haben dasselbe Interface.

Zum Beispiel bietet Gambas eine Datenbankverwaltung, die:
  • jede Datenbank editieren und verwalten kann, vorausgesetzt es existiert eine Komponente dafür;

  • das QT-Toolkit benutzt, wenn es aus KDE heraus läuft, und das GTK+-Toolkit, wenn es unter Gnome oder XFCE läuft.

Die Datenbankverwaltung unter KDE Die Datenbankverwaltung unter XFCE

Außerdem haben wir versucht, auch Unabhängigkeit vom Desktop zu bieten:
  • durch die Verwendung von zur Desktopumgebung passenden Iconthemes (KDE, Gnome or XFCE)

  • durch die gb.desktop=-Komponente, die auf den Shellscripts des Portland-Projekts basiert.

Die Entwicklungsumgebung

Gambas bietet eine voll ausgestattete IDE, die selbst in Gambas geschrieben wurde.

Sie können Forms kreieren, Controls durch bloßes Ziehen einfügen, Ihren Code editieren und viele andere Dinge machen, wie in anderen RAD-Systemen auch.

Die IDE im Designmodus Die IDE im Debuggingmodus

Die Entwicklungsumgebung von Gambas bietet folgende Eigenschaften:
  • Syntaxhighlighting von Gambascode, HTML- und CSS-Dateien

  • Automatische Vervollständigung

  • GUI-Formeditor

  • Integrierter Debugger

  • Iconeditor

  • Stringtranslator

Der Sourcecode-Editor Der Iconeditor Der Übersetzungsdialog

  • Subversion-Unterstützung

  • Datenbankmanager

  • Onlinedokumentation, die direkt aus dem Dokumentations-Wiki kommt

  • zahlreiche Programmbeispiele

Die ersten drei Tabs aus dem Projekteigenschaften-Dialog

Außerdem können Installationspakete für viele Distributionen sowie tar.gz=-Installationspakete basierend auf den GNU-Autotools erstellt werden.

Die folgenden GNU/Linux-Distributionen werden unterstützt:
  • Debian.

  • Fedora.

  • Mandriva.

  • SuSE.

  • Slackware.

  • Ubuntu.

Die Pakete, die von der IDE erstellt werden, funktionieren nur, wenn die Zieldistribution Gambas korrekt packt, so wie auf der Seite im Wiki How To Package Gambas beschrieben. Dies ist allerdings momentan nicht immer gegeben...

Und schließlich: Selbst wenn die Entwicklungsumgebung stark mit der Gambas-Sprache verlinkt und an sie gebunden ist, müssen Sie sie ja nicht benutzen, um Gambas-Programme zu erstellen!

Nachteile

Damit die Leute nicht denken, dass dieser Artikel zu sehr nach Reklame aussieht :-) , sollten wir erwähnen, dass es noch Nachteile in Gambas gibt.

In der Hauptsache sind dies folgende:
  • Gambas liegt nur als 32-bit-Applikation vor und läuft nativ nicht auf 64-bit-Systemen.

  • Einige Features fehlen noch an der Sprache: Enumerationsdeklaration und Unterstützung von Structures.

  • Die GTK+-Komponente ist noch nicht ganz fertig und somit auch die Unabhängigkeit vom GUI-Toolkit.

Glücklicherweise ist es unser Ziel, diese Probleme bis zur nächsten Version zu lösen.

Die Zukunft

...ist nicht vorhersagbar, besonders nicht die von Gambas.

Dank eines Perlscripts unter Verwendung der Positronic::Variables und Quantum::Superposition=-Module waren wir in der Lage zu schätzen, dass die nächste Version folgendes bietet:
  • 64-bit-Unterstützung

  • DBus-Unterstützung

  • Eine Verschmelzung des Datenbankmanagers mit der Entwicklungsumgebung

  • Ein Reportdesigner in der IDE

  • Unterstützung von QT4 und Cairo

  • Unterstützung von KDE4

  • Eine verbesserte gb.desktop=-Komponente

  • Generierung von OpenOffice-Dokumenten

Gambas ist freie Software. Also anders als bei proprietärer Software kann es sein, dass das, was versprochen wurde, vielleicht nicht rechtzeitig geliefert wird - oder auch gar nicht :-)

Download und weitere Links

Sie können Gambas auf http://gambas.sourceforge.net/download.html herunterladen.

Weitere Informationen über Gambas bieten diese Links: Probleme und Bugs können entweder auf der Mailingliste oder im Bugtracker auf http://gambasrad.org gemeldet werden.

Wir hoffen, dass Sie genauso viel Freude an Gambas haben wie wir! :-)

Benoît Minisini

"Wenn du etwas unternimmst, hast du all die Leute gegen dich, die dasselbe tun, all die Leute, die das Gegenteil tun, und die große Mehrheit der Leute, die gar nichts tun."
  • Konfuzius./

Deutsche Version: Rolf-Werner Eilert

Englisches Originaldokument: /wiki/wiki/doc/release?en