Original Hochtöner hier. :)
Zunächst bin ich etwas amüsiert / schockiert, dass mein Tweet so ernst genommen wird! Wenn ich gewusst hätte, dass es so weit verbreitet wird, hätte ich mehr als 30 Sekunden damit verbracht, es zu schreiben!
Thiago Silva weist zutreffend darauf hin, dass "statisch" und "dynamisch" die Typprüfung genauer beschreiben als Schriftsysteme . Tatsächlich ist es nicht richtig zu sagen, dass eine Sprache entweder statisch oder dynamisch typisiert ist. Vielmehr hat eine Sprache ein Typensystem, und eine Implementierung dieser Sprache erzwingt das Typensystem möglicherweise durch statische Prüfung oder dynamische Prüfung oder beides oder beides (obwohl dies keine sehr ansprechende Sprachimplementierung wäre!).
Es gibt bestimmte Typsysteme (oder Merkmale von Typsystemen), die für statische Überprüfungen besser geeignet sind, und bestimmte Typsysteme (oder Merkmale von Typsystemen), die für dynamische Überprüfungen besser geeignet sind. Wenn Sie beispielsweise in Ihrer Sprache im Text eines Programms angeben können, dass ein bestimmter Wert immer ein Array von Ganzzahlen sein muss, ist es relativ einfach, ein statisches Prüfprogramm zu schreiben, um diese Eigenschaft zu überprüfen. Umgekehrt, wenn Ihre Sprache Untertypen hat und Downcasting zulässt, ist es relativ einfach, die Gültigkeit eines Downcasts zur Laufzeit zu überprüfen, dies ist jedoch zur Kompilierungszeit äußerst schwierig.
Was ich mit meinem Tweet wirklich gemeint habe, ist einfach, dass die überwiegende Mehrheit der Sprachimplementierungen eine gewisse dynamische Typprüfung durchführt. Ebenso hat die überwiegende Mehrheit der Sprachen einige Merkmale, die sich nur schwer (wenn nicht gar unmöglich) statisch überprüfen lassen. Downcasting ist ein Beispiel. Weitere Beispiele sind ein arithmetischer Überlauf, die Überprüfung der Array-Grenzen und die Überprüfung auf Null. Einige davon können unter bestimmten Umständen statisch überprüft werden, aber im Großen und Ganzen ist es schwierig, eine Sprachimplementierung zu finden, die zur Laufzeit keine Überprüfung durchführt.
Das ist keine schlechte Sache. Es ist nur eine Beobachtung, dass es viele interessante Eigenschaften gibt, die unsere Sprachen erzwingen sollen, und dass wir nicht wirklich wissen, wie man sie statisch überprüft. Und es ist eine Erinnerung daran, dass Unterscheidungen wie "statische Typen" gegenüber "dynamischen Typen" bei weitem nicht so eindeutig sind, wie manche Leute glauben machen. :)
Eine letzte Anmerkung: Die Begriffe "stark" und "schwach" werden in der Programmiersprachenforschung nicht wirklich verwendet und haben auch keine wirklich einheitliche Bedeutung. Im Allgemeinen habe ich festgestellt, dass jemand, der sagt, dass eine Sprache "stark tippt" und eine andere "schwach tippt", wirklich sagt, dass seine Lieblingssprache (die mit "stark tippt") dies verhindert einen Fehler machen, den die andere Sprache (die mit "schwacher Typisierung") nicht macht - oder umgekehrt, dass ihre Lieblingssprache (die mit "schwacher Typisierung") es ihnen erlaubt, eine coole Sache zu machen, die die andere Sprache (die "schwache Typisierung") macht eine mit "starker typisierung") tut das nicht.