Code komplett

Linux ist für den Server gut und schön, aber auf dem Desktop kann es mangels Anwendungen mit Mac OS und Windows nicht konkurrieren. Das könnte sich ändern, wenn Entwickler Gefallen an Borlands Kylix finden.

In Pocket speichern vorlesen Druckansicht 54 Kommentare lesen
Lesezeit: 11 Min.
Von
  • Christian Kirsch
Inhaltsverzeichnis

Windows-Entwickler können sich vermutlich kaum noch erinnern, was ein Editor ist und wie man einen Compiler von der Kommandozeile aus startet. Integrierte Entwicklungsumgebungen (IDE, Integrated Development Environment) sind längst die dominierenden Werkzeuge. Trotz der Vorrangstellung von Microsoft hat Borlands Delphi eine große Anhängerschar, vor allem wenn es um die Erstellung von Client/Server-Anwendungen geht.

Was unter Windows trotz Microsoft funktioniert, sollte unter Linux ohne den Konkurrenten noch besser klappen, dachten sich vermutlich Borlands Manager und beschlossen, Delphi auf das freie Betriebssystem zu portieren. Seit Mitte März liegt die IDE mit dem Namen Kylix nun vor. Im Test lief sie auf einem 700-MHz-Athlon mit 256 MByte RAM unter RedHat 6.2 und auf einem Laptop mit einem Mobile Pentium II, 128 MByte RAM und SuSE 7.1.

Delphi-Kenner dürften sich in Kylix schnell zurechtfinden, eingefleischte Linux-Entwickler stehen aber vor einer weitgehend neuen Welt. Das fängt schon bei der Programmiersprache an: Nicht C, C++ oder Java ist zu benutzen, sondern das gute alte Pascal. Zumindest sieht es an der Oberfläche so aus, unter der Haube hat sich dann doch allerhand getan. So schreiben sich Programme in Borlands ObjectPascal nicht grundsätzlich anders als in sonstigen objektorientierten Sprachen, hat man sich erstmal an die reichhaltig einzustreuenden begins und ends gewöhnt. Wem das nicht deutlich genug ist, der darf auch BEGIN und END schreiben, sogar BeGIn akzeptiert der Compiler klaglos. Offenbar unterscheidet ObjectPascal bei Schlüsselwörtern, Variablen und Compileranweisungen nicht zwischen Groß- und Kleinschreibung. Eine irritierende Freizügigkeit der im Übrigen strengen Sprache.

Üblicherweise gehört zum IDE-Test in iX das Erstellen eines Taschenrechners - das gelingt mit jedem Produkt und ermöglicht dadurch Vergleichbarkeit. Ein Entwicklungswerkzeug, dessen preiswerteste Variante über 1000 [Euro] kostet, ist mit dieser Art Spielzeug aber deutlich unterfordert. Deshalb musste sich Kylix im Test an einer Aufgabe bewähren, die eher typisch für den Einsatz im Unternehmen ist: Zu programmieren war eine Schnittstelle für die hauseigene Artikeldatenbank, die zumindest einfache Abfragen und Detailanzeigen ermöglichen sollte.

Programmieren mit Kylix hat wenig mit dem zu tun, was sonst unter Linux üblich ist. Statt Klassen, Methoden und Attribute in die Tastatur zu hämmern, wählt die Entwicklerin Komponenten in der Toolbar aus und platziert sie mittels Mausklick in der Oberfläche ihres Programms. Die Reaktion auf Benutzereingaben, externe Ereignisse und so weiter kommt von selbst geschriebenen Routinen (Eventhandler), die ein Eintrag im ObjectInspector mit dem jeweiligen Event verbindet.

Um beispielsweise einen Dialog erscheinen zu lassen, wenn der Anwender in einem Textfeld die Maustaste drückt, reichen vier Zeilen:

procedure show_dialog (Sender: TObject) 
begin
Dialog1.show();
end;

Den größten Teil davon erzeugt Kylix selbsttätig, trägt man den Namen der Routine in das ‘OnClick’-Feld des ObjectInspectors ein. Popup-Menüs behandelt Kylix intern - hier reicht es, dem ‘Popup’-Attribut eines Textfelds den Namen des Menüs zuzuweisen. Anschließend erscheint es automatisch, sobald der Anwender über dem Feld die rechte Maustaste betätigt.

Wer während der Arbeit mit der IDE ps ux oder top aufruft, bekommt nicht nur einige Kylix-Threads zu sehen und erfährt dabei, dass das Programm knapp 120 MByte Speicherplatz belegt. Zu erkennen ist auch, dass ein wineserver läuft. Borland hat nämlich sein Programm nur teilweise für Linux neu geschrieben, der Rest benutzt weiterhin Windows-Funktionen, die wineserver bereitstellt. Befürchtungen, mit Kylix geschriebene Programme würden ebenfalls Wine erfordern, sind jedoch unbegründet. Die Applikationen enthalten 100 % Linux-Code, als einzige Laufzeitbibliothek ist <kylix>/bin/libqtintf.so erforderlich. Darin sind die von Kylix benötigten Qt-Funktionen enthalten. Prinzipiell sollte es zwar möglich sein, statt der von Borland gelieferten Version eine bereits installierte Qt-Bibliothek zu benutzen, der Versuch scheiterte jedoch an einem nicht definierten Symbol.

Zur Erstellung von Datenbankanwendungen eignen sich beide kommerzielle Versionen von Kylix (siehe Kasten ‘Produkte’). Im Server Developer sind Anbindungen von vier Datenbanken enthalten, für den Test kam MySQL zum Einsatz. Laut Dokumentation hat Borland die IDE mit MySQL 3.22.32 getestet. Tatsächlich ist es allerdings weitgehend gleichgültig, welche Serverversion zum Einsatz kommt - entscheidend ist die Client-Bibliothek (libmysqlclient.so.x.0.0). Die Versionen 6, 7 und 8 lassen sich mit Kylix verwenden, ab Nummer 9 kommt es zu Fehlern. Borland hat angekündigt, bald einen aktualisierten Treiber bereit zu stellen, der mit der aktuellen MySQL-Version 3.23.x funktioniert.

Mehr Infos

Produkte

Borland bietet Kylix in drei Varianten an: Server Developer, Desktop Developer und Open Edition. Die ersten sind kostenpflichtig und unterscheiden sich vor allem in der Datenbankunterstützung: Server Developer gestattet die Benutzung von DB2, Oracle, Interbase und MySQL, während Desktop Developer nur Treiber für die beiden letztgenannten Datenbanken enthält. Mit der Open Edition erstellte Software muss unter einer freien Lizenz stehen, bei den beiden anderen Produkten ist der Hersteller frei in der Wahl seiner Nutzungsbedingungen. Open Edition soll Mitte des Jahres verfügbar sein und wird vermutlich einen geringeren Funktionsumfang haben als die beiden Kaufprodukte. Für die Desktop-Variante sind 1106 EUR fällig, die Serverversion kostet rund doppelt soviel - jeweils zuzüglich Mehrwertsteuer.

Um den Anfang zu erleichtern, sollte man in ~/.borland/dbxdrivers und ~/.borland/dbxconnections die korrekten Werte für den MySQL-Server und den Benutzer, die Datenbank und die Version der Client-Bibliothek eintragen. Diese Werte übernimmt die IDE als Voreinstellungen für eine Datenbankverbindung. Sie lassen sich zwar ändern, das ist aber auf Dauer mühsam. Neben einem Objekt vom Typ TSQLConnection, das die Verbindung zur Datenbank herstellt, sind je nach Aufgabenstellung TSQLClientDataSet-, TClientDataSet- oder TDataSetProvider-Objekte erforderlich. Diese Klassen unterscheiden sich aus Sicht der Programmiererin vor allem darin, ob sie Daten ausschließlich zum Lesen (‘unidirektional’) oder zum Lesen und Schreiben bereitstellen. Diese strikte Trennung existiert jedoch nur innerhalb der Kylix-Welt: Wer sich mit SQL auskennt, kann durchaus Datensätze mit einem unidirektionalen Objekt ändern. In der Regel sollen aber bidirektionale Klassen dem Entwickler das mühsame Zusammenbasteln von Update- und Insert-Befehlen abnehmen.

Eine Read-Only-Version der iX-Artikeldatenbank war mit Kylix innerhalb von drei Tagen erstellt. Die Farben in der Spalte ‘Arbeitstitel’ ändern sich gelegentlich unabhängig vom Programmcode (Abb. 1).

Das Testprojekt beschränkte sich auf das Abfragen von Datensätzen via Select und deren Anzeige. Letzteres übernahm eine TDBGrid-Komponente, die ausgewählte Felder in einer Tabelle anzeigt (siehe Abbildung 1). Das Zusammenklicken der Oberfläche und die Auswahl der Datenbankfelder waren zügig erledigt. Etwas Blättern in der Online-Hilfe erlaubte sogar die Benutzung von Auswahlfeldern, die mit dem Inhalt einer anderen Tabelle gefüllt waren. Um Artikel nach Ausgabe oder Redakteur auszuwählen, änderten die Eventhandler jeweils die ‘WHERE’-Klausel des SQL-Statements. Statt dessen kann man in Kylix Filter definieren, die die gewünschten Daten aus einem TClientDataSet heraussuchen. In der Kürze der Zeit waren die Details dieser Funktion jedoch nicht zu erkunden.

Etwas zäher verliefen dann die Fehlersuche und -beseitigung. So zeigte das TBGrid-Objekt zunächst statt der Titel und Arbeitstitel jeweils nur (VARBYTE) an - keine hilfreiche Information. Zwar behauptet die Online-Dokumentation, Kylix wandle VARBYTE automatisch in normale Zeichenketten, aber zumindest mit MySQL klappte das nicht. Ein selbst geschriebener OnGetText-Eventhandler für jedes der betreffenden Textfelder erledigte die erforderliche Konvertierung in einer Zeile.

Etwas aufwendiger verlief die Behebung eines anderen Fehlers: Anfänglich erschien der Umfang jedes Artikels nur als ganze Zahl; für halbseitige Texte etwa zeigte die Oberfläche null Seiten an. Experimente mit dem Anzeigeformat brachten keinen Erfolg, erst eine Änderung der Umgebungsvariablen LC_ALL zu ‘en_US’ sorgte dafür, dass zweieinhalb Seiten als ‘2.50’ zu sehen waren. Hier klemmt es also offensichtlich noch bei der Locale-Implementierung - ähnlich wie beim Hilfesystem, das nur in einem US-Locale korrektes PostScript für den Druck erzeugt.

Trotz dieser Stolpersteine war die Datenbankoberfläche schnell erstellt: Innerhalb von drei Tagen stand der größte Teil der Abfragefunktionen zur Verfügung. Das ist nicht nur deutlich weniger Zeit als für die Webversion des Werkzeugs nötig war, die Kylix-Variante ist zudem komfortabler und reagiert schneller. Allerdings dürfte der Einsatz auf verschiedenen Rechnern mit mehr Administrationsaufwand verbunden sein: Für Windows-Maschinen ist eine neue Übersetzung erforderlich, und vermutlich müssen dort auch andere Parameter für die Datenbankverbindung benutzt werden. Noch ist der plattformübergreifende Einsatz von Kylix ohnehin Zukunftsmusik: Erst Delphi 6 soll Kylix-Code auf Windows übersetzen können.

Neben den üblichen Komponenten zum Erstellen eines GUI (Knöpfe, Textfelder, Beschriftungen und so weiter) gibt es für die Oberflächengestaltung komplexere Objekte, etwa Baumsichten, Dialoge mit Reitern et cetera. Deren Größe muss man in Pixeln angeben, was das Erstellen bildschirmunabhängiger Applikationen erschwert. Hier wären relative Maße oder Angaben in Vielfachen der Zeichengröße sinnvoller. Immerhin lassen sich die einzelnen GUI-Elemente an verschiedenen Seiten der übergeordneten Objekte verankern, so dass sich ihre Position oder ihre Größe anpassen, wenn der Anwender die Fenstergröße ändert.

Bei der Erstellung von Software für den Einsatz in Unternehmen ist die Datenbankanbindung nicht der einzige wichtige Aspekt. Relevant sind heute ebenso Netzwerkkomponenten. Borland legt davon eine reichhaltige Auswahl bei, die den Einsatz von FTP, HTTP, NNTP und anderen Protokollen sowohl in Servern als auch in Clients erlauben.

Der Heise-Newsticker in einem TTextBrowser-Objekt. Ohne weitere Programmierung funktioniert das Klicken auf Links nicht (Abb. 2).

Im Test kam davon nur der HTTP-Client zum Einsatz. Laut Dokumentation könnte oder sollte HTTPS ebenfalls möglich sein, die Details ließ der Text aber offen. Jedenfalls lieferte der Aufruf der Methoden Get und ReadStream an einem TIdHTTP-Objekt das Gewünschte: Die Daten standen in einem TMemoryStream zur Verfügung. Diesen konnte ein TTextBrowser mit LoadFromStream lesen und anzeigen (siehe Abbildung 2).

Einen vollwertigen Browserersatz kann man sich von dieser Komponente jedoch nicht erwarten: Bilder ersetzt sie durch einfarbige Rechtecke, und der Klick auf einen Link lädt nicht das referenzierte Dokument. Hier wären eigene Event-Handler nötig - TTextBrowser scheint jedoch keine speziellen Events auszulösen, wenn ein Link angeklickt wird.

Wer statt der klassischen Client/Server-Applikationen lieber Webanwendungen erstellt, kann dies ebenfalls mit Kylix erledigen. In Verbindung mit dem Apache lassen sich fertige Programme als CGI-Applikationen benutzen (und das sollte genauso mit jedem anderen Webserver funktionieren). Als besondere Referenz an den meistbenutzten HTTP-Daemon bietet Borland zudem die Möglichkeit, Kylix-Anwendungen als Apache-Module zu installieren und gegenüber CGI Geschwindigkeit zu gewinnen.

Zur Erzeugung von HTML-Code auf Serverseite sind einige Komponenten vorgesehen, unter anderem zum Umsetzen von Datenbankabfragen in HTML-Tabellen. Dadurch sollen auch Entwickler, die sich bisher nicht mit HTML beschäftigt haben, schnell Webseiten erstellen können. Ob dieses Verfahren Vorteile gegenüber den unter Linux verbreiteten Skriptsprachen hat, muss jeder selbst ausprobieren. Die in ObjectPascal selbst fehlenden regulären Ausdrücke sollten jedenfalls keinen Perl-Anhänger abhalten: Das Modul libc.pas enthält Pascal-Anbindungen zahlreicher Linux-Funktionen, einschließlich der für reguläre Ausdrücke zuständigen.

Komponenten, Editor, (Klassen-)Browser - all das reicht nicht, um eine lauffähige Applikation zu basteln. Auch die beste IDE verhindert keine Programmierfehler. Um sie zu beseitigen, ist ein Debugger gefragt. Der von Kylix tut alles, was man von einem solchen Werkzeug erwartet. Allerdings empfiehlt es sich, in den Projekteinstellungen das Übersetzen mit den ‘Debug-DCUs’ einzustellen, um Abstürze innerhalb der Kylix-eigenen Bibliotheken zurückverfolgen zu können. Solche Fehler sind nicht etwa auf Mängel in diesen Bibliotheken zurückzuführen, sondern können unter anderem durch irrtümlich freigegebene Zeiger ausgelöst werden.

Alles in allem ist diese IDE für eine 1.0er-Version erstaunlich stabil und komplett. Kleinere Mängel in der Online-Dokumentation und bei einzelnen Komponenten (vor allem der Anbindung von MySQL) sollte Borland möglichst vor der nächsten Release ausbügeln.

Mehr Infos

iX-TRACT

  • Kylix 1.0 ist eine integrierte Entwicklungsumgebung für Linux. Als Programmiersprache benutzt sie ObjectPascal.
  • Die beiden professionellen Varianten enthalten Treiber für gängige Datenbanken, sodass sich mit ihnen komplette Client/Server-Anwendungen entwickeln lassen.
  • Web-Komponenten erlauben die Erstellung von CGI-Anwendungen und Apache-Modulen.
Mehr Infos

iX-WERTUNG

[+] komplette Entwicklungsumgebung
[+] Datenbank- und Netzwerk-komponenten
[+] MySQL-Anbindung
[+] robuste Codegenerierung
[-] Fehler bei der Locale-Umsetzung
[-] Online-Hilfe schwer zu bedienen

(ck)