Depuis l'utilisation intensive de size_t
dans le code, les FACs binaires ne sont plus compatibles entre machines. Pour y remédier, je liste ici les différents types et leurs tailles respectives sur nos machines:
host | corto | garfield | calimero | clifton | chinook | |
---|---|---|---|---|---|---|
OS | win32 | vista64 | linux-x86 | linux-64 | alpha-linux | |
byte order | little | little | little | little | little | |
char | signed | signed | signed | signed | signed | |
system | 32 bits | 64 bits | 32 bits | 64 bits | 64 bits | Remarques |
sizeof(char) | 1 | 1 | 1 | 1 | 1 | OK |
sizeof(short) | 2 | 2 | 2 | 2 | 2 | OK |
sizeof(int) | 4 | 4 | 4 | 4 | 4 | OK |
sizeof(long) | 4 | 4 | 4 | 8 | 8 | = sizeof(void*) SAUF Vista64! |
sizeof(float) | 4 | 4 | 4 | 4 | 4 | OK |
sizeof(double) | 8 | 8 | 8 | 8 | 8 | OK |
sizeof(size_t) | 4 | 8 | 4 | 8 | 8 | = sizeof(void*) |
sizeof(void*) | 4 | 8 | 4 | 8 | 8 | fonction du système 32/64 bits |
sizeof(bool) | 1 | 1 | 1 | 1 | 1 | OK |
sizeof(__int64) | 8 | 8 | utilisable sous Windows | |||
sizeof(long long) | 8 | 8 | 8 | utilisable sous Unix |
Comme on peut le voir, toutes nos machines sont de type “little endian” et utilisent des “signed char” par défaut. Si on veut un jour lancer Metafor sur Mac ou sur Sun et relire les FACs sur des machines normales, il faudra faire la traduction “big-endian” ⇒ “little-endian” (je m'en chargerai, c'est pas difficile).
Bref, on voit que les FACs clifton et chinook sont identiques et peuvent être relus sous Vista x64 sans problème (parce qu'on n'utilise pas des long
!). De même, les FACs calimero sont lisibles sous WinXP, mais illisibles sous Vista x64 (ça va merdouiller au premier size_t
rencontré).
La plupart des types sont codés identiquement sur toutes les machines mis à part long
et size_t
.
long
, il n'y a pas de problème puisqu'on n'utilise jamais ce type… et qu'on ne l'utilisera jamais!size_t
, l'idéal est de sauver un entier non signé sur 64 bits quelle que soit la machine utilisée. Avec cette méthode, tous les FACs sont compatibles sur les machines actuelles.
L'inconvénient est que tous les anciens FACs calimero et WinXP deviennent illisibles. Bref, il faudra refaire tourner nos anciens cas-tests (…ah non, pas les miens vu que je suis sous Vista-x64 )
Il est temps d'enterrer définitivement le vieux système OSF:
MetaStrStream
peut être avantageusement remplacé par std::ostringstream
(qui buguait sous OSF).template<>
peut être utilisé partout où il le faut d'après Stroustrup.— Romain BOMAN 2007/12/20 09:04