Dies kam in einer Diskussion mit einem Freund auf, und ich fand es schwer, mir irgendwelche guten Argumente auszudenken. Welche Vorteile bietet schwaches Tippen?
type-systems
type-safety
weak-typing
Fischtoaster
quelle
quelle
Antworten:
Das Problem bei dieser Art von Diskussion ist einfach, dass die Begriffe "schwaches Tippen" und "starkes Tippen" undefiniert sind, im Gegensatz zu beispielsweise den Begriffen "statisches Tippen", "dynamisches Tippen", "explizites Tippen", "implizites Tippen", " duck typing "," strukturelle Typisierung "oder" nominelle Typisierung ". Selbst die Begriffe "Manifest Typing" und "Latent Typing", die noch offene Bereiche der Forschung und Diskussion sind, sind wahrscheinlich besser definiert.
Solange Ihr Freund nicht den Begriff "schwache Typisierung" definiert, der stabil genug ist, um als Grundlage für eine Diskussion zu dienen, ist es nicht einmal sinnvoll, diese Frage zu beantworten.
Abgesehen von Nicks Antwort hat sich leider auch keiner der Antwortenden die Mühe gemacht, ihre Definition anzugeben, und Sie können die Verwirrung sehen, die in einigen Kommentaren auftaucht. Es ist schwer zu sagen, da niemand ihre Definitionen tatsächlich zur Verfügung stellt, aber ich glaube, ich zähle mindestens drei verschiedene auf genau dieser Seite.
Einige der häufiger verwendeten Definitionen sind (und ja, ich weiß , dass so ziemlich keiner von ihnen macht keinen Sinn, aber das sind die Definitionen ich Leute benutzen tatsächlich gesehen haben):
Die drei am häufigsten verwendeten Definitionen sind jedoch
Wenn sich nicht alle auf eine Definition einigen, was "schwaches Tippen" überhaupt ist , macht es nicht einmal Sinn, darüber nachzudenken, was seine Vorteile sein könnten. Vorteile von was? Noch schlimmer ist , wenn es keine Definition ist überhaupt , dann kann jeder verschieben nur ihre Definitionen , ihre Argumente zu passen, und jede Diskussion ist ziemlich viel garantiert devolve in einen Flamewar.
Ich selbst habe meine Definition im Laufe der Jahre mehrmals persönlich geändert und bin jetzt an dem Punkt angelangt, an dem ich die Begriffe nicht mehr für nützlich halte. Früher dachte ich auch, dass schwaches Tippen (in seinen verschiedenen Definitionen) einen Platz im Shell-Scripting hat, aber wenn ich das gleiche Problem in Bash und PowerShell lösen muss, werde ich schmerzlich daran erinnert, wie falsch ich war.
quelle
Denken Sie daran, es gibt zwei Hauptkonzepte, die häufig verwechselt werden:
Dynamische Eingabe
Die Vorteile werden hier oft als nur für "neue" Programmierer abgelehnt, können aber auch für jeden Programmierer praktisch sein:
Weniger Code in allen Fällen, in denen Sie anderenfalls einen neuen Wert übertragen oder zuweisen müssten:
Loses oder schwaches Tippen
Leistungen:
Implizite boolesche Auswertung . Jeder Typ kann als Boolescher Wert ausgewertet werden. Dies hat auch Nebeneffekte, wie zum Beispiel, dass ein Teil von a
||
bei der Zuweisung verwendet werden kann, ohne in einen Booleschen Wert zu konvertieren:Nochmals weniger Code:
Sogar Java musste teilweise mit dem impliziten Aufruf gehen,
.toString()
wenn Objekte mit a kombiniert wurdenString
. Andernfalls würden Java-Programmierer es den ganzen Tag lang verfluchen (Log-Anweisungen wären außer Kontrolle).Beide Definitionen stammen von http://en.wikipedia.org/wiki/Type_system . Es sagte es besser als ich konnte.
quelle
if
, dass die nächste Zeile legal und fehlerfrei ist , egal ob ein Block oder eine andere komplexere (auch Laufzeit- oder dynamische) Logik verwendet wird.Das Hauptargument für eine schwache Typisierung ist die Leistung. (Hiermit wird die Frage des OP wie angegeben beantwortet.) Es gibt viele gute Diskussionen über dynamische vs. statische, implizite vs. explizite. usw.
C ist die bekannteste schwach typisierte Sprache und führt keine Laufzeitüberprüfung oder Kompilierzeitüberprüfung des Variablentyps durch. Im Wesentlichen können Sie ein
char *
zu einem werfenint *
und die Sprache würde sich nicht interessieren. Also warum würdest du das tun?Die C-Programmierung kommt der Vorgehensweise beim Zusammenbau ziemlich nahe, sodass es Zeiten gibt, in denen Sie sich nur um eine Adresse kümmern. Es ist nicht ungewöhnlich, aus
void *
diesem Grund eine Referenz zu schreiben oder zu übergeben . Wenn Sie wissen, wie der Speicher organisiert ist (wieder ein C- und Assembler-Problem), können Sie einige ziemlich coole Berechnungen basierend auf der Adresse im durchführenvoid *
, um die benötigten Informationen zu erhalten. Auf diese Weise können Sie den Prozess, den Sie beispielsweise in Java durchlaufen müssten, kurzschließen.Während die Typüberprüfung zur Laufzeit keinen außergewöhnlichen Overhead hat, reicht es manchmal gerade aus, um einen kritischen Abschnitt zu langsam werden zu lassen. Ich denke in diesem Fall hauptsächlich an eingebettete Programmierung und Echtzeitsysteme.
Das heißt, in den meisten Fällen hilft ein starkes Typsystem, das entweder auf Kompilierzeit oder Laufzeit überprüft wird, häufiger als es schmerzt.
quelle
Eine schwache Eingabe ist in der Regel für Anfänger einfacher zu erfassen, beispielsweise in Excel, Javascript und VBScript. Sie tauschen auch etwas Entwicklungsgeschwindigkeit gegen potenzielle Fehler.
Guter Artikel zum Thema: Starkes Tippen vs. Starkes Testen
quelle