Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2007:12_20

Commit 2008-12-20

Modifs

Fac binaire portable

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.

  • Pour long, il n'y a pas de problème puisqu'on n'utilise jamais ce type… et qu'on ne l'utilisera jamais!
  • Pour 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 ;-))

Suppression des résidus DECCXX

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.
  • J'ai viré les résultats de batterie OSF (récupérable par “svn -r” pour les nostalgiques).

Fichiers ajoutés/supprimés

 

Romain BOMAN 2007/12/20 09:04

commit/2007/12_20.txt · Last modified: 2016/03/30 15:23 (external edit)