Ist Javas Fehlen von vorzeichenlosen Primitiven eine Eigenschaft von Java, der Plattform oder Java der Sprache?

8

Es gibt Fragen zu , warum Java keine unsignierten Typen unterstützt und ein paar Fragen zum Umgang mit unsignierten Typen. Ich habe ein wenig gesucht und es scheint, dass Scala auch keine unsignierten Datentypen unterstützt. Ist die Limitierung im Sprachdesign von Java und Scala, im generierten Bytecode oder in der JVM selbst? Könnte es eine Sprache geben, die auf der JVM läuft und ansonsten identisch mit Java (oder Scala) ist, unterstützt jedoch unsigned primitive Datentypen?

    
Thomas Owens 01.12.2011, 17:27
quelle

3 Antworten

8

Java-Bytecode-Spezifikation definiert nur signierte Typen :

  

Die Integraltypen sind byte, short, int und long, deren Werte sind   8-Bit-, 16-Bit-, 32-Bit- und 64-Bit-Zweier-Komplement-Ganzzahlen mit Vorzeichen

Aber eine Sprache, die oben auf der JVM implementiert ist, kann wahrscheinlich einen vorzeichenlosen Typ auf der syntaktischen Ebene hinzufügen und einfach die Konvertierung in der Kompilierungsstufe handhaben.

    
Dmitry B. 01.12.2011, 17:34
quelle
3

Obwohl vorzeichenloser Typ auf Bytecode-Ebene emuliert werden kann, gibt es einige Nachteile:

  • Leistung: Sie benötigen mehrere Bytecode-Operationen für jede einfache arithmetische Operation. Die Leistung von Code mit den emulierten vorzeichenlosen Typen wäre zwei- oder dreimal schlechter als der Code mit vorzeichenbehafteten Typen.

  • Kompatibilität: Die meisten Sprachen, die auf einer JVM laufen, sind sehr bemüht, mit der riesigen Menge an Java-Code kompatibel zu sein. Dies würde natürlich sofort verdorben werden, wenn zusätzliche Typen eingeführt werden oder wenn einige Variablen mit "bekannten" Typen anders behandelt werden müssen.

In Anbetracht dessen sind die Vorteile für vorzeichenlose Typen IMHO vernachlässigbar.

    
A.H. 01.12.2011 18:06
quelle
2

Die Behandlung nicht vorzeichenbehafteter Arithmetik ist ein Sprach- / Implementierungsproblem, keine Plattform - sie könnte auf jeder Plattform simuliert werden, selbst wenn keine native Unterstützung vorhanden wäre.

Die JVM hat es nicht als Typ, also Java / Scala / etc. Unterstütze es nicht "out of the box".

    
Dave Newton 01.12.2011 17:36
quelle