Skriptsprachen (auch Scriptsprachen) sind Programmiersprachen, die darauf ausgelegt sind, bestehende Systeme oder Anwendungen zu ergänzen. Sie werden üblicherweise durch einen Interpreter ausgeführt und verzichten oft auf Sprachelemente, deren Nutzen erst bei der Bearbeitung großer Codebasen zum Tragen kommt. So wird etwa in Skriptsprachen auf den Deklarationszwang von Variablen meist verzichtet – vorteilhaft zur schnellen Erstellung von kleinen Programmen (siehe auch Prototyping), bei großen kann dies hingegen ein Nachteil sein, etwa wegen der fehlenden Überprüfungsmöglichkeit von Tippfehlern in Variablennamen.
Skripte oder Scripts sind tendenziell eher kleine Programme, die fast ausschließlich in Form von Quelltextdateien ausgeliefert werden, um ein einfaches Bearbeiten und Anpassen des Programms zu ermöglichen. In der Betriebssystemumgebung von Microsoft wird auch die Bezeichnung Makro verwendet. Häufig verzichten Skripte auf grafische Benutzeroberflächen oder umfangreiche Einstellungsmöglichkeiten, oft werden Anpassungen stattdessen direkt im Quellcode vorgenommen. Statt viele Funktionen in einem großen Programm zu bündeln, werden bei Skripten nicht selten einzelne, kleine Programme verfasst, die sich auch unabhängig voneinander ausführen lassen.
Merkmale Häufig vorhandene Merkmale sind: implizit deklarierte Variablen (dazu gehören auch dynamische Funktionsnamen), dynamische Typisierung, automatische Speicherverwaltung, vor allem automatische Speicherbereinigung, dynamische Klassenzugehörigkeit oder prototypenbasierte Vererbung, der Quellcode wird nicht im Voraus kompiliert.
Bei einigen Skriptsprachen kann der Programmcode (ebenso wie andere Daten) durch das Programm selbst manipuliert werden; das macht jene Sprachen besonders flexibel.
Die Anwendungsgebiete und Eigenschaften konventioneller Programmiersprachen und Skriptsprachen überschneiden sich mittlerweile stark (siehe hierzu den Abschnitt Abgrenzung), weshalb eine strikte Trennung zwischen konventionellen Programmiersprachen und Skriptsprachen nur selten möglich ist.
Abgrenzung Aus architektonischer Sicht werden Skriptsprachen häufig verwendet, um bestehende Komponenten in einem Anwendungsprogramm zu verbinden bzw. aufzurufen. Die Komponenten selbst werden in einer komplexeren Programmiersprache entwickelt. Beispiel dafür ist ein Shellskript, das externe Programme aufruft. Diese Programme sind im Allgemeinen in verschiedenen Programmiersprachen entwickelt. Ein anderes Beispiel ist die Sprache BPEL, die verwendet wird, um Webservices zu beschreiben, die in verschiedenen Programmiersprachen entwickelt werden können.
Obwohl Skriptsprachen anfangs nur für kleinere Automatisierungen verwendet wurden, können einige moderne Skriptsprachen auch für aufwendige Projekte genutzt werden. Durch Verbesserungen in den Interpretern wurde der Geschwindigkeitsunterschied zu statischen Sprachen verringert; zusammen mit dem Fortschritt der Rechenleistung ergibt sich vielfach eine akzeptable Ausführungsgeschwindigkeit, die früher nur mit kompilierten Programmen zu erreichen war.
Skriptsprachen werden oft mit interpretierten Sprachen in Verbindung gebracht, allerdings wird inzwischen auch Just-in-Time-Kompilierung angewendet. Skriptsprachen wie JavaScript sind daher nicht mehr rein interpretierte Sprachen, sondern können zusätzlich durch JIT-Kompilierer während der Laufzeit optimiert werden.
Eine klare Abgrenzung wird außerdem erschwert, da konventionelle Programmiersprachen ebenfalls als Skriptsprachen eingesetzt werden können. Die Spiel-Engine Unity erlaubt etwa den Einsatz der ahead-of-time kompilierten Sprache C#.
Kategorien Kommandozeileninterpreter Manche Skriptsprachen sind von den Kommandozeileninterpretern der Betriebssysteme abgeleitet. Die Interpreter sind vorrangig für interaktive Benutzung, d. h. für die Eingabe von Kommandos, ausgelegt. Die Eingabesprache wird um Variablen, arithmetische Ausdrücke, Kontrollstrukturen (if, while) und anderes erweitert und ermöglicht so die Automatisierung von Aufgaben (z. B. bei der unbeaufsichtigten Installation), indem „kleine Programme“ in Dateien geschrieben werden. Diese Dateien können dann vom Interpreter ausgeführt werden. Die Dateien nennt man unter dem Betriebssystem Unix Shellskripte (ausgeführt von einer der Unix-Shells sh, csh …) oder unter DOS und Windows auch Stapelverarbeitungsdateien oder Batch-Skripte (ausgeführt von COMMAND.COM und cmd.exe).
Abzugrenzen sind Kommandozeileninterpreter von interaktiven Sprachen (wie z. B. Lisp, Python, Tcl oder Perl im Debugger), die zum Testen und Debuggen interaktive Programmabschnitte ausführen können, aber nicht so eng im Betriebssystem integriert sind.
Beispiele Bourne-Shell (sh) – Unix-Bourne-Shell (die klassische Unix-Shell) bash – GNU-Ersatz und Erweiterung der sh-Shell Kornshell (ksh) – Weiterentwicklung der klassischen sh-Shell C-Shell (csh) – BSD Shell (Unix-Versionen aus Berkeley) cmd.exe – Kommandointerpreter von Windows ab Windows NT PowerShell – Kommandointerpreter u. a. für Windows TACL – Kommandointerpreter von Tandem-Systemen Digital Command Language (kurz DCL) – Kommandosprache für VMS-Plattformen
Skriptsprachen, die als Bibliothek verfügbar sind Beispiele GNU Guile – GNU Extension Language Lua – Skriptsprache zum Einbinden in Programme, oft in Computerspielen zu finden AngelScript – Skriptsprache zum Einbinden in Programme, oft in Computerspielen zu finden S-Lang – plattformunabhängige Skriptsprache zum Einbinden in Programme Sleep – In Java geschriebene Skriptsprache zum Einbinden in Java-Programme Squirrel – durch Lua inspirierte Skriptsprache mit C-ähnlicher Syntax Tcl – Tool Command Language von J. Ousterhout VBScript und JScript – Standardskriptsprachen von Windows Windows PowerShell – Microsofts Skriptsprache zum Einbinden in .NET-Programme
Skriptsprachen verschiedener Programme
Skriptsprachen können auch in Anwendungsprogrammen zur Automatisierung von Aufgaben oder durch Erweiterung der Fähigkeiten des Programms dienen. Teilweise wird auch ein Teil der Funktionalität des Programms selbst in dieser Skriptsprache realisiert. Somit können Anwender die Funktionalität eines solchen Programms schnell mit neuen Funktionen erweitern oder bestehende abändern, ohne das Programm selbst umzuschreiben. Diese Erweiterungen können selbst so weitreichend sein, dass das Programm völlig neue Aufgaben erledigt, die mit dem vorherigen Programm – aus Anwendersicht – nichts mehr gemeinsam haben. So wurden aus dem Texteditor Emacs auch ein E-Mail-Programm (Wanderlust) oder ein Webbrowser (Emacs-W3).
Im Gegensatz zu Plug-ins sind Skripte bzw. Makros wesentlich flexibler und werden vor allem für kleine Automatisierungen angewendet.
Beispiele AppleScript – Skriptsprache von macOS und Mac OS Classic AutoHotkey – eine Skriptsprache für Windows und Windows-Programme, kompilierbar AutoIt – eine Alternative zum Windows Script Host Emacs Lisp – Skriptsprache des Emacs-Editors Google Apps Script – zur programmierten Automatisierung von Google Workspace Anwendungen LPC – C ähnliche Sprache für MUDs Python – verschiedene, vor allem Open Source, Programme (z. B. LibreOffice, Blender und GIMP) lassen sich damit skripten OpenOffice-Basic – bei OpenOffice enthaltene Basic-Makrosprache, ähnlich VBA bei MS-Office QuakeC – Skriptsprache des Computerspiels Quake REXX – insbesondere unter z/VM und OS/2 als Makrosprache eingesetzt (z. B. im „Erweiterten Editor“ EPM). Tcl – im AOLserver eingesetzte Makrosprache UnrealScript – Skriptsprache der Unreal Engine Vim-Skriptsprache VBA (Visual Basic for Applications) – Skriptsprache für Microsoft-Produkte; ist auch kompilierbar VBScript – Standardskriptsprache von Windows, ab Windows 98 JScript – Standardskriptsprache von Windows, ab Internet Explorer 3.0 (Windows 3.1, NT 3.5)
Skriptsprachen im Web Für das Web werden Skriptsprachen häufig verwendet, um dynamische Webseiten und Webanwendungen zu erstellen. Dies geschieht zum Beispiel bei den Wikis, bei Foren, Gästebüchern und bei Onlinegeschäften. Dabei werden serverseitige und clientseitige Skriptsprachen eingesetzt.
Beispiele: serverseitig JavaScript – kann z. B. mit Node.js auch serverseitig genutzt werden Perl – erste Skriptsprache, die weite Verbreitung in Webservern fand PHP – die verbreitetste Skriptsprache auf Webservern; wurde direkt für diese Aufgabe konzipiert Python – kann mit einem Webserver verbunden oder mit einem eigenständigen Webserver genutzt werden Ruby – wird entweder über CGI oder mit mod_ruby ausgeführt, zunehmend auch unter Benutzung von Ruby on Rails VBScript in ASP
Beispiele: clientseitig JavaScript (standardisiert als ECMAScript), wird von allen modernen Browsern unterstützt CoffeeScript – wird nach JavaScript transkompiliert TypeScript – wird nach JavaScript transkompiliert
Selbständige Skriptsprachen Skriptsprachen können auch von anderen Programmen getrennt von ihrem Interpreter ausgeführt werden. Einige dieser sind für Spezialaufgaben konzipiert, andere sind allgemein verwendbare Sprachen. Diese Sprachen haben die für umfangreiche Programmprojekte notwendigen Konzepte wie Namensräume und Kapselung und werden deshalb nicht selten für größere Anwendungen verwendet.
Beispiele: spezialisierte Sprachen awk – Textprozessor (Listengenerator) unter Unix GLE – Graphics Layout Engine, Skriptsprache zur Erzeugung von Grafiken und Schaubildern
Beispiele: allgemein verwendbare Sprachen Perl – Programmiersprache mit erweiterten Textprozessorfähigkeiten PHP – ursprünglich für die Entwicklung von Webanwendungen entworfen Python – teilweise objektorientierte Programmiersprache REBOL – Programmiersprache von Carl Sassenrath REXX – Skriptsprache von IBM Ruby – objektorientierte Programmiersprache Tcl – universelle Skriptsprache mit erweiterten Textprozessorfähigkeiten und grafischem Toolkit Tk
Vergleich verschiedener Skriptsprachen Sprache Paradigmen Erscheinungsjahr Entwickler Typisierung Wichtige Implementierungen Lizenz Groovy objektorientiert, deklarativ, imperativ 2003 The Groovy Project, Apache Software Foundation stark, statisch, dynamisch - Apache-Lizenz 2 (Open Source) JavaScript objektorientiert, funktional, imperativ 1995 Brendan Eich schwach, dynamisch SpiderMonkey, Rhino, SquirrelFish, V8, Nashorn - Python objektorientiert, funktional, imperativ 1991 Python Software Foundation, Guido van Rossum stark, dynamisch CPython, Jython, IronPython, PyPy Python-Software-Foundation-Lizenz Scala objektorientiert, funktional, imperativ 2003 École polytechnique fédérale de Lausanne unter Leitung von Martin Odersky stark, statisch - Scala, BSD-ähnlich PHP objektorientiert, funktional, imperativ 1995 The PHP Group schwach, dynamisch Zend Engine, HHVM, Phalanger (Compiler) PHP-Lizenz und andere, teilweise proprietär Ruby objektorientiert, funktional, imperativ 1995 Yukihiro Matsumoto stark, dynamisch MRI / CRuby (YARV), JRuby, Rubinius(weitere) 2-clause BSD und eigene (siehe Nutzungsbedingungen) Tcl objektorientiert, funktional, imperativ 1988 John Ousterhout schwach, dynamisch ActiveTcl, Jim Tcl BSD-Lizenz
Vergleich syntaktischer Möglichkeiten in Skriptsprachen Sprache Annotationen Anonyme Funktion Pattern Matching Benannte Parameter Optionale Parameter Currying Varargs Groovy x x - (x) x x x JavaScript - x - x x x x Python x x - x x (x) x Scala x x x x x x x PHP x x - x x (x) xRuby - x - (x) x x x Tcl - x x (x) x (x) x
Weblinks
Overview of Scripting Languages (SAP Help Portal) Difference Between Programming, Scripting, and Markup Languages
Einzelnachweise
Kategorie:Skript Kategorie:Programmiersprachklasse