Gibt es eine statisch schwache typisierte Sprache?

9

Ich habe über

gelesen
  • static (Typen werden zur Kompilierungszeit überprüft) und
  • dynamische Typen (Typen zur Laufzeit geprüft) Typen

versus

  • strong (keine implizite Konvertierung) und
  • schwache Typen (implizite Konvertierung)

und ich verstehe, dass sie verschiedene Dinge sind (wie auch diskutiert hier ) Ich habe auf diese Weise an Beispielsprachen gedacht:

  • statisch - stark (C, C ++, Java, ..)
  • statisch - schwach (???)
  • dynamisch - stark (python, ruby, ..)
  • dynamisch - schwach (perl, javascript, ..)

Also meine Frage ist, gibt es dort eine statisch-schwache getippte Sprache? (Ich kann mir vorstellen, dass es keinen Sinn hätte, wenn nicht gar keiner). Und sind auch mein Verständnis / Beispiele oben korrekt?

    
none 26.12.2012, 21:04
quelle

2 Antworten

2

Die Definition von stark und schwach typisiert ist nicht gut definiert, insbesondere im Zusammenhang mit der Bewertung nur einer Sprache. Es ist eine häufig verwendete Achse, auf der Sprachen verglichen werden können, und in diesem Kontext gewinnen starke und schwache Typisierung mehr Bedeutung, aber es ist wichtig zu verstehen, dass es keine strenge Definition wie statisch und dynamisch gibt. Was ein Typsystem schwach oder stark macht, hängt davon ab, auf welche Weise der Programmierer Typfehler erzeugen kann.

Deaktiviertes explizites Casting

Viele Leute würden C als schwach einstufen, weil ein Programmierer Typen schreiben darf. Ich kann einen Zeiger zu einem Zeichen hinzufügen, wenn ich C sage, dass sie beide Ganzzahlen sind.

%Vor%

In Haskell kann ich jedoch explizit von Typ zu Typ wechseln, aber nur bestimmte Typen funktionieren.

%Vor%

Java verfügt auch über ein statisches Casting, mit dem der Programmierer beispielsweise Objekte verkleinern kann. Dies macht das statische System nicht hörbar. Aber Java hat aus genau diesem Grund eine dynamische Typprüfung. Ja, Java hat dynamische und statische Typprüfungen. Aus diesem Grund denke ich jedoch, dass viele Leute Java für stark typisiert halten würden.

Automatisches Gießen

Perl und Javascript nehmen Strings und betrachten sie als Zahlen, wenn sie wie eine Zahl aussehen und automatisch funktionieren.

%Vor%

Wenn Sie eine Zeichenkette zu einer Zahl in, sagen wir, Scheme wollen, müssen Sie explizit mit einer Funktion konvertieren, die eine Überprüfung durchführt und eine Ausnahme auslöst, wenn die Zeichenkette keine Zahl ist.

%Vor%

Aus diesem Grund würden viele Leute Scheme stark typisiert betrachten.

überhaupt keine Typen

In einigen Sprachen gibt es keine Typen. Der untypisierte Lambda-Kalkül ist ein solches Beispiel. Dies ist eindeutig nicht stark typisiert. Alles ist eine Funktion. Ich kann Zahlen verwenden, die Kirchenziffern oder Paare oder Strings oder was auch immer verwenden, mit verschiedenen Kodierungen, aber Werte bedeuten nur, was ich stimme ihnen zu bedeuten und es gibt sicherlich Überschneidungen.

Vergleich

Wie gesagt, die Begriffe sind nicht gut definiert, aber sie sind ein wenig nützlicher, wenn sie relativ verwendet werden. Zum Beispiel könnte ich behaupten, dass OCaml stärker typisiert ist als Java, weil Java explizites statisches Down-Casting erlaubt, während OCaml dies nicht tut.

Fazit

Die Begriffe sind nicht streng, aber sie sind nützlich. Um Ihre ursprüngliche Frage zu beantworten, sind C / C ++ meiner Meinung nach statisch und schwach typisiert, so dass sie der Beschreibung entsprechen.

    
mmachenry 01.04.2014, 17:58
quelle
-1

C # erlaubt benutzerdefinierte implizite Konvertierungen, so dass es zu Ihrer Definition von "statisch" und "schwach" passt (obwohl die "Schwäche" begrenzt ist).

    
Rodrick Chapman 31.10.2013 04:23
quelle