Frage

Wie kommt es, dass die meisten LISPs und Schemata dynamisch getippt werden? Mischt sich das statische Typing nicht mit einigen ihrer gemeinsamen Merkmale?

War es hilfreich?

Lösung

Tippen und S-Expressionen können zusammenarbeiten, um zusammenzuarbeiten, siehe Typisiertes Schema.

Teilweise ist es ein historischer Zufall, dass S-Expressionsprachen dynamisch typisiert werden. Diese Sprachen neigen dazu, sich stärker zu verlassen Makros, und die einfache Parsen- und Musteranpassung an S-Expressionen erleichtert die Makroverarbeitung erheblich. Die meisten Forschungen zu ausgefeilten Makros ereignen sich in S-Expressionssprachen.

Typisierte hygienische Makros sind hart.

Andere Tipps

Als LISP in den Jahren von 1958 bis 1960 erfunden wurde, wurde sowohl als Sprache als auch als Implementierung viele Funktionen eingeführt (Garbage Collection, ein Selbsthost-Compiler, ...). Einige Merkmale wurden (mit einigen Verbesserungen) aus anderen Sprachen (Listenverarbeitung, ...) vererbt. Die Sprache implementierte die Berechnung mit Funktionen. Die S-Expressionen waren (zu diesem Zeitpunkt) eher ein Implementierungsdetail als ein Sprachmerkmal. Ein Typsystem war nicht Teil der Sprache. Die Verwendung der Sprache auf interaktive Weise war auch eine frühe Implementierungsfunktion.

Die nützlichen Typsysteme für funktionale Sprachen wurden zu diesem Zeitpunkt noch nicht erfunden. Bis heute ist es auch relativ schwierig, statisch typisierte Sprachen auf interaktive Weise zu verwenden. Es gibt viele Implementierungen von statisch typisierten Sprachen, die auch eine interaktive Schnittstelle bieten - aber meistens bieten sie nicht die gleiche Unterstützung der interaktiven Verwendung als typisches Lisp -System. Das Programmieren in einem interaktiven Lisp -System bedeutet, dass viele Dinge im laufenden Fliegen geändert werden können und es problematisch sein kann, wenn Typänderungen durch ganze Programme und Daten in einem so interaktiven Lisp -System verbreitet werden mussten. Beachten Sie, dass einige Schematoren eine andere Sicht auf diese Dinge haben. R6Rs ist meistens eine Chargensprache im Allgemeinen nicht so sehr im Geiste von Lisp ...

Die funktionalen Sprachen, die später mit statischen Typensystemen erfunden wurden, erhielten dann auch eine Syntax der Nicht-S-Expression-sie boten keine Unterstützung für Makros oder verwandte Funktionen. Später verwendeten einige dieser Sprachen/Implementierungen einen Präprozessor für syntaktische Erweiterungen.

Die statische Typisierung ist lexikalisch. Dies bedeutet, dass alle Informationen über Typen aus dem Lesequellcode abgeleitet werden können, ohne Ausdrücke zu bewerten oder alle Dinge zu berechnen. Die Bedingungen sind hier am wichtigsten. Eine statisch typisierte Sprache ist so konzipiert, dass dies geschehen kann. Ein besserer Begriff würde "lexikalisch getippt", wie in einem Compiler kann beweisen, dass es allein die Quelle lesen kann, dass keine Typfehler auftreten.

Im Fall von LISP ist dies unbeholfen unterschiedlich, da der Quellcode von LiSP selbst nicht statisch ist, LiSP homo-ikonisch ist, Daten als Code verwendet und auf einige dynamisch seine eigene laufende Quelle erweitern kann.

LISP war die erste dynamisch typisierte Sprache, und wahrscheinlich aus diesem Grund ist der Programmcode selbst in Lisp nicht mehr lexikalisch.

Bearbeiten: Ein weitaus leistungsfähigerer Grund, bei statischen Tippen müssten Sie Listen eingeben. Sie können entweder extrem komplexe Typen für jede Listen haben, die alle Elemente berücksichtigen, von der Nachfrage, dass jedes Element den gleichen Typ hat und als Liste davon eingeben. Die frühere Option wird die Hölle mit Listenlisten produzieren. Die letztere Option erfordert, dass der Quellcode nur für jedes Datum denselben Typ enthält. Dies bedeutet, dass Sie nicht einmal Ausdrücke erstellen können, da eine Liste sowieso ein anderer Typ ist als eine Ganzzahl.

Ich wage also zu sagen, dass es völlig und völlig unmöglich ist, zu realisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top