5 Stimmen

Kann jemand erklären, wie C, C++ und Java in Bezug auf dynamische oder statische Sprachen funktionieren?

Kann mir jemand erklären, wie C++ Java in Bezug auf dynamisch typisierte oder statisch typisierte Sprachen funktioniert?

Ich habe irgendwo gelesen, dass C, C++ und Java alle statische Sprachen sind. Aber ich erinnere mich, dass es andere Meinungen dazu gibt. Sehr verwirrend.

Gracias.

6voto

Jim Balter Punkte 15501

Welche anderen Meinungen? Es steht außer Frage, dass C, C++ und Java allesamt statisch typisierte Sprachen sind, wobei C++ und Java einige dynamisch typisierte Funktionen aufweisen. Es gibt noch eine andere Frage: stark oder schwach typisiert, die sich hauptsächlich auf implizite Konvertierungen und Überladung bezieht. Es gibt zahlreiche ausführliche Diskussionen zu diesen Themen im Internet; vielleicht möchten Sie mit folgenden Seiten beginnen http://en.wikipedia.org/wiki/Type_system

1voto

Mike Mueller Punkte 1942

Es ist ein Spektrum. C hat keine dynamischen Typisierungsfunktionen, obwohl es Ihnen erlaubt, die void * und Casts, um selbst etwas zu tricksen. In C++ und Java werden Klassenmethoden dynamisch verteilt, so dass es in C++ und Java Fälle gibt, in denen man bis zur Laufzeit nicht weiß, welche Methode tatsächlich für ein Objekt aufgerufen wird. Java verfügt über eine Reflection-API, mit der Sie Typen zur Laufzeit untersuchen und ändern können, ist also etwas dynamischer als C++. Dann gibt es Sprachen wie Python und Ruby, die so gut wie vollständig dynamisch sind - fast nichts wird zur Kompilierzeit überprüft, und es gibt Funktionen wie "Duck Typing", bei denen der tatsächliche Typ nicht so wichtig ist, solange er die Operation unterstützt, die Sie interessiert.

1voto

Blaisorblade Punkte 6246

Nach der Antwort von hlovdal möchte ich noch einmal Benjamin Pierce zitieren, der sich positiv zu dieser Frage geäußert hat. Ich beziehe mich auf Kapitel 1 seines Buches "Types and Programming Languages" und erweitere es.

Java ist eine sicher Sprache (d.h. Laufzeit-Typfehler werden verhindert) mit meist statisch Typprüfung. Aufgrund der Vererbung (genauer gesagt der Subtypisierung) kann der Typ einer Variablen jedoch allgemeiner sein als der Typ des angezeigten Wertes. Darüber hinaus ermöglicht die Sprache auch die Überprüfung, ob ein Objekt einen bestimmten Typ hat, und das Downcasting von Objekten zur Laufzeit - bei solchen Operationen werden die Typen zur Laufzeit überprüft. Daher hat jedes Objekt einen Zeiger auf eine Laufzeitrepräsentation seines Typs.

C ist eine unsichere Sprache mit statischer Typprüfung. Typen gibt es zur Laufzeit nicht. C++ ist immer noch eine unsichere Sprache mit statischer Typprüfung, bietet aber auch eine eingeschränkte Typidentifikation zur Laufzeit für Klassen, die bestimmte Bedingungen erfüllen, d.h. über eine virtuelle Methode verfügen (wie alle Objekte in Java).

Editar : Die "statische Typisierung" ist eine no ein klar definiertes Konzept. Um das zu zeigen, werde ich (grob) drei Eigenschaften definieren, die man mit "statischer Typisierung" in Verbindung bringen könnte.

  1. Bevor das Programm ausgeführt wird, wird es auf seinen Typ geprüft: Sowohl Java als auch C und C++ erfüllen dieses Kriterium.
  2. Wenn das Programm typgeprüft ist, können wir ihm garantieren, dass es zur Laufzeit keine Fehler einer bestimmten Klasse hat: C und C++ erfüllen dieses Kriterium nicht, Java erfüllt es (obwohl dies nur möglich ist, weil fehlgeschlagene Casts ausdrücklich von dieser Fehlerklasse ausgeschlossen sind).
  3. Zur Laufzeit existiert keine sprachdefinierte Typdarstellung. Diese Eigenschaft trifft sowohl auf Java als auch auf C++ zu und kennzeichnet Sprachen wie C und Pascal.

Wenn man sagt, dass eine Sprache "statisch typisiert" ist, wenn sie alle drei oben genannten Eigenschaften hat, dann ist weder Java, C noch C++ statisch typisiert.

0voto

hlovdal Punkte 24350

Bezüglich der unterschiedlichen Meinungen zu statischer/starker Typisierung bin ich zufällig über Folgendes gestolpert alter Slashdot-Kommentar gerade nachdem ich diese Frage gelesen habe:

Meine Lieblingsdefinition von "starker Typisierung" stammt von Shriram Krishnamurthi's Programmiersprachen: Anwendung und Interpretation (p. 205):

Was also ist "starke Typisierung"? Soweit wir das beurteilen können, ist dies ein bedeutungsloser Phrase, und die Leute benutzen sie oft in einer unsinnigen Weise.

Benjamin Pierce (Autor von Typen und Programmiersprachen) schrieb etwas ähnliches (siehe Mark Jason Dominus zitiert Pierce zu " _ Tippen" ):

Vor etwa einem Jahr habe ich einige Wochen lang versucht, die Terminologie von "stark typisiert" und "statisch typisiert", "sicher" usw., und fand es erstaunlich schwierig. Wie Ihr Nachricht hervorhebt, ist die Verwendung dieser Begriffe so unterschiedlich verwendet, dass sie fast unbrauchbar macht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X