Starke / schwache Typisierung und statische / dynamische Typisierung sind orthogonal.
Bei Stark / Schwach geht es darum, ob die Art eines Wertes funktional von Bedeutung ist. In einer schwach typisierten Sprache können Sie zwei Zeichenfolgen verwenden, die zufällig mit Ziffern gefüllt sind, und diese ganzzahlig addieren. In einer stark typisierten Sprache ist dies ein Fehler (es sei denn, Sie wandeln oder konvertieren die Werte zuerst in die richtigen Typen). Starke / schwache Eingabe ist keine Schwarz-Weiß-Sache; Die meisten Sprachen sind weder 100% streng noch 100% schwach.
Bei der statischen / dynamischen Typisierung geht es darum, ob Typen an Werte oder an Bezeichner gebunden sind. In einer dynamisch typisierten Sprache können Sie jeder Variablen einen beliebigen Wert zuweisen, unabhängig vom Typ. Die statische Typisierung definiert einen Typ für jeden Bezeichner, und die Zuweisung von einem anderen Typ ist entweder ein Fehler oder führt zu einer impliziten Umwandlung. Einige Sprachen verfolgen einen hybriden Ansatz, der sowohl statisch deklarierte Typen als auch nicht typisierte Bezeichner ("Varianten") zulässt. Es gibt auch Typinferenz, einen Mechanismus, bei dem statische Typisierung möglich ist, ohne explizit den Typ von allem zu deklarieren, indem der Compiler die Typen herausfindet (Haskell verwendet dies ausgiebig, C # macht es über das var
Schlüsselwort verfügbar).
Eine schwache dynamische Programmierung ermöglicht einen pragmatischen Ansatz. Die Sprache stört die meiste Zeit nicht, aber sie greift auch nicht ein, wenn Sie sich in den Fuß schießen. Im Gegensatz dazu zwingt eine starke statische Typisierung den Programmierer, bestimmte Erwartungen an Werte explizit im Code auszudrücken, sodass der Compiler oder Interpreter eine Fehlerklasse erkennen kann. Mit einem guten Typensystem kann ein Programmierer genau definieren, was mit einem Wert getan werden kann und was nicht. Wenn jemand versehentlich etwas Unerwünschtes versucht, kann das Typensystem dies oft verhindern und genau zeigen, wo und warum etwas schief geht.