Wikipedia · einfach zusammengefasst · Stand
Dynamische Programmiersprache
Dynamische Programmiersprachen bezeichnet in der Softwaretechnik eine Klasse von höheren Programmiersprachen, welche zur Laufzeit Tätigkeiten ausführen, …
Inhalt4 Abschnitte
Grundidee dynamischer Programmiersprachen
Dynamische Programmiersprachen sind in der Softwaretechnik höhere Programmiersprachen, die zur Laufzeit Tätigkeiten ausführen können, welche andere Sprachen nicht oder bereits zur Übersetzungszeit ausführen. Ein Beispiel ist, ein Programm während seiner Ausführung zu erweitern. Vergleichbare Tätigkeiten lassen sich in anderen Sprachen zwar nachbilden, dynamische Programmiersprachen unterstützen sie jedoch unmittelbar.
Die Abgrenzung ist nicht exakt: Bei virtuellen Maschinen oder Just-in-time-Kompilierung verschwimmen Übersetzungszeit und Laufzeit. Viele Sprachen erlauben außerdem auf verschiedene Weise die Manipulation von Bytecode oder Maschinensprache. Dynamische Sprachen sind meist, aber nicht immer, dynamisch typisiert. Entscheidend für die Zuordnung ist vor allem, wie einfach dynamische Techniken in einer Sprache eingesetzt werden können.
Typische Vertreter
Üblicherweise als dynamische Programmiersprachen gelten unter anderem ActionScript, BeanShell, Common Lisp und andere Lisp-Dialekte, Groovy, JavaScript, Julia, Matlab, Lua, Objective-C, Perl, PHP, Python, Ruby, Smalltalk, Tcl und VBScript.
Dynamische Funktionen und Objektänderungen
Einige dynamische Programmiersprachen bieten eine eval-Funktion. Diese Funktion höherer Ordnung übernimmt eine beliebige Funktion und gegebenenfalls geeignete aktuelle Parameter, wendet die Funktion darauf an und liefert das Berechnungsergebnis. Weil eval damit alles Berechenbare berechnen kann, wird sie als universale Funktion bezeichnet.
Typen oder Objektsysteme können zur Laufzeit verändert werden. So können etwa durch Mixins neue Objekte auf Grundlage bereits existierender Objekte entstehen. Auch der Vererbungsbaum kann während der Laufzeit verändert werden.
Funktionale Konzepte, Reflexion und Makros
Dynamische Programmiersprachen unterstützen häufig funktionale Konzepte. Closures gehören meist zu ihren Bestandteilen; Continuations werden dagegen oft nicht unterstützt.
Reflexion und Introspektion werden üblicherweise unterstützt. Damit kann ein Programm seinen eigenen Code oder seine Strukturen untersuchen und verändern. In Lisp werden zum Beispiel S-Expressions, also Darstellungen von Code als Datenstrukturen, evaluiert und modifiziert.
Einige dynamische Programmiersprachen verbinden Introspektion und eval in Makros. Makros können den Prozess beeinflussen, in dem der Compiler den abstrakten Syntaxbaum erstellt. Dadurch ermöglichen sie direkte Metaprogrammierung. Lisp ist hierfür der wichtigste Vertreter.