Warum werden schwach typisierte Sprachen immer noch aktiv entwickelt?

17

Ich frage mich, warum schwach typisierte Sprachen immer noch aktiv entwickelt werden. Welchen Nutzen kann man beispielsweise davon ziehen, schreiben zu können?

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

anstatt die sehr unterschiedliche, stark typisierte Version zu verwenden

int someInt = 1;
(...)
string SomeString = 'SomeText';

Es ist richtig, dass Sie im zweiten Beispiel eine zusätzliche Variable deklarieren müssen, aber tut das wirklich weh? Sollten nicht alle Sprachen eine starke Typisierung anstreben, da dies die Typensicherheit zur Kompilierungszeit erzwingt und so einige Fallstricke bei der Typumwandlung vermeidet?

DotNetStudent
quelle
9
"Stark getippt" ist kein genau definierter Begriff. Meistens bedeutet es "Sie können das Typsystem nicht untergraben". Es ist orthogonal zu dem, was Sie oben beschrieben haben, was latent oder statisch oder dynamisch sein kann.
Frank Shearar
10
Was fehlt mir, das dies vom Flammenköder mit mehreren eng verwandten, möglicherweise sogar doppelten Fragen (durchsuchen Sie einfach SackOverflow nach Fragen, die statische und dynamische Typisierung in ihren Tags erwähnen) zur legitimen Frage bewegt?
1
Sowohl bei statisch als auch bei dynamisch typisierten Sprachen gibt es Vor- und Nachteile. Dynamisch typisierte Sprachen eignen sich gut für eine schnelle Entwicklung oder ein schnelles Prototyping (daher werden "Skriptsprachen" normalerweise dynamisch typisiert), wohingegen statisch typisierte Sprachen (wohl) einfacher zu warten und zu erweitern sind, wenn sie zu großen, komplizierten Projekten heranwachsen.
Charles Salvia
6
Das erste Beispiel ähnelt Python, in dem Variablen keinen deklarierten Typ haben. Python ist jedoch eine sehr stark typisierte Sprache, da die Objekte selbst einen Typ haben, der sich kaum ändern oder erzwingen lässt. Ich denke, der Missbrauch der Terminologie macht diese Frage sehr schwer zu beantworten.
S.Lott
1
@delnan Die Tatsache, dass diese Frage zwei vernünftige Antworten liefert und sich nicht in einen Flammenkrieg verwandelt, hilft.
Adam Lear

Antworten:

25

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 varSchlü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.

tdammers
quelle
In einer richtigen, schwach typisierten Sprache wie HyperTalk mit separaten Operatoren für die Verkettung und Addition von Zeichenfolgen (z. B. &für die Verkettung vorausgesetzt) ​​sind Operationen eindeutig "12"+3oder 45 & "6"eindeutig (sie berechnen 15 bzw. "456"). In einer stärker typisierten Sprache kann der Operator "+" sowohl für die Verkettung von Zeichenfolgen als auch für die numerische Addition sicher überladen werden, ohne dass Mehrdeutigkeiten auftreten, da Operationen mit Zeichenfolgen und Zahlen verboten wären. Probleme treten auf, wenn die Sprache weder die Typen noch die auszuführenden Operationen angibt.
Supercat
4

Schwaches Tippen ist eher im Sinne von 1 == "TRUE". Dieser Abschnitt in der Wikipedia verdeutlicht den Unterschied.

Bitte beachten Sie, dass kein Beispiel aus der Wikipedia statisch typisiert ist, worauf Sie in Ihrem zweiten Beispiel verweisen.

Wenn also die Frage lautet, warum Menschen dynamisch getippte Sprachen verwenden, lautet die Antwort: Statische Typsysteme schränken Sie ein. Viele Menschen haben einfach noch nie mit einem ausdrucksstarken statischen Typensystem gearbeitet, was sie zu dem Schluss führt, dass die Nachteile der statischen Typisierung die Vorteile überwiegen.

back2dos
quelle
0

Schwache Sprachen werden immer noch entwickelt, weil die Leute sie benutzen und mögen. Wenn Sie schwaches Tippen nicht mögen, verwenden Sie keine schwach getippten Sprachen. Zu erklären, dass etwas der einzig wahre Weg ist und dass jeder es tun sollte, ignoriert die Kompliziertheit der Welt.

mjfgates
quelle
0

Sollten nicht alle Sprachen eine starke Typisierung anstreben, da dies die Typensicherheit zur Kompilierungszeit erzwingt und so einige Fallstricke bei der Typumwandlung vermeidet?

Nicht unbedingt. Lernziel C: Ein Primer behandelt diese Frage direkt im Kontext von Lernziel C:

Schwach typisierte Variablen werden häufig für Dinge wie Auflistungsklassen verwendet, bei denen der genaue Typ der Objekte in einer Auflistung möglicherweise unbekannt ist. Wenn Sie es gewohnt sind, stark typisierte Sprachen zu verwenden, könnten Sie denken, dass die Verwendung schwach typisierter Variablen Probleme verursachen würde, aber sie bieten tatsächlich eine enorme Flexibilität und ermöglichen eine viel größere Dynamik in Objective-C-Programmen.

Caleb
quelle