Skriptsprachen: Einfach und doch sehr mächtig

20.09.2007
Von Norbert Ehreke
Geht es um Integrationsaufgaben oder Web-Anwendungen, greifen Entwickler gerne auf Skriptsprachen zurück. Sie liefern schnelle Ergebnisse und sind so mächtig, dass es fünf von ihnen in die Top-Ten-Liste der beliebtesten Programmiersprachen geschafft haben.

Skriptsprachen unterscheiden sich von klassischen Programmiersprachen, die hier Systemsprachen genannt werden, in der Regel dadurch, dass sie interpretiert und nicht kompiliert werden. Der Quellcode ist somit gleichzeitig der Ausführungscode. Da bei jeder Ausführung erst eine Übersetzung des Codes erfolgt, werden sehr rechenintensive Probleme kaum durch Anwendungen gelöst, die auf einer Skriptsprache basieren. Während Systemsprachen darauf ausgelegt sind, große Programme von Grund auf mit nur einem minimalen Satz von Befehlen und Datenstrukturen zu erstellen, werden Skriptsprachen meist zur Integration von bestehenden heterogenen Softwaresystemen verwendet. Aufgrund der unterschiedlichen Zielrichtung im Design ergänzen sich also beide Arten von Programmiersprachen.

Tim Bray, Autor und für den XML- und Web-Atom-Standard mitverantwortlicher Entwickler, verleiht den Programmiersprachen PHP, Rails und Java "innere Werte".
Tim Bray, Autor und für den XML- und Web-Atom-Standard mitverantwortlicher Entwickler, verleiht den Programmiersprachen PHP, Rails und Java "innere Werte".
Foto: Tim Bray

In modernen Skriptsprachen sind meist Spracheigenschaften enthalten, wie beispielsweise Lambda-Funktionen oder Closures, die derzeit als mächtig gelten, auch wenn ihre Entwicklung auf klassische Programmiersprachen wie Smalltalk beziehungsweise Lisp zurückgeführt werden kann. Obwohl es sich hier um Funktionen handelt, die durchaus in C, C++ oder Java bereits vorhanden beziehungsweise zum Teil nur mit riskanten syntaktischen Verrenkungen abbildbar sind, wird immer wieder eine native Implementierung diskutiert, die der jeweiligen Sprachsyntax möglichst nahekommen soll.

Zumeist unterscheiden sich Skriptsprachen von Systemsprachen dadurch, dass es keine strenge Typisierung von Variablen gibt. So kann ein Skalar in Perl einen String enthalten und nach einer erneuten Zuweisung ein Integer. Diese schwache Typisierung ermöglicht es, viel leichter Komponenten und Softwaresysteme zu integrieren, als dies bei starker Typisierung unter anderem in C++, C# oder Java der Fall ist, wo eine einmal deklarierte Variable ihren Typ nur ändern kann, wenn es sich um weitervererbte Typen ihres Basistyps handelt.

Allerdings lässt sich der Erfolg oder Misserfolg einer Skriptsprache oftmals auf eine konkrete Aufgabe zurückführen, die die Anwendungsgebiete einer bestimmten Sprache zur Geltung bringt und ihre Entwicklung begünstigt. Bei Perl und PHP waren es die Anforderungen an dynamische Web-Seiten, die sich mit dem Aufkommen von E-Business stellten. Andererseits werden manche Skriptsprachen dazu genutzt, große Softwaresysteme zu automatisieren. Zielgruppe sind dann weniger die Programmierer als die Systemanwender. Visual Basic Script für die Office-Plattform ist dafür ein Beispiel. Auch SQL für den Datenbankzugriff war ursprünglich dazu gedacht, den Nutzern einer Datenbank die Programmierung von C zu ersparen.

Der geringere Typisierungsgrad und die Möglichkeit, mit nur einem Befehl eine hohe Zahl an Instruktionen auszulösen, erlaubt es Entwicklern, anhand von Skriptsprachen schnell zu flexiblen Lösungen zu kommen. Damit verbunden ist aber ein zum Teil höherer CPU-Ressourcenbedarf.
Der geringere Typisierungsgrad und die Möglichkeit, mit nur einem Befehl eine hohe Zahl an Instruktionen auszulösen, erlaubt es Entwicklern, anhand von Skriptsprachen schnell zu flexiblen Lösungen zu kommen. Damit verbunden ist aber ein zum Teil höherer CPU-Ressourcenbedarf.

Zudem haftet Skriptsprachen oftmals das Attribut "einfach" an. Da die Entwicklungsumgebung einer Skriptsprache im Prinzip nur aus einem Texteditor und einer Betriebssystem-Shell besteht, fällt vielen Entwicklern der Einstieg in eine Skriptsprache leicht. Ferner werden Skriptsprachen oft von IT-Profis verwendet, die sich weniger für die Feinheiten einer Softwarearchitektur und die Theorie hinter einer Programmiersprache interessieren, sondern mehr die praktischen Eigenschaften und die Mächtigkeit der jeweiligen Skriptsprache für ihr spezielles Arbeitsgebiet nutzen wollen.

Was aus Management-Sicht zudem für Skriptsprachen spricht, ist das Mooresche Gesetz, das immer noch Bestand hat und wonach sich alle 18 Monate die Zahl der Transistoren auf einem handelsüblichen Prozessor verdoppelt. Die gegenüber Skriptsprachen oft geäußerten Bedenken hinsichtlich einer mangelnden Skalierbarkeit und Performance lassen sich somit allein durch die Anschaffung neuer Hardware wenigstens zum Teil beheben. Hier gilt es abzuwägen, ob die mit Skriptsprachen eingesparte Entwicklerzeit unter Umständen mehr Gewicht hat.

Heute gibt es eine Vielzahl von Skriptsprachen, die zum einen die Automatisierung von großen Systemen ermöglichen und zum anderen generisch einsetzbar sind. Die Skriptsprache Perl beispielsweise bezieht sich schon in Ihrem Akronym "Practical Extraction and Report Language" auf ein Einsatzgebiet rund um Textverarbeitung. Ihre Blütezeit war vermutlich zu Zeiten des Internet-Booms um das Jahr 2000, als die Nachfrage nach komplexen Web-Anwendungen mittels dynamischer Web-Seiten (CGI) hoch war, komfortable Entwicklungsumgebungen für derartige Aufgaben aber noch in den Kinderschuhen steckten. Eine der großen Stärken von Perl war und ist die Verarbeitung von "regulären Ausdrücken", die eine Manipulation von Text (insbesondere HTML) gegenüber Hochsprachen wie C und C++ im damaligen Vergleich extrem vereinfachten. Aber auch im Bereich Netzadministration, Backup und anderer Aufgaben, mit denen Systemadministratoren tagtäglich zu tun haben, ist Perl nach wie vor eine große Hilfe.

Syntaktisch und funktional sehr ähnlich wie Perl erfreut sich die Skriptsprache PHP auch heute noch großer Beliebtheit. Insbesondere bei der Implementierung kleiner und mittlerer Internet-Anwendungen wird PHP häufig verwendet. Es ist laut Tiobe Programming Community Index (www.tiobe.com) die populärste Skriptsprache.

Tiobe-Index

Position August 2007

Position August 2006

Veränderung

Programmiersprache

1

1

=

Java

2

2

=

C

3

3

=

(Visual) Basic

4

4

=

C++

5

5

=

PHP

6

6

=

Perl

7

8

+

C#

8

7

-

Python

9

10

+

Javascript

10

13

+++

Ruby

Mit der verbreiteten Akzeptanz der Office-Plattform ging auch der Boom von Visual Basic Skript (VBS und VBA) einher. Mit VB wurde es möglich, das gesamte, durch COM-Schnittstellen offengelegte Office anzusprechen und zu steuern. Grafische Oberflächen ließen sich mit minimalem Aufwand entwickeln. Gerade im kommerziellen Bereich entstand so anfangs eine große Zahl individueller, auf die Fachbereiche zugeschnittener Anwendungen, die später allerdings oft in zentrale Lösungen migriert werden mussten.

Die Sprachen PL/SQL beziehungsweise T-SQL bieten mächtige Schnittstellen zu den Datenbanken von Oracle respektive Microsofts SQL Server. Mittlerweile ist der Funktionsumfang dieser Sprachen so groß, dass die Entwicklung von Business-Logik einfacher direkt auf der Datenbank vorgenommen werden kann. Daraus ergibt sich zwar eine Reihe von Vorteilen wie etwa die Vermeidung von Transaktions-Management in der Business-Schicht, dieses Vorgehen birgt aber auch gewisse Risiken hinsichtlich der Skalierbarkeit.

Die derzeit wahrscheinlich am stärksten wachsende und auf eine große Entwicklergemeinde gestützte Skriptsprache ist Ruby. Hierbei handelt es sich um eine dynamische, vollständig objektorientierte Skriptsprache, die mit einer klaren Syntax und als Open Source verfügbar ist. Den Aufstieg in die Top Ten der Programmiersprachen verdankt Ruby dem Framework Rails, mit dem sich klassische Enterprise-Web-Applikationen wesentlich schneller und mit weniger Entwicklern aufsetzen lassen als vergleichsweise mit J2EE oder ASP.NET – behaupten zumindest die Ruby-Verfechter. Die Flexibilität von Ruby zeichnet sich auch dadurch aus, dass selbst eine Erweiterung von Systemklassen zulässig ist. Ruby hat ebenso wie andere Skriptsprachen die Diskussion um Erweiterungen in etablierten Systemsprachen wie C# und Java verstärkt, da eine Reihe der dynamischen Eigenschaften von Ruby neuerdings auch von den Entwicklern dieser klassischen Sprachen verlangt werden.

Skript- oder Systemsprache?

Zur Entscheidung, ob eine Skriptsprache oder eine Systemsprache zum Einsatz kommen sollte, können folgende Fragen berücksichtigt werden. Mehrere Antworten mit "Ja" deuten auf eine Skriptsprache.

  • Ist die Hauptaufgabe der Anwendung die Verknüpfung bestehender Systeme?

  • Wird die Anwendung eine Reihe verschiedener Komponenten verknüpfen?

  • Werden viele und komplexe String-Manipulationen erwartet?

  • Wird die Funktionalität der Anwendung sich mit der Zeit stark ändern?

  • Muss die Anwendung stark erweiterbar in einem heterogenen Umfeld sein?

Umgekehrt ist eine Systemsprache zu empfehlen, wenn die folgenden Fragen mit "Ja" beantwortet werden.

  • Beinhaltet die Anwendung komplexe Algorithmen und spezielle Datenstrukturen?

  • Werden sehr große Datenmengen verarbeitet (zum Beispiel alle Pixel eines Bildes), so dass eine schnelle Ausführung zwingend notwendig ist?

  • Ist die Funktionalität der Anwendung wohl definiert, und wird sie sich nicht oder nur wenig ändern?

Die aktuellen Bestrebungen von Microsoft, mit "Linq to SQL" eine in C# integrierte Abfragemöglichkeit von Datenbanken als objektrelationalen Mapper zu realisieren, zeigen exemplarisch, wie stark sich die skriptorientierte Programmierung bereits heute auf Systemsprachen auswirkt. So verschwimmen die Grenzen der klassischen Drei-Schichten-Architektur, und vereinfacht gesagt ist es erlaubt, SQL in C# zu programmieren.

Ferner gibt es den Trend, die Unterstützung von Skriptsprachen auf bereits bestehenden virtuellen Plattformen, beispielsweise der Java Virtual Machine oder der .NET Common Language Runtime, zu implementieren. So sind JRuby beziehungsweise IronRuby als Implementierung für die jeweilige Plattform bereits jetzt verfügbar. Allerdings ist ihre Nutzung im Enterprise-Bereich, je nach Problemstellung und Infrastruktur, mit Vorsicht zu genießen.

Auch Groovy und Scala, implementiert für die Java Virtual Machine (JVM), stehen derzeit in der Entwicklergemeinde hoch im Kurs. Momentan ist es aber noch schwer, das Potenzial dieser Sprachen zu beurteilen, da nicht geklärt ist, in welchem Entwicklungskontext ihre Stärken besonders zum Tragen kommen.

Die Mächtigkeit von Skriptsprachen im Vergleich zu Systemsprachen ist bemerkenswert. Je nach Anwendungsgebiet lassen sich sehr komplexe Operationen in wenigen Zeilen programmieren. So erfordert beispielsweise die Filterung einer Textdatei nach einem oder mehreren regulären Ausdrücken mit Perl wenige Zeilen Code, mit Java oder C# hingegen ein kleines Projekt mit mehreren Klassen. Da immer mehr große Systeme Skriptsprachen zur Interaktion anbieten, kann die Lösung eines Problems in einem heterogenen Umfeld schnell durch einen Blick auf das breite Spektrum etablierter Skriptsprachen zu finden sein. (ue)