Hay preguntas sobre why Java doesn't support unsigned types y algunas preguntas sobre tratar con tipos sin firmar. Hice algunas búsquedas, y parece que Scala tampoco admite tipos de datos sin signo. ¿Está la limitación en el diseño del lenguaje de Java y Scala, en el bytecode generado, o está en la propia JVM? ¿Podría haber algún lenguaje que se ejecute en la JVM y que, por lo demás, sea idéntico a Java (o Scala), pero que admita tipos de datos primitivos sin signo?¿Es la falta de tipos primitivos sin firmar de Java una característica de Java la plataforma o Java el lenguaje?
Respuesta
Java Bytecode Especificación sólo defines signed types:
Los tipos integrales están byte, short, int, y largo, cuyos valores son 8 bits, 16 bits, 32 bits y 64 bits con signo dos enteros complementarios
Pero un lenguaje implementado en la parte superior de la JVM probablemente puede agregar un tipo sin signo en el nivel sintáctico y solo manejar la conversión en la etapa de compilación.
El manejo de la aritmética sin signo es un problema de lenguaje/implementación, no de plataforma; podría simularse en cualquier plataforma incluso si no hubiera soporte nativo.
La JVM no lo tiene como tipo, por lo que Java/Scala/etc. no lo admite "fuera de la caja".
Aunque tipo sin signo podría ser emulado en el nivel de código de bytes, existen algunos inconvenientes con que:
Rendimiento: Usted necesitaría varias operaciones de código de bytes para cada operación aritmética simple. El rendimiento del código con los tipos sin signo emulados sería dos o tres veces peor que el código con tipos firmados.
Compatibilidad: la mayoría de los lenguajes que se ejecutan en una JVM intentan mucho para ser compatibles con la gran cantidad de código de Java que existe. Esto, por supuesto, se estropearía inmediatamente cuando se introducen tipos adicionales o cuando algunas variables con tipos "conocidos" tienen que manejarse de manera diferente.
A la luz de esto los beneficios para los tipos sin signo son mi humilde opinión insignificante.
Las adiciones y sustracciones de números del mismo tamaño no se verán afectadas. Las comparaciones probablemente serían la mayor molestia. – supercat
@supercat: ¿por qué crees eso? –
Las únicas operaciones en las que puedo pensar que se verían afectadas serían la división, las comparaciones y las conversiones a tipos "largos" o de coma flotante. De ellos, las comparaciones se usarían con más frecuencia que las demás, y normalmente tomarían la menor cantidad de tiempo. – supercat
- 1. Uso de tipos primitivos sin firmar
- 2. ¿Los miembros de la entidad deberían ser tipos de datos primitivos o tipos de datos Java?
- 3. Java Reflexión con los tipos primitivos
- 4. Java: Arsenal de tipos de datos primitivos no AUTOBOX
- 5. ¿Por qué Java Collections no almacena directamente tipos de primitivos?
- 6. Colecciones de Java. ¿Por qué no hay tipos primitivos?
- 7. Cuándo utilizar tipos primitivos y de referencia en Java
- 8. ¿La lista de tipos de Java es ambigua?
- 9. Comportamiento de Java extraño con moldes a tipos primitivos
- 10. ¿Los tipos primitivos son diferentes en Java y C#?
- 11. sintaxis de genéricos de la lista de Java para tipos primitivos
- 12. ¿Hay un analizador de Java para el lenguaje Java?
- 13. ¿Está usando Java el lenguaje/plataforma adecuado para desarrollar una aplicación de contabilidad basada en GUI?
- 14. Característica o error: ¿Por qué compila este código de Java?
- 15. ¿Java es un lenguaje de programación compilado o interpretado?
- 16. ¿Por qué la JVM no es independiente de la plataforma, dado que Java (el idioma) es independiente de la plataforma?
- 17. Comprensión de los números sin firmar de Java
- 18. ¿Hay una versión mobi de la especificación de lenguaje Java?
- 19. Notificación de falta de memoria en Java
- 20. ¿Es posible firmar un applet de Java de forma gratuita?
- 21. SHA256withRSA firmar de PHP verificar de JAVA
- 22. Tipos de datos primitivos multiplataforma en C++
- 23. ¿Por qué Java Generics no admite tipos primitivos?
- 24. Configuración de la variable Java String: ¿referencia o valor?
- 25. Portando aplicaciones Java a la plataforma Android
- 26. ¿Falta la configuración regional en Java?
- 27. Fonética Java o pronunciación del lenguaje
- 28. ¿Puede un lenguaje de programación ser parte de una plataforma? (C# y relacionado con Java)
- 29. ¿Cuál es el mejor lenguaje/plataforma para SOA en Linux en un mundo post-Java?
- 30. administrador de archivos para TinyMCE en la plataforma Java
Nunca pensé en buscar las especificaciones de bytecode. Yo debería. Solo miré la Especificación del lenguaje Java y la documentación de Scala. –
"Los operadores de enteros incorporados no indican un desbordamiento (positivo o negativo) de ninguna manera; se envuelven en el desbordamiento". Eso también indicaría que si maneja los casos correctamente, puede implementar tipos de datos sin firmar utilizando los operadores aritmáticos estándar. –
Hace mucho tiempo solía trabajar con la aplicación Java de QuckTime, que es solo una envoltura alrededor de la biblioteca nativa de QuickTime que, si mi memoria no me falla, estaba llena de tipos de enteros no anclados. Fue un poco incómodo, pero la conversión firmada no firmada funcionó bien. –