Was ist der Unterschied zwischen statischen und dynamischen Programmiersprachen? Ich weiß, dass es um Typsysteme geht, aber ich suche nach klareren Abklärungen.Unterschied zwischen statischen und dynamischen Programmiersprachen
Antwort
statische Typisierung
Statische Typisierung bedeutet, dass Typen sind bekannt und auf Korrektheit geprüft, bevor Ihr Programm ausgeführt wird. Dies geschieht oft durch den Compiler der Sprache. Zum Beispiel würde die folgende Java-Methode einen Compiler-Fehler, , bevor Sie Ihr Programm ausführen:
public void foo() {
int x = 5;
boolean b = x;
}
dynamische Typisierung
Dynamische Typisierung bedeutet, dass Arten nur bekannt sind, wie Ihr Programm ausgeführt wird. Zum Beispiel kann die folgende Python (3, wenn es darauf ankommt) Skript ohne Probleme ausgeführt werden:
def erroneous():
s = 'cat' - 1
print('hi!')
Es wird in der Tat Ausgang hi!
.Aber wenn wir erroneous
nennen:
def erroneous():
s = 'cat' - 1
erroneous()
print('hi!')
A TypeError
wird bei Laufzeit erhöht werden wennerroneous
genannt wird.
Statisch typisierte Sprache:
- Sie müssen zuvor den 'Typ' der Variable deklarieren.
NSString *string = @"Hello";
- Sie können nicht Gegenstand (entweder Beton oder primitiven) anderer Art in den Variablen gleichen Namen
NSString *string = @"Hello"; int string = 9; // Not legal, compile type warning
zB statisch speichern Programmiersprache: Ja va, Objective-C, usw.
dynamisch typisierte Sprache:
- Keine Notwendigkeit Objekttyp zu erklären. es wird in Runtime herausgefunden werden.
string = 'Hallo'
- Wir dürfen Objekttyp für gleiche Variable ändern, als Name für ein Objekt mit Zuweisungsoperator gebunden ist.
string = 'Hello' string = 9 // Allowed
z.B. dynamisch typisierte Sprache: Python etc.
-1 Statische und dynamische Typisierung haben nichts mit Annotation/Inferenz des Typs zu tun. Es kommt vor, dass viele alte statisch typisierte Sprachen auf Typ-Anmerkungen bestehen, aber das ist irrelevant. Es gibt statisch typisierte Sprachen ohne Typanmerkungen. (Haskell zum Beispiel.) – sleeparrow