Arquitecturas exóticas que preocupan a los comités de estándares

Resuelto Yakov Galka asked hace 13 años • 7 respuestas

Sé que los estándares C y C++ dejan definidos muchos aspectos de la implementación del lenguaje solo porque si hubiera una arquitectura con otras características, un compilador de confirmación estándar para esa arquitectura necesitaría emular esas partes del lenguaje, lo que resultaría en un código de máquina ineficiente. .

Seguramente hace 40 años cada computadora tenía su propia especificación única. Sin embargo, no conozco ninguna arquitectura utilizada hoy en día donde:

  • CHAR_BIT != 8
  • signedno es complemento a dos (escuché que Java tuvo problemas con este).
  • El punto flotante no es compatible con IEEE 754 (Editar: quise decir "no en codificación binaria IEEE 754").

La razón por la que pregunto es que a menudo le explico a la gente que es bueno que C++ no exija ningún otro aspecto de bajo nivel como tipos de tamaño fijo . Es bueno porque, a diferencia de 'otros lenguajes', hace que su código sea portátil cuando se usa correctamente (Editar: porque se puede portar a más arquitecturas sin requerir emulación de aspectos de bajo nivel de la máquina, como por ejemplo, aritmética en complemento a dos en arquitectura de signo+magnitud) . Pero me siento mal por no poder señalar ninguna arquitectura específica.

Entonces la pregunta es: ¿qué arquitecturas exhiben las propiedades anteriores?

uint*_tson opcionales.

Yakov Galka avatar Aug 07 '11 16:08 Yakov Galka
Aceptado

Echa un vistazo a este

Servidores Unisys ClearPath Dorado

ofreciendo compatibilidad con versiones anteriores para personas que aún no han migrado todo su software Univac.

Puntos clave:

  • palabras de 36 bits
  • CHAR_BIT == 9
  • complemento de uno
  • Punto flotante no IEEE de 72 bits
  • espacio de direcciones separado para código y datos
  • palabra dirigida
  • sin puntero de pila dedicado

No sé si ofrecen un compilador de C++, pero podrían hacerlo .


Y ahora ha aparecido un enlace a una edición reciente de su manual en C:

Manual de referencia de programación del compilador Unisys C

La sección 4.5 tiene una tabla de tipos de datos con 9, 18, 36 y 72 bits.

tamaño y rango de tipos de datos en el compilador USC C

Bo Persson avatar Aug 07 '2011 11:08 Bo Persson

Ninguna de sus suposiciones es válida para los mainframes. Para empezar, no conozco ningún mainframe que use IEEE 754: IBM usa punto flotante base 16, y ambos mainframes Unisys usan base 8. Las máquinas Unisys son un poco especiales en muchos otros aspectos: Bo ha mencionado el 2200 arquitectura, pero la arquitectura MPS es aún más extraña: palabras etiquetadas de 48 bits. (Si la palabra es un puntero o no depende de un bit de la palabra). Y las representaciones numéricas están diseñadas para que no haya una distinción real entre coma flotante y aritmética integral: la coma flotante es de base 8; no requiere normalización y, a diferencia de cualquier otro punto flotante que he visto, coloca el decimal a la derecha de la mantisa, en lugar de a la izquierda, y usa magnitud con signo para el exponente (además de la mantisa). Con el resultado de que un valor integral de punto flotante tiene (o puede tener) exactamente la misma representación de bits que un entero de magnitud con signo. Y no hay instrucciones aritméticas de punto flotante: si los exponentes de los dos valores son ambos 0, la instrucción hace aritmética integral; de lo contrario, hace aritmética de punto flotante. (Una continuación de la filosofía de etiquetado en la arquitectura). Lo que significa que, si bien intpueden ocupar 48 bits, 8 de ellos deben ser 0 o el valor no se tratará como un número entero.

James Kanze avatar Aug 07 '2011 23:08 James Kanze

Encontré este enlace que enumera algunos sistemas donde CHAR_BIT != 8. Incluyen

algunos TI DSP tienenCHAR_BIT == 16

Chip BlueCore-5 (un chip Bluetooth de Cambridge Silicon Radio) que tiene CHAR_BIT == 16.

Y, por supuesto, hay una pregunta sobre Stack Overflow: ¿ Qué plataformas tienen algo más que caracteres de 8 bits?

En cuanto a los sistemas que no son complemento a dos, hay una lectura interesante en comp.lang.c++.moderated . Resumido: existen plataformas que tienen representación en complemento a uno o signo y magnitud.

dcn avatar Aug 07 '2011 09:08 dcn