langage D : connaître le système d’exploitation
il peut être important de savoir sur quel système le programme écrit en D est exécuté, c’est ce que nous voir dans cet article.
D est un langage qui permet de porter ses applications sur de nombreux systèmes.
En effet, on peut compiler et exécuter en D sur les systèmes :
– Windows 32 et 64 bits (Windows, Win32, Win64),
– Linux (tous les linux confondus),
– Mac OS X,
– FreeBSD,
– OpenBSD,
– NetBSD,
– DragonFlyBSD,
– ainsi que tous les systèmes en BSD,
– Solaris,
– tous les systèmes POSIX,
– AIX (IBM),
– Haiku OS,
– SkyOS,
– System V release 3,
– System V release 4,
– GNU Hurd,
– les plateformes Androïd,
– l’environnement CygWin, MinGW,
– les processeurs Intel et AMD 32 bits (X86),
– les processeurs Intel et AMD 64 bits (X86_64),
– les architectures ARM (32 bits, AArch 32 et al),
– ARM dans n’importe quel mode (ARM_Thumb),
– ARM_SoftFloat,
– ARM_SoftFP,
– ARM_HardFloat,
– AArch64 (Architecture de la machine Avancé RISC 64 bits),
– les architectures Power PC 32 bits (PPC),
– PPC_SoftFloat,
– PPC_HardFloat,
– les architectures Power PC 64 bits (PPC64),
– les architectures Itanium (IA64),
– les architectures MIPS 32 bits (MIPS32),
– les architectures MIPS 64 bits (MIPS64),
– le MIPS ABI O32 (MIPS_O32),
– le MIPS ABI N32 (MIPS_N32),
– le MIPS ABI O64 (MIPS_O64),
– le MIPS ABI N64 (MIPS_N64),
– le MIPS EABI (MIPS_EABI),
– MIPS_SoftFloat,
– MIPS_HardFloat,
– l’architecture SPARC 32 bits,
– l’architecture SPARC 64 bits,
– SPARC V8Plus,
– SPARC SoftFloat,
– SPARC HardFloat,
– les architectures system/390 32 bits (S390),
– les architectures system/390X 64 bits (S390X),
– les architectures HP PA-RISC 32 bits (HPPA),
– les architectures HP PA-RISC 64 bits (HPPA64),
– les architectures SuperH 32 bits (SH),
– les architectures SuperH 64 bits (SH64),
– les architecture Alpha (Alpha),
– Alpha_SoftFloat,
– Alpha_HardFloat.
Maintenant que nous savons sur quel environnement on peut utiliser D, voyons comment on peut détecter le système.
Et pour cela, nous allons utiliser « version » qui permet de tester si nous le programme s’exécute sur tel ou tel système :
public static string getPlatform () { string versionOS = "undefined"; version (Win32){ versionOS = "Windows 32 bits"; } version (Win64){ versionOS = "Windows 64 bits"; } version (linux){ versionOS = "Linux"; } version (OSX){ versionOS = "Mac OS X"; } version (BSD){ versionOS = "BSD"; } version (Solaris){ versionOS = "Solaris"; } return versionOS; }
Nous ne testons ici que les systèmes les plus connus, mais on peut bien sur faire un test de beaucoup plus d’OS.
version() est utilisé dans la compilation conditionnelle.
La compilation conditionnelle, c’est la possibilité de mettre différents codes pour différents environnement dans le même fichier en testant l’OS qui exécute l’application.
A ma connaissance, il n’existe pas de méthode qui retourne automatiquement le nom du système.
En même temps ça paraît logique. Si nous testons ceci, nous aurons toujours « Windows » sur un système MS Windows qu’il soit 32 ou 64 bits :
version (Win64){ versionOS = "Windows 64 bits"; } version (Win32){ versionOS = "Windows 32 bits"; } version (Window){ versionOS = "Windows"; }
Et sur cette même logique, tester « Posix » cela inclura linux, Mac OS X, FreeBSD, Solaris…
Il faut donc bien choisir ce que l’on cible.
Il existe une liste précise de d’identifiant de version que version () peut accepter et surtout qui permettra de savoir si on est bien sur l’OS souhaité.
Cette liste est présente dans la page Compilation conditionnelle sur dlang.org [en], que l’on peut retrouver sous le titre « Predefined Version ».