Skriptsprache

Aus besserwiki.de

Eine Skriptsprache ist eine Programmiersprache für ein Laufzeitsystem, die die Ausführung von Aufgaben automatisiert, die sonst einzeln von einem menschlichen Bediener ausgeführt würden. Skriptsprachen werden in der Regel zur Laufzeit interpretiert und nicht kompiliert.

Die Primitive einer Skriptsprache sind in der Regel elementare Aufgaben oder API-Aufrufe, und die Skriptsprache ermöglicht es, sie zu weiteren Programmen zu kombinieren. Zu den Umgebungen, die durch Scripting automatisiert werden können, gehören Anwendungssoftware, Texteditoren, Webseiten, Betriebssystem-Shells, eingebettete Systeme und Computerspiele. Eine Skriptsprache kann als eine domänenspezifische Sprache für eine bestimmte Umgebung betrachtet werden; im Falle der Skripterstellung einer Anwendung wird sie auch als Erweiterungssprache bezeichnet. Skriptsprachen werden manchmal auch als sehr hohe Programmiersprachen bezeichnet, da sie manchmal auf einer hohen Abstraktionsebene arbeiten, oder als Steuersprachen, insbesondere für Job Control Languages auf Großrechnern.

Der Begriff Skriptsprache wird auch in einem weiteren Sinne verwendet, nämlich als Bezeichnung für dynamische Hochsprachen im Allgemeinen; einige sind streng interpretierte Sprachen, während andere eine Form der Kompilierung verwenden. In diesem Zusammenhang bezieht sich der Begriff Skript auf ein kleines Programm in einer solchen Sprache, das typischerweise in einer einzigen Datei enthalten ist und nicht mehr als ein paar tausend Zeilen Code umfasst.

Das Spektrum der Skriptsprachen reicht von kleinen bis hin zu großen und von hochgradig domänenspezifischen Sprachen bis hin zu allgemeinen Programmiersprachen. Eine Sprache kann klein und sehr domänenspezifisch beginnen und sich später zu einer portablen Allzwecksprache entwickeln; umgekehrt kann eine Allzwecksprache später spezielle domänenspezifische Dialekte entwickeln.

Skriptsprachen (auch Scriptsprachen) sind Programmiersprachen, die über einen Interpreter ausgeführt werden. Sie verzichten manchmal auf Sprachelemente, deren Nutzen erst bei der Bearbeitung komplexerer Aufgaben 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 hingegen von Nachteil, etwa wegen der fehlenden Überprüfungsmöglichkeit von Tippfehlern in Variablennamen.

Beispiele:

  • Bash, eine interpretierte Skriptsprache für die Verwendung unter Unix, GNU und anderen Unix-ähnlichen Betriebssystemen und Umgebungen.
  • PowerShell, eine Skriptsprache, die ursprünglich für Microsoft Windows entwickelt wurde, heute aber auch unter macOS und Linux installiert werden kann.
  • Rexx, NetRexx und Object Rexx sind Skriptsprachen, die auf REXX in IBMs VM/SP R3 basieren und auf einer Vielzahl von Plattformen eingesetzt werden. Sie werden sowohl für das Schreiben neuer Anwendungen als auch als Erweiterungssprachen für bestehende Anwendungen verwendet.
  • sed und AWK, zwei Textverarbeitungssprachen, die hauptsächlich in Unix-ähnlichen Umgebungen verwendet werden.
  • Perl, eine Textverarbeitungssprache, die sich später zu einer Allzwecksprache entwickelte, die auch als Erweiterungssprache für verschiedene Anwendungen verwendet wird.
  • Python, eine allgemeine, vereinfachte Skriptsprache, die auch als Erweiterungssprache verwendet wird.
  • Tcl, eine Skriptsprache für Unix-ähnliche Umgebungen, die in den 1990er Jahren in Verbindung mit Tk für die Erstellung von GUI-Anwendungen beliebt war.
  • JavaScript (später: ECMAScript), ursprünglich eine sehr kleine, hochgradig domänenspezifische Sprache, die auf die Ausführung in einem Webbrowser beschränkt war, um die angezeigte Webseite dynamisch zu verändern, und die sich später zu einer weithin portablen Allzweckprogrammiersprache entwickelte.
  • Kotlin ist zwar eine kompilierte Sprache, bietet aber REPL- und Skripting-Unterstützung (z. B. für Gradle-Build-Skripte).
  • Visual Basic for Applications, eine Erweiterungssprache speziell für Microsoft Office-Anwendungen.
  • Lua, eine Sprache, die für den Einsatz als Erweiterungssprache für Anwendungen im Allgemeinen entwickelt wurde und als solche von vielen verschiedenen Anwendungen verwendet wird.
  • Lisp, eine Familie von Allzwecksprachen und Erweiterungssprachen für spezielle Anwendungen, z. B. Emacs Lisp für den Emacs-Editor.

Einige Spielsysteme wurden durch Skripterweiterungen, die benutzerdefinierte Sprachen verwenden, in ihrer Funktionalität erheblich erweitert, insbesondere die virtuelle Welt Second Life (unter Verwendung der Linden Scripting Language) und die Eisenbahnsimulatoren der Trainz-Reihe (unter Verwendung von TrainzScript). In einigen Spielen, wie z. B. Wesnoth, spielen die Benutzer benutzerdefinierte Varianten des Spiels, die durch von den Benutzern erstellte Skripts definiert werden.

Merkmale

Typische Skriptsprachen sind so konzipiert, dass sie sehr schnell erlernt und geschrieben werden können, entweder als kurze Quellcodedateien oder interaktiv in einer Lese-, Prüf- und Druckschleife (REPL, Sprach-Shell). Dies impliziert im Allgemeinen eine relativ einfache Syntax und Semantik; typischerweise wird ein "Skript" (in der Skriptsprache geschriebener Code) von Anfang bis Ende als "Skript" ausgeführt, ohne expliziten Einstiegspunkt.

So ist es z. B. unüblich, Java als Skriptsprache zu bezeichnen, da die Syntax und die Regeln darüber, welche Klassen in welchen Dateien vorhanden sind, sehr langwierig sind und es nicht möglich ist, Java direkt interaktiv auszuführen, da die Quelldateien nur Definitionen enthalten können, die extern von einer Host-Anwendung oder einem Anwendungsprogramm aufgerufen werden müssen.

Dieses Stück Code, das "Hello World" ausgeben soll, bringt nichts, da main() nicht in der Klasse HelloWorld deklariert ist, obwohl das folgende Beispiel nützlich wäre.

Im obigen Beispiel ist main definiert und kann daher vom Launcher aufgerufen werden, obwohl dies immer noch nicht interaktiv ausgeführt werden kann. Im Gegensatz dazu erlaubt es Python, einige Funktionen in einer einzigen Datei zu definieren oder Funktionen ganz zu vermeiden und einen imperativen Programmierstil zu verwenden, oder sie sogar interaktiv zu nutzen.

Diese eine Zeile Python-Code gibt "Hello World" aus; eine deklarative Anweisung wie main() ist hier nicht erforderlich.

Eine Skriptsprache wird normalerweise aus dem Quellcode oder Bytecode interpretiert. Im Gegensatz dazu wird die Softwareumgebung (Interpreter), für die die Skripte geschrieben werden, in der Regel in einer kompilierten Sprache geschrieben und in Form von Maschinencode verteilt.

Skriptsprachen können für die Verwendung durch die Endbenutzer eines Programms - also für die Entwicklung durch die Benutzer - oder nur für die interne Verwendung durch die Entwickler konzipiert sein, so dass diese Teile des Programms in der Skriptsprache schreiben können. Skriptsprachen verwenden in der Regel Abstraktion, eine Form der Informationsverschleierung, um den Benutzern die Details der internen Variablentypen, der Datenspeicherung und der Speicherverwaltung zu ersparen.

Skripte werden oft von der Person, die sie ausführt, erstellt oder geändert, aber sie werden auch oft weitergegeben, z. B. wenn große Teile von Spielen in einer Skriptsprache geschrieben sind, wie das T-rex-Spiel von Google Chrome.

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,
  • unmittelbare Ausführung durch Interpretation des Quelltextes ohne getrennte Übersetzungsphase.

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.

Geschichte

Die frühen Großrechner (in den 1950er Jahren) waren nicht interaktiv, sondern verwendeten Stapelverarbeitung. Die Job Control Language (JCL) von IBM ist der Archetyp der Sprachen, die zur Steuerung der Stapelverarbeitung verwendet werden.

Die ersten interaktiven Shells wurden in den 1960er Jahren entwickelt, um den Fernbetrieb der ersten Time-Sharing-Systeme zu ermöglichen, und diese verwendeten Shell-Skripte, die die Ausführung von Computerprogrammen innerhalb eines Computerprogramms, der Shell, steuerten. Calvin Mooers gilt mit seiner TRAC-Sprache als Erfinder der Befehlssubstitution, d. h. der Möglichkeit, Befehle in Skripte einzubetten, die bei ihrer Interpretation eine Zeichenkette in das Skript einfügen. Multics nennt diese aktiven Funktionen. Louis Pouzin schrieb um 1964 einen frühen Prozessor für Befehlsskripte namens RUNCOM für CTSS. Stuart Madnick vom MIT schrieb 1966 eine Skriptsprache für das CP/CMS von IBM. Er nannte diesen Prozessor ursprünglich COMMAND, später EXEC. Multics enthielt einen Ableger von CTSS, RUNCOM, auch RUNCOM genannt. EXEC wurde schließlich durch EXEC 2 und REXX ersetzt.

Sprachen wie Tcl und Lua wurden speziell als Allzweck-Skriptsprachen entwickelt, die in jede Anwendung eingebettet werden konnten. Andere Sprachen wie Visual Basic for Applications (VBA) ermöglichten eine enge Integration mit den Automatisierungsfunktionen eines zugrunde liegenden Systems. Die Einbettung solcher Allzweck-Skriptsprachen anstelle der Entwicklung einer neuen Sprache für jede Anwendung hatte auch offensichtliche Vorteile, da sie den Anwendungsentwickler von der Notwendigkeit befreite, einen Sprachübersetzer von Grund auf zu programmieren, und es dem Benutzer ermöglichte, anderswo erlernte Fähigkeiten anzuwenden.

Manche Software enthält mehrere verschiedene Skriptsprachen. Moderne Webbrowser bieten in der Regel eine Sprache zum Schreiben von Erweiterungen für den Browser selbst und mehrere eingebettete Standardsprachen zur Steuerung des Browsers, darunter JavaScript (ein Dialekt von ECMAScript) oder XUL.

Arten

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.

Skriptsprachen können in verschiedene Typen eingeteilt werden, wobei es zwischen den Typen erhebliche Überschneidungen gibt.

Klebesprachen

Skriptsprachen werden oft der Systemprogrammierung gegenübergestellt, wie in der Dichotomie von Ousterhout oder "Programmierung im Großen und Programmierung im Kleinen". In dieser Sichtweise ist Skripting Glue-Code, der Softwarekomponenten verbindet, und eine für diesen Zweck spezialisierte Sprache ist eine Glue-Sprache. Pipelines und Shell-Skripte sind archetypische Beispiele für Glue-Sprachen, und Perl wurde ursprünglich entwickelt, um dieselbe Rolle zu erfüllen. Die Web-Entwicklung kann als eine Verwendung von Glue-Sprachen betrachtet werden, die eine Schnittstelle zwischen einer Datenbank und einem Webserver bilden. Wenn jedoch ein erheblicher Teil der Logik in Skripten geschrieben wird, ist dies eher als eine weitere Softwarekomponente und nicht als "Klebstoff" zu bezeichnen.

Glue-Sprachen sind besonders nützlich für das Schreiben und Warten von:

  • benutzerdefinierte Befehle für eine Befehlsshell;
  • kleinere Programme als solche, die besser in einer kompilierten Sprache implementiert sind;
  • "Wrapper"-Programme für ausführbare Dateien, wie z. B. eine Batch-Datei, die Dateien verschiebt oder manipuliert und andere Dinge mit dem Betriebssystem macht, bevor oder nachdem eine Anwendung wie ein Textverarbeitungsprogramm, eine Tabellenkalkulation, eine Datenbank, ein Assembler, ein Compiler usw. ausgeführt wird;
  • Skripte, die sich ändern können;
  • Schnelle Anwendungsentwicklung einer Lösung, die schließlich in einer anderen, in der Regel kompilierten, Sprache implementiert wird.

Beispiele für Klebesprachen:

  • AppleScript
  • ColdFusion
  • DCL
  • Einbettbares Common Lisp
  • ecl
  • Erlang
  • EXEC
  • EXEC2
  • JCL
  • CoffeeScript
  • Julia
  • JScript und JavaScript
  • Lua
  • m4
  • Perl (5 und Raku)
  • PHP
  • PowerShell
  • Reines
  • Python
  • Rebol
  • Rot
  • Rexx
  • NetRexx
  • Ruby
  • Schema
  • Tcl
  • Unix-Shell-Skripte (ksh, csh, bash, sh und andere)
  • VBScript
  • Work Flow Sprache
  • XSLT

Makrosprachen, die auf Betriebssystem- oder Anwendungskomponenten aufsetzen, können als Klebesprachen dienen. Dazu gehören Visual Basic for Applications, WordBasic, LotusScript, CorelScript, Hummingbird Basic, QuickScript, Rexx, SaxBasic und WinWrap Basic. Andere Tools wie AWK können ebenfalls als Glue-Sprachen betrachtet werden, ebenso wie jede Sprache, die von einer Windows Script Host-Engine implementiert wird (VBScript, JScript und VBA standardmäßig in Windows und Engines von Drittanbietern einschließlich Implementierungen von Rexx, Perl, Tcl, Python, XSLT, Ruby, Modern Pascal, Delphi und C). Die meisten Anwendungen können über die Objektmodelle oder ihre eigenen Funktionen auf Betriebssystemkomponenten zugreifen und diese nutzen.

Andere Geräte wie programmierbare Taschenrechner können ebenfalls über Glue-Sprachen verfügen; die Betriebssysteme von PDAs wie Windows CE können zusätzlich zu den Implementierungen gängiger Glue-Sprachen - darunter Windows NT, DOS und einige Unix-Shells, Rexx, Modern Pascal, PHP und Perl - über eigene oder fremde Makro-Tools verfügen, die Anwendungen zusammenfügen. Abhängig von der Betriebssystemversion sind WSH und die Standard-Skript-Engines (VBScript und JScript) verfügbar.

Programmierbare Taschenrechner können auf drei Arten in Leimsprachen programmiert werden. Der TI-92 von Texas Instruments beispielsweise kann ab Werk mit einer Befehlsskriptsprache programmiert werden. Die Aufnahme der Skript- und Glue-Sprache Lua in die TI-NSpire-Reihe von Taschenrechnern könnte als Nachfolger dieser Sprache betrachtet werden. Die primären On-Board-Hochsprachen der meisten grafischen Rechner (meist Basic-Varianten, manchmal Lisp-Derivate und seltener C-Derivate) können in vielen Fällen Rechnerfunktionen wie Graphen, Listen, Matrizen usw. zusammenfügen. Es gibt Implementierungen von Drittanbietern für umfangreichere Basic-Versionen, die den in diesem Artikel als Klebesprachen aufgelisteten Varianten näher kommen - und auch Versuche, Perl, Rexx oder verschiedene Betriebssystem-Shells auf den TI- und HP-Grafikrechnern zu implementieren, werden erwähnt. PC-basierte C-Cross-Compiler für einige der TI- und HP-Maschinen, die mit Tools verwendet werden, die zwischen C und Perl, Rexx, AWK und Shell-Skripten nach Perl, Modern Pascal, VBScript nach und von Perl konvertieren, ermöglichen es, ein Programm in einer Glue-Sprache zu schreiben, um es schließlich (als kompiliertes Programm) auf dem Rechner zu implementieren.

Editor-Sprachen

Eine Reihe von Texteditoren unterstützen Makros, die entweder mit einer in den Editor eingebauten Makrosprache geschrieben werden, z. B. The SemWare Editor (TSE), vi improved (VIM), oder mit einer externen Implementierung, z. B. XEDIT, oder beides, z. B. KEDIT. Manchmal werden Texteditoren und Editiermakros im Verborgenen verwendet, um andere Anwendungen bereitzustellen, z. B. FILELIST und RDRLIST in CMS .

Auftragssteuerungssprachen und Shells

Eine große Klasse von Skriptsprachen hat sich aus der Automatisierung der Jobkontrolle entwickelt, die sich auf das Starten und Kontrollieren des Verhaltens von Systemprogrammen bezieht (in diesem Sinne könnte man Shells als Abkömmlinge von IBMs JCL oder Job Control Language betrachten, die genau für diesen Zweck verwendet wurde). Die Interpreter vieler dieser Sprachen dienen gleichzeitig als Befehlszeileninterpreter, wie z. B. die Unix-Shell oder das MS-DOS COMMAND.COM. Andere, wie z. B. AppleScript, bieten die Verwendung von englischsprachigen Befehlen zur Erstellung von Skripten.

GUI-Skripterstellung

Mit dem Aufkommen der grafischen Benutzeroberflächen entstand eine spezielle Art von Skriptsprache zur Steuerung eines Computers. Diese Sprachen interagieren mit denselben grafischen Fenstern, Menüs, Schaltflächen usw. wie ein menschlicher Benutzer. Dazu simulieren sie die Aktionen eines Benutzers. Diese Sprachen werden in der Regel verwendet, um Benutzeraktionen zu automatisieren. Solche Sprachen werden auch als "Makros" bezeichnet, wenn die Steuerung durch simulierte Tastendrücke oder Mausklicks sowie durch Antippen oder Drücken auf einem berührungsaktivierten Bildschirm erfolgt.

Diese Sprachen könnten im Prinzip zur Steuerung jeder GUI-Anwendung verwendet werden; in der Praxis ist ihre Verwendung jedoch begrenzt, da sie von der Anwendung und vom Betriebssystem unterstützt werden müssen. Es gibt einige wenige Ausnahmen von dieser Einschränkung. Einige GUI-Skriptsprachen basieren auf der Erkennung von grafischen Objekten anhand ihrer Bildschirmpixel. Diese GUI-Skriptsprachen sind nicht auf die Unterstützung durch das Betriebssystem oder die Anwendung angewiesen.

Wenn die grafische Benutzeroberfläche (GUI) die entsprechenden Schnittstellen bereitstellt, wie in der IBM Workplace Shell, kann eine generische Skriptsprache, z. B. OREXX, zum Schreiben von GUI-Skripten verwendet werden.

Anwendungsspezifische Sprachen

Anwendungsspezifische Sprachen lassen sich in viele verschiedene Kategorien einteilen, d. h. eigenständige, auf Anwendungen basierende (ausführbare) Sprachen oder interne anwendungsspezifische Sprachen (Postscript, Xml, Gscript als einige der weit verbreiteten Skriptsprachen, die jeweils von Adobe, MS und Google implementiert werden), darunter auch eine idiomatische Skriptsprache, die auf die Bedürfnisse des Anwendungsbenutzers zugeschnitten ist. Ebenso verwenden viele Computerspielsysteme eine benutzerdefinierte Skriptsprache, um die programmierten Aktionen von Nicht-Spieler-Charakteren und der Spielumgebung auszudrücken. Sprachen dieser Art sind für eine einzige Anwendung konzipiert; und obwohl sie oberflächlich betrachtet einer bestimmten Allzwecksprache ähneln (z. B. QuakeC, das an C angelehnt ist), haben sie eigene Merkmale, die sie von anderen unterscheiden. Emacs Lisp ist zwar ein vollwertiger und fähiger Dialekt von Lisp, enthält aber viele spezielle Eigenschaften, die es für die Erweiterung der Editierfunktionen von Emacs besonders nützlich machen. Eine anwendungsspezifische Skriptsprache kann als eine domänenspezifische Programmiersprache betrachtet werden, die auf eine einzelne Anwendung spezialisiert ist.

Erweiterbare/einbindbare Sprachen

Eine Reihe von Sprachen wurden mit dem Ziel entwickelt, anwendungsspezifische Skriptsprachen zu ersetzen, indem sie in Anwendungsprogramme eingebettet werden können. Der Anwendungsprogrammierer (der in C oder einer anderen Systemsprache arbeitet) fügt "Hooks" ein, über die die Skriptsprache die Anwendung steuern kann. Diese Sprachen mögen technisch einer anwendungsspezifischen Erweiterungssprache entsprechen, aber wenn eine Anwendung eine "gemeinsame" Sprache einbettet, hat der Benutzer den Vorteil, dass er seine Kenntnisse von Anwendung zu Anwendung übertragen kann. Eine allgemeinere Alternative besteht darin, einfach eine Bibliothek (oft eine C-Bibliothek) bereitzustellen, die von einer Allzwecksprache zur Steuerung der Anwendung verwendet werden kann, ohne die Sprache für den spezifischen Bereich zu modifizieren.

JavaScript war und ist in erster Linie eine Sprache für die Skripterstellung in Webbrowsern; die Standardisierung der Sprache als ECMAScript hat sie jedoch zu einer beliebten, einbettbaren Allzwecksprache gemacht. Insbesondere die Mozilla-Implementierung SpiderMonkey ist in mehrere Umgebungen wie die Yahoo! Widget Engine eingebettet. Weitere Anwendungen, in die ECMAScript-Implementierungen eingebettet sind, sind die Adobe-Produkte Adobe Flash (ActionScript) und Adobe Acrobat (zum Skripten von PDF-Dateien).

Tcl wurde als Erweiterungssprache entwickelt, wird aber inzwischen häufiger als Allzwecksprache verwendet, ähnlich wie Python, Perl und Ruby. Rexx hingegen wurde ursprünglich als Job-Control-Sprache entwickelt, ist aber sowohl als Erweiterungssprache als auch als Allzwecksprache weit verbreitet. Perl ist eine Allzwecksprache, hatte aber den Oraperl-Dialekt (1990), der aus einer Perl 4-Binärdatei mit einkompiliertem Oracle Call Interface bestand. Dies wurde jedoch inzwischen durch eine Bibliothek (Perl-Modul), DBD::Oracle, ersetzt.

Andere komplexe und aufgabenorientierte Anwendungen können eine eingebettete Programmiersprache enthalten und offenlegen, um ihren Benutzern mehr Kontrolle zu ermöglichen und ihnen mehr Funktionalität zu bieten, als über eine noch so ausgefeilte Benutzeroberfläche verfügbar ist. Die 3D-Authoring-Tools von Autodesk Maya beispielsweise betten die Maya Embedded Language ein, oder Blender verwendet Python, um diese Aufgabe zu erfüllen.

Einige andere Arten von Anwendungen, die eine schnellere Hinzufügung von Funktionen oder Tweak-and-Run-Zyklen benötigen (z. B. Game Engines), verwenden ebenfalls eine eingebettete Sprache. Während der Entwicklung können so Funktionen schneller prototypisiert und freier angepasst werden, ohne dass der Benutzer das Innenleben der Anwendung genau kennen muss oder sie nach jeder Änderung neu aufbauen muss (was viel Zeit in Anspruch nehmen kann). Die Skriptsprachen, die zu diesem Zweck verwendet werden, reichen von den bekannteren und gebräuchlicheren Lua und Python bis hin zu weniger bekannten Sprachen wie AngelScript und Squirrel.

Ch ist eine weitere C-kompatible Skripting-Option für die Industrie zur Einbettung in C/C++-Anwendungsprogramme.

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

Kategorien

Kommandozeileninterpreter

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 in neueren Windows-Versionen
  • 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 und JScript – Standardskriptsprachen in neueren Windows-Versionen

Skriptsprachen im WWW

Für das WWW werden Skriptsprachen häufig auf den Servern verwendet, um dynamische Seiten oder ganze Webanwendungen zu erstellen. Dies geschieht zum Beispiel bei den Wikis, bei Foren, Gästebüchern und bei Onlinegeschäften.

Des Weiteren werden clientseitige Skriptsprachen auch in den Webseiten selbst eingebunden und in den Browsern ausgeführt.

Beispiele: serverseitig

  • 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
  • JavaScript, kann z. B. mit Node.js auch serverseitig genutzt werden
  • 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

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
Ruby - x - (x) x x x
Tcl - x x (x) x (x) x