Duales System Delphi
Gerade einmal ein halbes Jahr ist Delphi auf dem Markt - doch das allgegenwärtige Windows 95 erfordert schon jetzt eine Runderneuerung. Auf der jährlichen Entwicklerkonferenz gab Borland Anfang August einen ersten Blick auf eine frühe Betaversion frei.
- Matthias Withopf
Delphi32 alias Delphi für Windows 95 wird in der endgültigen Version voraussichtlich den gleichen Lieferumfang bieten wie der kleine Bruder Delphi 1.0: es wird mit einer integrierten Entwicklungsumgebung, einem Object-Pascal-Compiler (früher Turbo Pascal), der Datenbank-Engine von Paradox und dBase, Links zu verschiedenen großen Datenbankservern samt lokaler Interbase-Engine und einem Reportgenerator reichhaltig ausgestattet sein. Das wirklich Neue ist die durchweg 32bittige Architektur des Systems, das unter Windows 95 und Windows NT läuft und auch Code für beide Betriebssysteme erzeugt. Wer weiterhin für Windows 3.1 entwickeln will oder muß, hat nur die Wahl, neben Delphi32 auch Delphi 1.0 Platz auf der Platte zu gönnen - wobei letzteres bereits mit etwa 80 MByte zu Buche schlägt.
Atemspende
Eine der zentralen Komponenten, der 32bittige Object-Pascal-Compiler, dient dazu, dem visuell erstellten Komponentengerüst Leben einzuhauchen. Borland legt dabei besonderen Wert darauf, daß er echten Maschinencode (‘Native Code’) erzeugt, im Gegensatz zu den Hauptkonkurrenten Visual Basic und PowerBuilder. Dort generiert die Entwicklungsumgebung einen Zwischencode, den eine (recht große) Laufzeit-DLL erst interpretieren muß. Bei der von Borlands Marketingstrategen anvisierten Datenbankklientel ist der zeitlich entscheidende Faktor aber ein ganz anderer: Einer langsamen Festplatte, einem verstopften Netz oder einem schlampig implementierten Server oder ODBC-Treiber hilft auch der schnellste Code im Client nicht auf die Beine. Hier entscheidet also eher die Rafinesse und Stabilität der mitgelieferten Werkzeuge – und dort schnitt Delphi 1.0 nicht besonders ab.
Ganz anders sieht es bei allgemeineren, nicht datenbankbezogenen Programmen, beispielsweise grafischen und multimedialen Anwendungen, aus. Am völlig neuen Compiler arbeitet Borland, wie ein Entwickler auf der Developer Conference etwas verschämt bemerkte, bereits seit 1988. Was so lange währte, wurde aber schließlich so gut, wie ich mir es immer schon gewünscht habe. Während der Compiler von Delphi 1.0 noch auf dem Konzept von Turbo Pascal 4.0 aufbaut, verwendet Delphi32 endlich das optimierende Backend des C++-Compilers aus gleichem Hause. Er hält beispielsweise automatisch Variablen in Registern, um Zugriffe auf den Hauptspeicher zu reduzieren und dadurch die Ablaufgeschwindigkeit eines kompilierten Programms zu erhöhen. Die standardmäßige Aufrufkonvention für Prozeduren und Funktionen nennt sich ‘Fastcall’; hier werden (wenn möglich) Parameter statt über den langsamen Stack ebenfalls in schnellen Prozessorregistern übergeben.
Sonstige Erweiterungen des Compilers umfassen Wide Chars (Unterstützung für NTs 16bittigen Unicode-Zeichensatz), Strings unbegrenzter Länge mit der passenden neuen Stringverwaltung und nützliche Kleinigkeiten wie den Finalization-Abschnitt einer Unit, um die Ressourcenfreigabe zu kontrollieren.
Fehlertolerant
Bei einem syntaktisch fehlerhaften Programm bricht der Compiler nicht mehr beim ersten Fehler ab, sondern bemüht sich, wieder aufzusetzen. Dabei gibt er auch Hinweismeldungen aus, wenn zum Beispiel eine Variable vor der Verwendung nicht initialisiert oder überhaupt nicht benutzt wurde.
Der Speicherkapazität ist jetzt nur noch durch das Betriebssystem Grenzen gesetzt; die Fehlermeldung, ‘Data type too large: exceeds 2GB’ zeigt, in welche Dimensionen Delphi vorstößt. Anders Hejlsberg, Chefentwickler der Pascal-Fraktion bei Borland: ‘Es war noch nie leichter, Speicher zu verschwenden.’
Delphi32 unterstützt schon in der Klassenbibliothek VCL alle neuen Windows-95-Eigenschaften, wie zum Beispiel lange Dateinamen, TreeView- und RichEdit-Controls. Wo die Unterstützung seitens der VCL fehlt, kann man natürlich weiterhin beliebige API-Funktionen aufrufen, die alles, was in Win32 programmierbar ist, auch mit Delphi32 erlauben. Besonders wichtig ist in diesem Zusammenhang die neue, voll reentrante Laufzeitbibliothek, so daß dem Multithreading eigener Programme nichts mehr im Wege steht.
Wer jetzt denkt, all diese Vorteile mit den bei C++ üblichen Compile/Link-Zeiten bezahlen zu müssen, irrt glücklicherweise – Borland gibt ein Maximum von 350 000 übersetzen Zeilen pro Minute an. Wie bisher fällt die Kompilierzeit einer Applikation kaum ins Gewicht. Lediglich das Neuerstellen der gesamten Komponentenbibliothek kann schon einmal mehr als eine Minute in Anspruch nehmen.
Auch der integrierte Linker hat Verbesserungen erfahren. Er soll jetzt bei gesteigerter Geschwindigkeit angeblich auch unbenutzte virtuelle Methoden eliminieren, was ich aber nur schwer nachvollziehen kann. Dieses Feature wäre besonders bei intensiver Nutzung der Delphi-Klassenbibliothek VCL wichtig, um alle überschriebenen und nicht verwendeten Methoden beim Linken wegzulassen.
Es ist also wirklich an der Zeit, mit so manchem Vorurteil aufräumen: bis auf die Verbreitung steht das neue Pascal Sprachen wie C++ in kaum etwas nach. ‘Object Pascal’ ist ebensowenig Pascal wie C++ C ist. Das berühmte Zitat von Dennis Ritchie, ‘Miterfinder’ der Sprache C, trifft auch für Delphi zu: ‘Some languages are designed to solve a problem; others are designed to prove a point.’ Delphi32 erweitert Object Pascal nicht um am grünen Tisch entworfene Konzepte, die höchstens Compilerbauerherzen höher schlagen lassen. Borland hat es statt dessen nur dahingehend erweitert, daß die Programmierprobleme für Microsofts Betriebssystempalette möglichst einfach zu lösen sind. Beispielsweise dient der neue Typ ‘Variant’ speziell dem Umgang mit OLE2-Objekten und OLE2-Automation, und dabei vor allem der Parameterübergabe an OCX-Controls. Bei deren Registrierung erzeugt Delphi32 (wie bis dato für VBXe) automatisch eine Interface-Unit, die eine komplette Klassendefinition für das Control enthält. Dadurch kann Delphi32 OCXe direkt in die Klassenhierarchie integrieren und auch vererben. Methoden von OLE-Objekten können direkt in Object Pascal aufgerufen werden, da es auch das notwendige Late Binding transparent unterstützt. Ein-OCX-Aufruf ist also nicht aufwendiger als der Aufruf einer Methode einer ‘normalen’ Delphi-Klasse. Mit der auf der Konferenz gezeigten Betaversion war es jedoch noch nicht möglich, OCXe im Delphi-Stil zu schreiben, wohl aber mit direkten API-Aufrufen. Die gute Unterstützung für OLE2 zeigt deutlich die Ausrichtung auf die Windows-Plattformen (wohl nicht ganz ohne Zwang), und damit die Abhängigkeit vom Hauptkonkurrenten Microsoft.
Aber auch für diejenigen, die sich mit OLE noch nicht anfreunden konnten, bietet der neue Variant-Typ etwas ganz Besonderes. Er macht es endlich möglich, eine Funktion beispielsweise als
Function Sum(A : Array of Variant) : Extended;
zu definieren und später etwa mit
Sum([1,'2',3.0])
aufzurufen. Dadurch sind jetzt polymorphe Funktionen möglich, die die Parameteranzahl und -typen erst zur Laufzeit auswerten.
Eine ebenso willkommene Errungenschaft von Delphi32 ist die Möglichkeit, aus Units an Stelle des Borland-eigenen DCU-Formats standardisierte OBJ-Dateien erzeugen zu können. Es sollte so möglich sein, in Object Pascal geschriebene Funktionen aus anderen Programmiersprachen heraus zu verwenden. Leider benutzt Delphi32 nicht das neuerdings übliche COFF-Format, sondern eine Erweiterung des alten ‘OMF’. Außerdem verstehe ich nicht ganz, woher der Linker später die benötigten Routinen aus der Pascal-Runtime-Library nehmen soll – vor allem in Anbetracht des gegenüber C++ gänzlich unterschiedlichen Objektmodells sind hier noch einige Kopfschmerzen in gemischtsprachigen Projekten zu erwarten.
Borland behauptet, Delphi32 sei voll abwärtskompatibel, soweit dies durch die neue Betriebssystemarchitektur möglich ist; angeblich reicht die Neukompilierung, um bestehende Programme ‘nach 32 Bit’ zu portieren. Für Programme, die hauptsächlich Delphis Standardkomponenten verwenden, mag es durchaus zutreffen (Borland nennt dies ‘Zwei-Klick-Portabilität’: Open and Run). Für diejenigen, die ‘richtig programmiert’ haben, wage ich diese Prognose zu bezweifeln. Nicht nur das neue Win32-API ist dabei zu berücksichtigen, sondern auch die Änderungen am Compiler und an der Klassenbibliothek. War es bei der Vorgängerversion noch gangbar, bestehende OWL-Programme (für Borland Pascal 7.0) zu kompilieren und schrittweise an Delphis VCL anzupassen, so besteht diese Möglichkeit jetzt nicht mehr: schließlich fehlt eine 32bittige OWL-Version für Pascal. Ehrenhalber sei hier angemerkt, daß es auch kaum Sinn machen würde, zwei zueinander inkompatible Klassenbibliotheken zu pflegen, vor allem, da die OWL der VCL weit unterlegen ist. Für eine erfolgreiche Portierung müssen weiterhin alle benötigten DLLs als 32-Bit-Version vorliegen, sonst braucht man gar nicht erst anzufangen. VBXe unterstützt das neue Delphi (wie fast alle anderen 32-Bit-Plattformen) ebenfalls nicht. Programmierer begeben sich so in eine starke Abhängigkeit von Komponentenherstellern, die ebenfalls mitziehen und zwei Versionen ihrer Controls (16- und 32-Bit-OCX) anbieten müssen (auch das gilt gleichermaßen für die C++-Gemeinde). Außerdem bleiben einige der neuen Sprachfeatures der 16-Bit-Version von Delphi vorenthalten, so daß bei der Implementierung portabler Komponenten schon im voraus Vorsicht geboten ist.
In der Realität kann man wohl von den gleichen Schwierigkeiten ausgehen, die bei dem plattformunabhängigen Schreiben und Portieren von C-Programmen auftreten. Auch hier hat sich die Größe des Integer-Typs jetzt mit den neuen Betriebssystemen auf 32 Bit verdoppelt, was bedeutet, daß sich die Größe vieler Record-Typen ändert und damit beispielsweise anwendungsspezifische Binärdateien nicht mehr ohne Handarbeit am Code gelesen werden können.
Alle, die ohne visuelles Verknüpfen von Komponenten und Datenbankanbindungen auskommen, können Delphi32 als das jüngste Kapitel in der nun 12jährigen Geschichte von Turbo Pascal ansehen. Es ist weiterhin ein Entwicklungssystem, mit dem man in gewohnt schneller und einfacher Manier jede Art von Programm entwickeln kann. Mit EXE-Größen ab etwa 10 KByte für Kommandozeilen-Programme und den zu bedienenden Plattformen DOS (als 32-Bit-DOS-Programm mit Borlands eigenem Extender, der dem Paket beiliegt), Win32s, Windows 95 und Windows NT dürfte für jeden etwas dabei sein. Auch schätze ich die Tatsache, bei der Weitergabe von Delphi32-Programmen nicht mehrere Disketten allein für die Laufzeit-DLLs zu benötigen …
Nach so vielen Betrachtungen zu Komponenten muß ich noch lobend erwähnen, daß Delphi32 selbst modular aufgebaut ist. Die Entwicklungsumgebung bildet das Dach für den Editor (durch seine 32-Bit-Architektur bei großen Dateien wesentlich schneller als beispielsweise der von BC++ 4.5), den internen Debugger, den Object Inspector, (nachrüstbare) Experten und so weiter. Für Updates und Erweiterungen scheint es also machbar, zum Beispiel nur die Compiler-DLL auszutauschen, anstatt ein neues Komplettsystem installieren zu müssen.
Auch an der Datenbankfront hat Delphi32 dazugelernt. Neben dem als Debug-Hilfe dienenden SQL-Monitor erlaubt der ‘Database Explorer’ schon aus der IDE die Durchsicht der vorhandenen Datenbanken, so daß der regelmäßige Wechsel zwischen Delphi und dem Database Desktop entfällt.
Borland hat es geschafft, die immer komplexer werdenden Anforderungen an Applikationsentwickler so zu vereinfachen, daß ihnen so mancher Frust erspart bleibt. Positiv ist weiterhin, daß auch mit dem echten Compiler ein Arbeiten wie mit einem Interpreter möglich ist.
Auch wenn nicht gleich jeder Programmierer Datenbank-Frontends entwickelt: Marktanalysen sagen gigantische Umsätze für visuelle Datenbank-Tools voraus. Borland hat bis jetzt circa 125 000 Delphi-Pakete verkauft, davon aber nur etwa drei Prozent Client/Server-Versionen. Gary Wetsel: ‘[Borland] is continuing to win technical awards and reviews’ – hoffentlich reicht das für einen dauerhaften Markterfolg, im Interesse von Delphi und Borland …
Borland Developer Conference 95
Christian Hartnick
Borlands Konzentration auf den Stammarkt der Entwickler trägt nicht nur in den neuesten positiven Quartalsergebnissen Früchte, sondern auch beim Konferenz-namen: Die ‘Borland International Conference’ besinnt sich zur ‘Borland Developer Conference’ zurück.
Allen Unkenrufen und Übernahmegerüchten zum Trotz präsentierte sich Borland als unabhängige und wieder aufstrebende Firma, die gestärkt aus den internen Umstrukturierungsmaßnahmen (die man auch als Aderlaß bezeichnen könnte) hervorgegangen ist. So war auf der Konferenz nur wenig von Borlands Sorgen zu spüren. Die Stimmung war euphorisch wie immer, wenn auch Delphi diesmal dBASE als Gassenhauer das Wasser abgegraben hat. So war der Jubel groß, wenn ‘David I’ oder ein anderer Borland-Aktivist Delphi wieder einmal zum Nonplusultra unter den RAD-(Rapid Application Development)Entwicklungswerkzeugen stempelte. David I (David Intersimone, Director Borland Developer Relations und eine der treibenden Kräfte hinter dem ‘Borland Spirit’) brachte dann auch in der Opening Keynote die Zukunft Borlands auf den Punkt: 32 Bit, Components und Distributed Computing.
Objekte, Objekte ..
Dementsprechend sollen alle Borland-Produkte bis zum Jahresende als Windows-95-Version auf dem Markt sein. Einzig Visual dBASE ist erst einmal als 16-Bit-Variante mit Windows-95-Unterstützung entstanden – angeblich wollten das die Entwickler so. Da sich Borland an die Restriktionen des Windows-95-Logo-Programms hält, werden alle Produkte auch Windows NT 3.51 unterstützen. Im Bereich ‘Components’ stürzt sich die Firma aus Scotts Valley neben den eigenen Lösungen zunächst ganz auf OLE 2.0 und OCXe. Später sollen dann CORBA (Common Object Request Broker Architecture – gemeinsame Architektur zur Vermittlung von Objektanforderungen, zum Beispiel OpenDoc) in die Produkte einfließen. CORBA ist ein Konzept für verteilte Anwendungen (Distributed Computing), welches Objekte systemunabhängig definiert und netzwerkweit miteinander in Interaktion setzt. Als ersten Schritt in diese Richtung zeigte David I die Sprache Java von Sun Microsystems, welche einen Teil des Programmcodes für WWW-Seiten auch auf der Clientseite ausführt.
Peinlich
Da sich die Beziehungen zu Microsoft nach Borlands Rückzug aus dem Desktop-Markt normalisiert haben, durfte Doug Henrich (Director of Development Relations bei Microsoft) als erster Fremdredner dem versammelten Auditorium Windows 95 anpreisen. Als Einstieg mußte Doom for Windows 95 die Leistungsfähigkeit des neuen Systems unter Beweis stellen. Mittels PCMCIA-CD-ROM automatisch gestartet, überzeugte das Spiel durch atemberaubende Geschwindigkeit – und Doug durch einen schnellen Tod im Spiel. Der war auch Windows 95 beschert, denn nach dieser Vorstellung funktionierte nichts mehr: Weder Powerpoint noch andere Demos ließen sich trotz Windows-Neustart aufrufen.
Die von Gary Wetsel (Borland CEO und Präsident) eingeleitete Umorientierung zu den Ursprüngen der Firma trägt also erste Früchte: Borland geht wieder dazu über, neue innovative Technologien auf dem Markt zu plazieren. Daß die Firma damit auf dem richtigen Weg ist, merkte man an der Stimmung der Konferenzteilnehmer, die sich wieder in ihrem Bor-Land heimisch fühlten.
(it)