Wenn wir die Ausdrücke "statisch getippt" und "dynamisch typisiert" als Jargon betrachten, wenn eine Sprache die Gültigkeit von Operationen gegen Typen überprüft, dann ist es richtig, Mathematica mit dem Jargon "untypisiert" zu charakterisieren - in dem Sinne, dass es "nie" prüft, ob eine Operation für einen Typ gültig ist.
Ich mag Belisarius 'Verwendung des Begriffs "typ-agnostic" jedoch. Ich sage das, weil, während fast alle Typprüfungen in der Sprache idiomatisch sind (d.h.implementiert vom Programmierer, nicht die Sprache), so ist das Konzept der Anwendung eines Operators auf typisierte Operanden!
Betrachten Sie das "unsinnige" Beispiel von 1 + "foo"
. Ich denke, es ist fair zu sagen, dass ein bedeutender Bruchteil (nahe der Einheit) aller Mathematica-Benutzer über Fälle wie diese stolpert, wenn sie zuerst die Sprache lernen. Das Problem ist besonders offensichtlich, wenn man Code zum Beispiel in den Stil von C schreibt. In Mathematica-Kreisen gibt es viele Diskussionen darüber, wie man mit solchen Situationen umgeht.
Auf der anderen Seite ist diese Schwäche auch die größte Stärke von Mathematica. Mathematica ist für die Erstellung neuer Notationen optimiert. Viele, viele Notationen haben das Konzept +
, das sich sehr ähnlich verhält wie die Addition in der elementaren Arithmetik. Beim Aufbau einer solchen Notation wäre es sehr ungünstig, wenn Mathematica eintrat und beschwerte, dass die Operanden +
keine Zahlen waren. In solch einer höheren Anwendung von Mathematica ist das "unsinnige" Beispiel nicht nur "sensibel", sondern tatsächlich entscheidend.
Also, in diesem Sinne ist die Frage des Typs häufig strittig. Daher mag ich Belisarius "typ-agnostische" Charakterisierung. Upvote ihn, ich;)
bearbeiten
Ich werde versuchen zu klären, was ich im Sinn hatte, als zwischen „untypisierten“ und „Typ-Agnostiker“ zu unterscheiden.
Beim Lesen der verschiedenen Antworten und Kommentare versuchte ich herauszufinden, was der Unterschied zwischen Mathematica und LISP war. Letzteres wird allgemein als ein Beispiel für "dynamisch typisiert" gehalten, obwohl der Kern-LISP-Evaluator Mathematica sehr ähnlich ist und kaum eine Typ-Überprüfung durchführt. Die Typfehler, die wir in LISP-Programmen sehen, werden meistens durch hartcodierte Checks in (typischerweise eingebauten) Funktionen ausgegeben. Beispielsweise akzeptiert +
nur numerische Argumente, obwohl der Evaluator selbst sich nicht um die eine oder andere Art kümmern kann. Abgesehen davon unterscheidet sich das "Gefühl" der Programmierung in LISP stark von dem "Gefühl" von Mathematica (zumindest für mich). Das 1 + "foo"
Beispiel erfasst wirklich diesen Unterschied.
Während ich weitgehend mit "untypisiert" als die Charakterisierung von Mathematica stimme, fühlte ich immer noch, dass etwas fehlte. Assembler scheint für mich untypisiert zu sein, genauso wie früher FORTRAN und pre-ANSI C. In diesen Fällen war das Bitmuster der Argumente alles, worauf es ankommt, und die Programme würden munter weiterlaufen, wenn ich ein Stringargument mit einer ganzen Zahl übergeben würde. Mathematica teilt sicherlich dieses untypische Verhalten. Aber es gibt einen Unterschied: In Assembler und FORTRAN und C ist es äußerst selten, dass dieser Mangel an Typprüfung zu einem guten Ergebnis führt. Wie ich oben erwähnt habe, ist es in Mathematica möglich und manchmal sogar üblich, sich auf diese Art von Verhalten zu verlassen.
Geben Sie "typ-agnostic" ein. Ich mochte seine unverbindliche Haltung und klang weniger drastisch als "untypisiert". Ich fühlte, dass es die im Wesentlichen untypisierte Natur von Mathematica widerspiegelte, ließ aber etwas Spielraum für jene Sprachmerkmale, die bereitwillig die idiomatische Typprüfung im dynamischen LISP-Stil unterstützen (d. H. Das "Kopf" -Idiom und unterstützende Funktionalität).
Also kurz gesagt, ich fühle, dass Mathematica schwebt zwischen völlig untypisiert und dynamisch typisiert. "Typ-agnostisch" hat diese Stimmung für mich erfasst. YMMV :)
Ich gebe gerne zu, dass niemand wahrscheinlich alles, was ich in dieser Antwort geschrieben habe einfach durch die Überprüfung der Sätze "untypisiert" und "typ-agnostic" rekonstruieren kann. Wiederum betone ich, dass "untypisiert" eine faire Charakterisierung von Mathematica ist, aber ich mag auch die Tatsache, dass "typen-agnostisch" viele der Fragen aufwirft, die in den verschiedenen Antworten auf diese SO-Frage behandelt werden.
@Yaroslav Bulatov: Der Beitrag, den du zitiertest, handelte von Mathematicas Leistung. Diese Stack-Overflow-Frage hat überhaupt nichts mit Mathematicas Leistung zu tun. Hier geht es darum, das Typsystem von Mathematica zu klassifizieren. –
die Frage scheint subjektiv –
@Yaroslav Bulatov: Wie so? –