Dynamische Programmiersprache

:This-Artikel ist über eine Klasse von Programmiersprachen für die Methode, für die Durchlaufzeit von Algorithmen zu reduzieren, sieh Dynamische Programmierung.

Dynamische Programmiersprache ist ein Begriff gebraucht weit gehend in der Informatik, um eine Klasse von Programmiersprachen auf höchster Ebene zu beschreiben, die an der Durchlaufzeit viele allgemeine Handlungsweisen durchführen, die andere Sprachen während der Kompilation, wenn überhaupt durchführen könnten. Diese Handlungsweisen konnten Erweiterung des Programms, durch das Hinzufügen neuen Codes, durch das Verlängern von Gegenständen und Definitionen, oder durch das Ändern des Typ-Systems, aller während der Programm-Ausführung einschließen. Mit diesen Handlungsweisen kann auf fast jeder Sprache der genügend Kompliziertheit wettgeeifert werden, aber dynamische Sprachen stellen direkte Werkzeuge zur Verfügung, um von ihnen Gebrauch zu machen. Viele dieser Eigenschaften wurden zuerst durchgeführt, weil Eingeborener auf der Lispeln-Programmiersprache zeigt.

Die meisten dynamischen Sprachen werden auch dynamisch getippt, aber nicht alle sind.

Beschränkungen und Zweideutigkeit in der Definition

Die Definition einer dynamischen Sprache ist zweideutig, weil sie versucht, Unterscheidungen zwischen Code und Daten sowie zwischen Kompilation und Durchlaufzeit zu machen, die nicht universal sind. Virtuelle Maschinen, gerade rechtzeitig Kompilation und die Fähigkeit von vielen Programmiersprachen auf einigen Systemen, um Maschinencode direkt zu modifizieren, machen den Unterscheidungsauszug. Im Allgemeinen ist die Behauptung, dass eine Sprache dynamisch ist, mehr eine Behauptung über die Bequemlichkeit des Gebrauches von dynamischen Eigenschaften, als es eine klare Behauptung der Fähigkeiten zur Sprache ist.

Beispiele

Der folgende wird allgemein als dynamische Sprachen betrachtet:

Clojure

Durchführung

Eval

Einige dynamische Sprachen bieten eine Eval-Funktion an. Diese Funktion nimmt einen Schnur-Parameter, der Code auf der Sprache enthält, und führt es durch. Wenn dieser Code für einen Ausdruck eintritt, wird der resultierende Wert zurückgegeben. Jedoch schlagen Erik Meijer und Peter Drayton vor, dass Programmierer "eval als ein Ersatz eines armen Mannes für höherwertige Funktionen verwenden."

Wenden Sie Laufzeitmodifizierung ein

Ein Typ oder Gegenstand-System können normalerweise während der Durchlaufzeit auf einer dynamischen Sprache modifiziert werden. Das kann bedeuten, neue Gegenstände aus einer Laufzeitdefinition oder gestützt auf mixins von vorhandenen Typen oder Gegenständen zu erzeugen. Das kann sich auch auf das Ändern des Erbes oder Typ-Baums und so Änderns der Weise beziehen, wie sich vorhandene Typen (besonders in Bezug auf die Beschwörung von Methoden) benehmen.

Funktionelle Programmierung

Funktionelle Programmierkonzepte sind eine Eigenschaft von vielen dynamischen Sprachen, und sind auch auf Lispeln zurückzuführen.

Verschlüsse

Einer der am weitesten verwendeten Aspekte der funktionellen Programmierung auf dynamischen Sprachen ist der Verschluss, der erlaubt, ein neues Beispiel einer Funktion zu schaffen, die Zugang zum Zusammenhang behält, in dem es geschaffen wurde. Ein einfaches Beispiel davon erzeugt eine Funktion, um Text für ein Wort zu scannen:

fungieren Sie new_scanner (Wort)

temp_function = Funktion (geben) (ein)

scan_for_text (Eingang, Wort)

beenden Sie Funktion

geben Sie temp_function zurück

beenden Sie Funktion

Bemerken Sie, dass die innere Funktion keinen Namen hat, und stattdessen in der Variable versorgt wird. Jedes Mal wird durchgeführt, es wird eine neue Funktion zurückgeben, die sich an den Wert des Parameters erinnert, der darin passiert wurde, als es definiert wurde.

Verschlüsse sind eines der Kernwerkzeuge der funktionellen Programmierung und viele Sprachunterstützung mindestens dieser Grad der funktionellen Programmierung.

Verlängerungen

Eine andere Eigenschaft von einigen dynamischen Sprachen ist die Verlängerung. Verlängerungen vertreten Ausführungsstaat, der wiederangerufen werden kann. Zum Beispiel könnte ein parser ein Zwischenergebnis und eine Verlängerung zurückgeben, die, wenn angerufen, fortsetzen wird, den Eingang grammatisch zu analysieren. Verlängerungen wirken auf sehr komplizierte Weisen mit scoping besonders in Bezug auf Verschlüsse aufeinander. Deshalb stellen viele dynamische Sprachen Verlängerungen nicht zur Verfügung.

Nachdenken

Nachdenken ist auf vielen dynamischen Sprachen üblich, und ist normalerweise mit Analyse der Typen und metadata von allgemeinen oder polymorphen Daten verbunden. Es kann jedoch auch volle Einschätzung und Modifizierung eines Codes eines Programms als Daten wie die Eigenschaften einschließen, die Lispeln im Analysieren von S-Ausdrücken zur Verfügung stellt.

Makros

Eine begrenzte Zahl von dynamischen Programmiersprachen stellt Eigenschaften zur Verfügung, die Codeselbstbeobachtung und eval in einer Eigenschaft genannt Makros verbinden. Die meisten Programmierer heute, die des Makro-Begriffes bewusst sind, sind auf sie in C oder C ++ gestoßen, wo sie eine statische Eigenschaft sind, die in einer kleinen Teilmenge der Sprache gebaut werden, und nur zu Schnur-Ersetzungen auf dem Text des Programms fähig sind. Auf dynamischen Sprachen, jedoch, stellen sie Zugang zur inneren Tätigkeit des Bearbeiters und vollen Zugang dem Dolmetscher, der virtuellen Maschine oder der Durchlaufzeit zur Verfügung, die Definition von sprachähnlichen Konstruktionen erlaubend, die Code optimieren oder die Syntax oder Grammatik der Sprache modifizieren können.

Zusammenbau, C, C ++, das frühe Java und FORTRAN baut diese Kategorie nicht allgemein ein.

Siehe auch

Weiterführende Literatur

Laurence Tratt, Dynamisch Getippte Sprachen, Fortschritte in Computern, vol. 77, Seiten 149-184, Juli 2009


Lanka / Das obere Ägypten
Impressum & Datenschutz