162 votes

Architectures exotiques qui intéressent les comités de normalisation

Je sais que le C et le C++ normes de laisser de nombreux aspects de la langue mise en œuvre défini simplement parce que si il y a une architecture avec d'autres caractéristiques, il serait très difficile, voire impossible, d'écrire un standard conforme compilateur.

Je sais qu'il y a 40 ans n'importe quel ordinateur ayant ses propres spécifications. Cependant, je ne sais pas du tout architectures utilisées aujourd'hui où:

  • CHAR_BIT != 8
  • signed n'est pas en complément à deux (j'ai entendu parler de Java eu des problèmes avec celui-ci).
  • Virgule flottante n'est pas conforme à la norme IEEE 754.

La raison pour laquelle je te demande, c'est que j'ai souvent expliquer aux gens qu'il est bon que le C++ n'est pas le mandat de tout autre faible niveau des aspects tels que fixe la taille des types. C'est bien parce que contrairement aux "autres langues", il rend votre code portable lorsqu'il est utilisé correctement. Mais je me sens mal que je ne peux pas pointer vers une architecture spécifique de moi-même.

La question est donc: quelles architectures présentent les propriétés ci-dessus?

uint*_ts sont facultatifs.

120voto

Bo Persson Points 42821

Jetez un oeil à celui-ci

Unisys Serveurs ClearPath Dorado

offrant une compatibilité descendante pour les personnes qui n'ont pas encore migré l'ensemble de leurs Univac logiciel.

Points clés:

  • 36 bits des mots
  • CHAR_BIT == 9
  • ceux compléter
  • 72 bits non à virgule flottante IEEE
  • espace d'adressage séparé pour le code et les données
  • sizeof(char*) != sizeof(int*)[peut-être pas]
  • parole adressée

Ne sais pas si ils offrent un compilateur C++, mais ils pourraient.

54voto

James Kanze Points 96599

Aucun de vos hypothèses pour les châssis: pour commencer, je ne sais pas d'un mainframe qui utilise la norme IEEE 754: IBM utilise la base de 16 à virgule flottante, et les deux Unisys mainframes utilisation de la base de 8. Unisys machines sont un peu particulière à bien d'autres égards: Bo a évoqué les 2200 architecture, mais les DÉPUTÉS de l'architecture est encore plus étrange: 48 bits marqués mots. (Si le mot est un pointeur ou pas ne dépend pas d'un bit dans le mot.) Et le numérique représentations sont conçus de telle sorte qu'il n'est pas réel distinction entre les nombres à virgule flottante et partie intégrante de l'arithmétique: le flottant point de base 8; il ne nécessite pas de normalisation, et à la différence de chaque autre point flottant que j'ai vu, il met la virgule vers la droite de la mantisse, plutôt que de la gauche, et utilise signé grandeur pour le exponant (en plus de la mantisse). Avec les résultats que l' partie intégrante valeur en virgule flottante a (ou peut avoir exactement le même bit la représentation en tant que signé magnitued entier. Et il n'y a pas flottant point arithmétique instructions: si les défenseurs de les deux valeurs sont les deux 0, l'instruction fait partie intégrante de l'arithmétique, sinon, il n' arithmétique à virgule flottante. (Poursuite de l'étiquetage de la philosophie dans l'architecture.) Ce qui signifie que tout int peuvent occuper 48 bits, 8 d'entre eux doit être 0 ou la valeur ne sera pas traité comme un entier.

43voto

CodesInChaos Points 60274

Plein IEEE 754 conformité est rare en virgule flottante implémentations. Et l'affaiblissement de la spécification, à cet égard, permet à beaucoup d'optimisations.

Par exemple, le subnorm soutien differers entre x87 et de l'ESS.

Optimisations comme la fusion d'une multiplication et d'addition qui ont été séparés dans le code source de modifier légèrement les résultats trop, mais il est agréable d'optimisation sur certaines architectures.

Ou sur x86 stricte conformité IEEE pourrait exiger de certains drapeaux ou de nouveaux transferts entre registres virgule flottante et de la mémoire pour le forcer à utiliser le spécifié type à virgule flottante à la place de son interne 80bit flotteurs.

Et certaines plates-formes ont pas de matériel de flotteurs à tous et ont donc besoin de les imiter dans le logiciel. Et certaines des exigences de la norme IEEE 754 pourrait être coûteux à mettre en œuvre dans le logiciel. En particulier, les règles d'arrondi peut-être un problème.

Ma conclusion est que vous n'avez pas besoin exotiques architectures afin d'obtenir dans des situations que vous n'avez pas toujours à garantir la stricte conformité IEEE. Pour cette raison, ont été quelques langages de programmation garantir la stricte conformité IEEE.

43voto

dcn Points 2014

J'ai trouvé ce lien d'inscription certains systèmes où l' CHAR_BIT != 8. Ils comprennent

certains TI Dsp ont CHAR_BIT==16

BlueCore-puce de 5 (Bluetooth puce de Cambridge Silicon Radio) qui a CHAR_BIT == 16.

Et bien sûr, il y a un thread sur DONC: Quelles sont les plateformes ont d'autre chose que de 8 bits char

Non en complément à deux systèmes, il existe une lecture intéressante sur comp.lang.c++.modérés. Résumé: il y a des plates-formes ayant un " complément ou un signe et l'ampleur de la représentation

26voto

Keith Thompson Points 85120

Je suis assez sûr que VAX systèmes sont encore en usage. Ils ne supportent pas la virgule flottante IEEE; ils utilisent leurs propres formats. Alpha prend en charge les deux VAX et à virgule flottante IEEE de formats.

Cray machines à vecteurs, comme le T90, ont aussi leur propre virgule flottante format, bien que nouvelle Cray systèmes d'utilisation de l'IEEE. (Le T90 j'ai utilisé a été démantelé il y a quelques années; je ne sais pas si ils sont encore en utilisation active.)

Le T90 également eu/a certaines représentations intéressantes pour les pointeurs et les nombres entiers. Une adresse natif ne peut pointer que vers une version 64 bits du mot. Les compilateurs C et C++ avait CHAR_BIT==8 (nécessaire, car il a couru Unicos, une variante d'Unix, et avait pour interagir avec d'autres systèmes), mais une adresse natif ne pourrait pointer vers une version 64 bits du mot. Tous les octets des opérations ont été synthétisés par le compilateur, et un void* ou char* stockées un décalage d'octet dans la haute-ordre de 3 bits du mot. Et je pense que certains types d'entiers avaient padding bits.

IBM mainframes sont un autre exemple.

D'autre part, ces systèmes n'ont pas nécessairement obstacle à des changements à la langue standard. Cray n'a montré aucun intérêt particulier dans la mise à niveau de son compilateur C pour C99; on suppose que la même chose s'applique pour le compilateur C++. Il pourrait être raisonnable de resserrer les exigences pour hébergés sur des mises en œuvre, telles que l'obligation d'CHAR_BIT==8, IEEE format à virgule flottante si pas la totalité de la sémantique, et 2-complément, sans rembourrage bits pour les entiers signés. Les anciens systèmes pourrait continuer à soutenir plus tôt les normes linguistiques (C90 n'est pas mort quand C99 est sorti), et les exigences pourraient être plus souple pour les implémentations autonomes (systèmes embarqués) comme les Dsp.

Sur la d'autre part, il pourrait y avoir de bonnes raisons pour l' avenir des systèmes à faire des choses qui seraient considérés comme exotiques aujourd'hui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X