
Tcl/Tk galt jahrelang als gut gehütetes Geheimnis der Entwickler für die schnelle Entwicklung plattformübergreifender Anwendungen. John Ousterhoot entwickelte die Sprache ursprünglich an der Universität von Berkeley, später setzte Suns Scripting Division die Arbeit fort. Seit Februar dieses Jahres kümmert sich die Firma Scriptics darum, die etwa die Hälfte der Mannschaft von Sun übernahm. Die Sprache selber soll weiterhin kostenfrei bleiben, Scriptics will sich mit Schulung und Verkauf einer Entwicklungsumgebung finanzieren.
Verbreiteten Vorurteilen, Skripts seien zu langsam oder es gebe nicht genügend Methoden zum Strukturieren des Quellcodes, entzog die Entwicklung im Lauf der Zeit den Boden. Mit der Grundausstattung der aktuellen Version 8.0p2 nicht lösbare Aufgaben bewältigen inzwischen dynamisch ladbare Erweiterungen. Dabei verfügt Tcl mit Tk im Gegensatz zur Modesprache Java über eine ausgereifte Widget-Bibliothek, die sich kaum noch ändert.
Die Sprache ist auch im Netz einsetzbar, wobei vier Aufgabenbereiche gleichermaßen vorkommen: CGI-Skripts, Server, Browser und Plug-ins. Eine Zusammenfassung der Tcl-Anwendungen im Netz gibt Steve Ball (http://tcltk.anu.edu.au) der unter anderem einen komplett in Tcl/Tk implementierten Browser und einen XML-Parser vorstellt.
Serverseitig offeriert Neosoft schon seit längerem eine Einbindung von Tcl in den Apache, bei Sun gibt es eine reine Tcl-Lösung. Dieser frei verfügbare TclHttpd liegt inzwischen in der Version 2.1 vor. Er läuft mit Tcl-Interpretern ab Version 7.6 auf Unix, Macintosh und Windows. Neben den üblichen Leistungen eines HTTP-Daemon wie Basic Authentification, SSI (Server Side Includes) und CGI-Unterstützung hat er einige reizvolle Besonderheiten zu bieten:
Suns Archiv enthält das Startskript, einige Bibliotheken und Beispiele, die die Möglichkeiten des Servers demonstrieren. Das Programm ist sofort benutzbar und zeigt auf Port 8015 die mitgelieferten Beispiele. Für einen ernsthaften Einsatz unter Unix sollte allerdings noch die mitgelieferte setuid-Bibliothek kompiliert werden.
Besonders attraktiv ist die Fähigkeit des TclHttpd, Tcl-Skripts innerhalb von HTML-Seiten auszuwerten, von Sun Template genannt. Hierbei führt er eingebettete Skripts bei der Auslieferung an den Empfänger aus, ähnlich wie PHP/FI. Gegenüber CGI-Skripts hat das den Vorteil, daß keine externen Prozesse nötig sind, außerdem stehen globale Variablen des Servers zur Verfügung.
Ein Beispiel für ein einfaches Template enthält Listing 1, die fertige HTML-Seite ist in Listing 2 zu sehen. Das Skript erzeugt den üblichen HTML-Kopf, trägt einige Variablen aus dem globalen Zähler für die Zugriffsstatistik ein und zeigt Datum samt Uhrzeit an. Im Server stehen Variablen über ihn selber, Zugriffszähler sowie Informationen über die Zugriffsart zur Verfügung. Des weiteren sind globale und lokale Variablen definierbar; Tcl-Skripts können an verschiedenen Stellen des Dokuments auftreten. Für Templates gibt es eine Bibliothek zur Erledigung von Standardaufgaben, etwa die Erzeugung eines HTML-Kopfes. Mit einer eigenen Template-Bibliothek kann man mit wenig Aufwand ein einheitliches Layout für alle Seiten erzeugen und an einer zentralen Stelle verwalten. Neben der allgemein verwendbaren Template-Bibliothek liegen eine weitere zum Formatieren von FAQs und die Templates vom Sunscript-Server vor.
Für fast jede Datenbank gibt es eine Tcl-Anbindung; für freie Produkte wie PostgreSQL oder MySQL genauso wie für Adabas, Oracle, Sybase und ODBC. Mit dem TclHttpd sind damit innerhalb von HTML-Dokumenten SQL-Abfragen möglich, deren Ergebnis der Server in die fertige Seite einbettet. Dabei muß im Gegensatz zu den kurzlebigen CGI-Skripts nicht jedesmal eine Verbindung mit der Datenbank geöffnet und geschlossen werden: Der Server braucht sich nur einmal beim Starten anzumelden und kann danach immer wieder dieselbe Datenbankverbindung benutzen.
Ein Beispiel für eine solche Anwendung ist der Diplom- und Studienarbeitsserver (http://experte.kt2.tu-harburg.de:8015/Studi) der TU Hamburg-Harburg. Er dient als zentrale Datenbank, die Mitarbeitern die Veröffentlichung von Angeboten und Studenten eine schnelle Übersicht ermöglicht. Anhand des Dateinamens stellt das Template fest, um welches Fach es geht und gibt die passenden Überschriften und Titel aus. Dann findet eine Datenbankabfrage statt, deren formatiertes Ergebnis in der fertigen Seite landet. Der Quelltext der Templates steht auf dem Server zur Verfügung.
Es ist auf stärker besuchten Servern recht unwirtschaftlich, bei jedem Zugriff Seiten neu aufzubauen, deren Inhalt sich relativ selten ändert. Hier greift ein weiterer Mechanismus des TclHttpd: Soll er eine Datei mit der Endung .html ausliefern, zu der ein Template existiert, erzeugt er sie aus diesem und schreibt sie auf die Platte. Dies jedoch nur, wenn das Template jünger ist oder die .html-Datei noch nicht existiert. Weitere Zugriffe auf letztere führen also nicht mehr zum Interpretieren des Templates mit dem eventuell dazugehörenden Overhead wie Datenbankabfragen. Will man die HTML-Seiten mit der Datenbank synchronisieren, reicht es, diese zu löschen oder ein touch auf die Templates auszuführen. Beim nächsten Zugriff werden sie dann mit dem aktuellen Stand erzeugt. Beim Studienarbeitsserver kümmert sich das Template für den Datenbankeintrag darum, so daß alle Seiten immer den aktuellen Stand zeigen. Ebenso ließen sich Triggermechanismen der Datenbank oder ein regelmäßiger cron-Job dazu verwenden.
Wie CGI-Skripts kann man Templates eine Anfrage übergeben. Damit lassen sich Eintragungen und Queries innerhalb von Templates realisieren. Im Gegensatz zu CGI sind Fehler dort leicht zu finden, denn die komplette Fehlermeldung des Interpreters ist vom Browser aus abfragbar. Während bei den Templates der Server noch auf eine Datei zugreift, sind auch rein virtuelle Dateisysteme nutzbar. So haben beispielsweise die Seiten für die Serverstatistik keine Entsprechung im Dateisystem, werden aber beim Zugriff auf das /stats-Verzeichnis erzeugt. Diese virtuellen Seiten sind in der Statistikbibliothek implementiert, eigene lassen sich leicht erzeugen. Dies ist besonders für eingebettete Systeme interessant, da kein Festplattenplatz zur Verfügung stehen muß. ohne Neustart einbauen
Da die Quellen des Daemon gut strukturiert und verständlich sind, sind schnell weitere Methoden implementierbar. Ein Beispiel ist die Erweiterung der Serverstatistik auf dem erwähnten Studienarbeitsserver: Hier gab es den Wunsch, Zugriffe nach Domänen und Browser getrennt auswerten zu können. 20 Zeilen in der Statistikroutine (http://experte.kt2.tu-harburg.de:8015/Rechner.tml) erzeugen eine zusätzliche globale Variable, die die benötigten Informationen enthält. Änderungen am Server lassen sich während der Laufzeit hinzuladen, so daß kein Neustart nötig ist.
Wegen seiner vielen Fähigkeiten bietet sich TclHttpd zur Präsentation von Daten aus externen Quellen im Netz an, außerdem dient er als Frontend zum Konfigurieren diverser Hard- und Software, unter Win95 und NT ist sogar der Zugriff auf die Registry möglich, und tcl-nt ermöglicht die klickfreie Administration von NT.
Neben der integrierten Lösung mit dem TclHttpd kann man in Tcl traditionelle CGI-Skripts schreiben. Das Äquivalent zur Perl-CGI-Bibliothek stammt von Don Libes; es enthält zahlreiche Funktionen zum Erstellen von HTML und sogar zum Überprüfen von Kreditkartennummern.
Clients können Tcl/Tk ebenfalls einsetzen: HTML-Dokumente mit eingebetteten Tcl-Skripts (Tclets) führt ein Tcl-Plug-in (http://sunscript.sun.com/plugin) aus. Es steht in der Version 2.0 zur Verfügung, jedoch nur in Varianten für Solaris (SPARC und Intel), Linux/Intel und Windows 32. Da anders als bei der Vorgängerversion diesmal die Quellen erhältlich sind, ist es aber auf andere Plattformen portierbar.
Fast alle Funktionen des Tcl-Interpreters sind im Plug-in realisiert. In der Grundeinstellung kann es jedoch nicht auf beliebige Bereiche des Client-Systems zugreifen, nur Netzverbindungen mit seinem Herkunfts-Host herstellen und keine Toplevel-Widgets erzeugen. Damit sind Oberflächen eines Plug-ins leicht von Anwendungen des eigenen Rechners unterscheidbar. Zusätzlich zu reinen Tcl/Tk-Befehlen kann das Plug-in JavaScript an den Browser zur Ausführung weiterreichen und EMails verschicken.
Programme für das Plug-in sind oft Oberflächen oder interaktive Grafikanwendungen. Bei ersteren stellt das Tclet eine dynamische Alternative zu HTML-Formularen dar. Die Oberfläche mit Eingabefeldern, Radiobuttons et cetera kann auf Eingaben reagieren, so daß das Tclet nur solche Daten an den Host schickt, von deren Korrektheit es sich überzeugen konnte. Sunscript hat sein Gästebuch mit Tclets realisiert.
Interaktive Grafikanwendungen nutzen die Grafikfunktionen von Tk unter anderem, um Resultate von Berechnungen darzustellen. Grundlage ist das Canvas-Widget, das neben dem Zeichnen das Einbetten anderer Widgets und Bilder erlaubt. Hiermit ist innerhalb des Browsers eine dynamische Oberfläche einsetzbar, die Teil des umgebenden HTML ist. Für einen Fahrradteileversand gibt es etwa ein Plug-in zur Berechnung von Speichenlängen und Entfaltungen. Damit kann jeder Kunde die gewünschten Längen ohne Taschenrechner und Fachbücher selber ermitteln. Mit Hilfe des Plug-ins lassen sich in HTML plattformübergreifende Multimedia-Anwendungen erstellen, ohne daß zusätzliche Entwicklungsumgebungen oder Runtime-Lizenzen nötig sind. So kann man einen Teil der Arbeit dem Client aufbürden, um mehr Benutzerfreundlichkeit zu erhalten.
Im Gegensatz zu Java ist das Plug-in aber nicht auf jedem Rechner zu finden, deshalb ist es vor allem für Intranet-Applikationen von Interesse. Außerdem laufen zumindest unter Linux nicht alle Netscape/Plug-in-Kombinationen stabil, die neuesten Versionen bieten aber eine zuverlässige Arbeitsumgebung.
Steffen Träger
ist Systemadministrator bei der Siemens AG, KWU-I, in Görlitz.
Carsten Zerbst
ist wissenschaftlicher Mitarbeiter der TU Hamburg-Harburg und beschäftigt sich mit der Berechnung des Ladungsverhaltens an Bord von Seeschiffen.
| iX-TRACT |
|
Dieser Text ist der Zeitschriften-Ausgabe 06/1998 von iX entnommen.
Parallelprogrammierung - die Kunst der Multi-Core-Nutzung
Agile ALM - agile Praktiken im Application Lifecycle Management
Webentwicklung - Applikationen für mobile Clients