180 Stimmen

Bedeutet "untypisiert" in der akademischen CS-Welt auch "dynamisch typisiert"?

Ich lese eine Folie, die besagt, dass "JavaScript ist untypisiert". Dies widersprach, was ich dachte, wahr zu sein, so dass ich begann zu graben, um zu versuchen und mehr zu erfahren.

Jede Antwort auf Ist JavaScript eine untypisierte Sprache? sagt, dass JavaScript pas untypisiert und bot Beispiele für verschiedene Formen der statischen, dynamischen, starken und schwachen Typisierung, mit denen ich vertraut und zufrieden bin das war also nicht der richtige Weg.

Also habe ich Brendan Eich, den Erfinder von JavaScript, gefragt, und er hat gesagt: "Das ist eine gute Idee:

akademische typen verwenden "untypisiert" im sinne von "keine statischen typen". sie sind klug genug zu erkennen, dass werte typen haben (duh!). kontext ist wichtig.

Verwenden akademisch orientierte Informatiker "untypisiert" als Synonym für "dynamisch typisiert" (und ist das gültig?), oder steckt da etwas Tieferes dahinter, das ich übersehe? Ich stimme Brendan zu, dass der Kontext wichtig ist, aber ich würde mich freuen, wenn Sie mir Erklärungen geben könnten, denn meine aktuellen Bücher spielen bei diesem Thema nicht mit.

Ich möchte das festnageln, um mein Verständnis zu verbessern und weil selbst Wikipedia nicht auf diese alternative Verwendung verweist (die ich jedenfalls finden kann). Ich möchte es mir nicht mit der Verwendung des Begriffs verderben oder die Verwendung des Begriffs in Zukunft in Frage stellen, wenn ich falsch liege :-)

(Ich habe auch gesehen, wie ein Top-Smalltalker sagte, dass Smalltalk auch "untypisiert" ist, es ist also kein Einzelfall, was mich auf diese Suche gebracht hat! :-))

161voto

Andreas Rossberg Punkte 32540

Ja, das ist eine gängige Praxis in der wissenschaftlichen Literatur. Um das zu verstehen, muss man wissen, dass der Begriff "Typ" in den 1930er Jahren im Zusammenhang mit dem Lambda-Kalkül erfunden wurde (eigentlich sogar noch früher, im Zusammenhang mit der Mengenlehre). Seitdem hat sich ein ganzer Zweig der Computerlogik herausgebildet, der als "Typentheorie" bezeichnet wird. Die Theorie der Programmiersprachen basiert auf diesen Grundlagen. Und in all diesen mathematischen Kontexten hat der Begriff "Typ" eine bestimmte, gut etablierte Bedeutung.

Die Terminologie der "dynamischen Typisierung" wurde erst viel später erfunden - und sie ist ein Widerspruch in sich, wenn man die übliche mathematische Verwendung des Wortes "Typ" betrachtet.

Hier ist zum Beispiel die Definition von "Typensystem", die Benjamin Pierce in seinem Standardlehrbuch verwendet Typen und Programmiersprachen :

Ein Typensystem ist eine nachvollziehbare syntaktische Methode zum Nachweis der Abwesenheit von bestimmten Programmverhaltensweisen durch Klassifizierung von Phrasen nach den Arten von Werten, die sie berechnen.

Er merkt auch an:

Das Wort "statisch" wird manchmal ausdrücklich hinzugefügt - wir sprechen von einer "statisch typisierten Programmiersprache", um die hier betrachteten Art von Kompilierzeitanalysen, die wir hier betrachten, von der dynamischen oder latenten Typisierung zu unterscheiden, die in Sprachen wie Scheme (Sussman und Steele, 1975; Kelsey, Clinger, und Rees, 1998; Dybvig, 1996), wo zur Laufzeit Typ-Tags verwendet werden, um zwischen verschiedenen Arten von Strukturen auf dem Heap zu unterscheiden. Begriffe wie "dynamisch typisiert" sind wohl falsch und sollten wahrscheinlich durch "dynamisch geprüft" ersetzt werden. aber die Verwendung ist Standard.

Die meisten in diesem Bereich tätigen Personen scheinen diesen Standpunkt zu teilen.

Beachten Sie, dass dies pas bedeuten, dass "untypisiert" und "dynamisch typisiert" Synonyme sind. Vielmehr ist letzteres eine (technisch irreführende) Bezeichnung für einen besonderen Fall von ersterem.

PS: Übrigens bin ich zufällig sowohl akademischer Forscher auf dem Gebiet der Schriftsysteme als auch nicht-akademischer Implementierer von JavaScript, so dass ich mit diesem Schisma leben muss :)

74voto

Norman Ramsey Punkte 193087

Ich bin ein akademischer Informatiker, der sich auf Programmiersprachen spezialisiert hat, und ja, das Wort "untypisiert" wird häufig auf diese Weise (falsch) verwendet. Es wäre schön, das Wort für Sprachen zu reservieren, die keine dynamischen Typ-Tags tragen, wie z.B. Forth und Assembler, aber diese Sprachen werden selten benutzt und noch seltener studiert, und es ist viel einfacher, "untyped" zu sagen als "dynamisch typisiert".

Bob Harper sagt gerne, dass Sprachen wie Scheme, Javascript und so weiter als typisierte Sprachen mit nur einem einzigen Typ betrachtet werden sollten: Wert. Ich neige zu dieser Ansicht, da sie es ermöglicht, eine konsistente Weltsicht mit nur einem Typ-Formalismus zu konstruieren.

P.S. Im reinen Lambda-Kalkül sind die einzigen "Werte" Terme in Normalform, und die einzigen geschlossen Terme in Normalform sind Funktionen. Aber die meisten Wissenschaftler, die den Lambda-Kalkül verwenden, fügen Basistypen und Konstanten hinzu, und dann muss man entweder ein statisches Typsystem für Lambda einfügen oder man ist gleich wieder bei dynamischen Typ-Tags.

P.P.S. An den ursprünglichen Poster: Wenn es um Programmiersprachen und insbesondere um Typsysteme geht, sind die Informationen auf Wikipedia von schlechter Qualität. Trauen Sie ihr nicht.

44voto

ruakh Punkte 167025

Ich habe nachgeforscht und festgestellt, dass die Antwort auf Ihre Frage einfach und überraschenderweise "ja" lautet: Akademische CS-Typen, oder zumindest einige von ihnen, verwenden "untyped" im Sinne von "dynamisch typisiert". Zum Beispiel, Programmiersprachen: Prinzipien und Praktiken Dritte Auflage (von Kenneth C. Louden und Kenneth A. Lambert, veröffentlicht 2012) sagt dies:

Sprachen ohne statische Typsysteme werden gewöhnlich als untypisierte Sprachen (oder dynamisch typisierte Sprachen ). Zu diesen Sprachen gehören Scheme und andere Dialekte von Lisp, Smalltalk und die meisten Skriptsprachen wie Perl, Python und Ruby. Beachten Sie jedoch, dass eine nicht typisierte Sprache es Programmen nicht notwendigerweise erlaubt, Daten zu beschädigen - dies bedeutet lediglich, dass alle Sicherheitsüberprüfungen zur Ausführungszeit durchgeführt werden. [ ]

[ リンク (Anm.: Fettdruck im Original) und verwendet "untyped" auf genau diese Weise.

Ich finde das überraschend (aus denselben Gründen, die afrischke und Adam Mihalcin anführen), aber so ist es eben :-).


Bearbeitet um hinzuzufügen: Weitere Beispiele finden Sie unter der Adresse "untyped languages" in die Google Buchsuche. Zum Beispiel:

[ ] Dies ist der wichtigste Mechanismus zum Verbergen von Informationen in vielen nicht typisierten Sprachen. Zum Beispiel verwendet PLT Scheme [4] generative struct s, [ ]

- Jacob Matthews und Amal Ahmed, 2008 [ リンク ]

[ ] präsentieren wir eine Bindungszeitanalyse für eine untypisierte funktionale Sprache [ ]. [ ] Sie wurde implementiert und wird in einem partiellen Evaluator für einen nebenwirkungsfreien Dialekt von Scheme verwendet. Die Analyse ist jedoch allgemein genug, um auch für nicht-streng typisierte funktionale Sprachen wie Haskell gültig zu sein. [ ]

- Charles Consel, 1990 [ リンク ]

Übrigens habe ich nach Durchsicht der Suchergebnisse den Eindruck, dass ein Forscher, der von einer "untypisierten" funktionalen Sprache schreibt, diese sehr wahrscheinlich als "untypisiert" in demselben Sinne betrachtet wie den untypisierten Lambda-Kalkül, den Adam Mihalcin erwähnt. Zumindest erwähnen mehrere Forscher Scheme und den Lambda-Kalkül im gleichen Atemzug.

Was die Suche nicht Die Frage ist natürlich, ob es Forscher gibt, die diese Identifizierung ablehnen, und nicht betrachten diese Sprachen als "untypisiert". Nun, ich habe dies gefunden:

Dann wurde mir klar, dass es eigentlich keinen Zirkelschluss gibt, denn dynamisch typisierte Sprachen sind keine untypisierten Sprachen - es ist nur so, dass die Typen normalerweise nicht unmittelbar aus dem Programmtext ersichtlich sind.

- jemand (ich kann nicht sagen, wer), 1998 [ リンク ]

aber offensichtlich Die meisten Menschen, die diese Identifizierung ablehnen, würden es nicht für nötig halten, dies ausdrücklich zu sagen.

10voto

Adam Mihalcin Punkte 13694

Untypisiert und dynamisch typisiert sind absolut keine Synonyme. Die Sprache, die am häufigsten als "untypisiert" bezeichnet wird, ist der Lambda-Kalkül, der eigentlich eine unitypisierte Sprache ist - alles ist eine Funktion, so dass wir statisch beweisen können, dass der Typ von allem die Funktion ist. Eine dynamisch typisierte Sprache hat zwar mehrere Typen, bietet dem Compiler aber keine Möglichkeit, diese statisch zu überprüfen, so dass der Compiler gezwungen ist, Laufzeitprüfungen für Variablentypen einzufügen.

Dann ist JavaScript eine dynamisch typisierte Sprache: Es ist möglich, Programme in JavaScript so zu schreiben, dass eine Variable x könnte eine Zahl, eine Funktion, eine Zeichenkette oder etwas anderes sein (und um herauszufinden, was es ist, müsste man das Halting-Problem oder ein anderes schwieriges mathematisches Problem lösen), also kann man x zu einem Argument und der Browser muss zur Laufzeit prüfen, ob x ist eine Funktion.

9voto

Beide Aussagen sind richtig, je nachdem, ob es sich um Werte oder Variablen handelt. JavaScript-Variablen sind nicht typisiert, JavaScript-Werte haben Typen, und Variablen können zur Laufzeit (d. h. "dynamisch") jeden Wertetyp umfassen.

In JavaScript und vielen anderen Sprachen tragen Werte und nicht Variablen Typen. Alle Variablen können sich über alle Wertetypen erstrecken und können als "dynamisch typisiert" oder "untypisiert" betrachtet werden - aus der Perspektive der Typprüfung sind eine Variable, die keinen/unbekannten Typ hat, und eine Variable, die jeden Typ annehmen kann, logisch und praktisch gleichwertig. Wenn Typentheoretiker über Sprachen und Typen sprechen, meinen sie in der Regel dies - Variablen, die Typen tragen -, weil sie daran interessiert sind, Typüberprüfungsprogramme und Compiler usw. zu schreiben, die mit Programmtext (d. h. Variablen) und nicht mit einem laufenden Programm im Speicher (d. h. Werten) arbeiten.

Im Gegensatz dazu tragen in anderen Sprachen, wie z. B. C, Variablen Typen, Werte jedoch nicht. In Sprachen wie Java haben sowohl Variablen als auch Werte einen Typ. In C++ tragen einige Werte (die mit virtuellen Funktionen) Typen und andere nicht. In einigen Sprachen ist es sogar möglich, dass Werte den Typ wechseln, obwohl dies normalerweise als schlechtes Design angesehen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X