📋

Points Clés

  • Le processus utilise Visual Studio 2022 pour compiler du code C++23 pour Windows 95.
  • Les exceptions et la prise en charge de la bibliothèque standard sont désactivées pour la compatibilité.
  • Un éditeur de liens de 1998 est utilisé pour créer l'exécutable final.
  • Le code s'exécute sur un processeur Pentium avec 16 Mo de RAM.

Résumé Rapide

Une démonstration technique met en évidence la possibilité d'écrire du code dans le standard moderne C++23 et de l'exécuter sur un système d'exploitation historique Windows 95. Cette prouesse nécessite des configurations spécifiques dans Visual Studio 2022 pour cibler du matériel plus ancien, notamment un processeur Pentium avec seulement 16 Mo de RAM.

Le processus implique de contourner les dépendances de la bibliothèque standard pour travailler directement avec l'WinAPI. En se privant des commodités modernes comme les exceptions et les allocateurs standard, les développeurs peuvent créer un exécutable léger. L'article décrit les étapes pour y parvenir, notamment la création d'implémentations minimales de classes standard et l'utilisation d'un éditeur de liens de l'ère 1998 pour finaliser la compilation.

Le Défi de la Compatibilité Rétro

Exécuter des logiciels écrits avec les dernières fonctionnalités du langage sur du matériel obsolète représente un obstacle technique considérable. Le concept consiste à tirer parti des capacités du C++23 — telles que les modules, les lambdas et le constexpr — et à les forcer à fonctionner dans les contraintes sévères d'un environnement Windows 95. Cet environnement ne dispose pas des systèmes de support robustes que l'on trouve dans les systèmes d'exploitation modernes.

L'obstacle principal est l'absence d'une bibliothèque standard moderne. Sur une installation standard de Windows 95, il n'y a pas de bibliothèques de liens dynamiques (DLL) qui prennent en charge les fonctionnalités requises par le C++23. Par conséquent, le code doit être autonome. La démonstration prouve qu'avec les bons paramètres, le compilateur peut générer du code qui ne dépend pas de dépendances d'exécution externes qui n'existent tout simplement pas sur le système cible.

Configuration de l'Environnement de Compilation

La configuration commence avec Visual Studio 2022, un environnement de développement intégré (IDE) moderne. Pour cibler le système historique, le compilateur doit être configuré pour générer du code machine 32 bits x86. Cependant, les ajustements les plus critiques impliquent ce qui est exclu de la compilation.

Le processus nécessite de désactiver deux composants majeurs :

  • Exceptions : Le mécanisme try/catch est désactivé pour éviter la liaison avec l'environnement d'exécution de gestion des exceptions.
  • Bibliothèque Standard : L'inclusion d'en-têtes standard comme <string> ou <vector> est supprimée pour empêcher la liaison automatique à la bibliothèque standard.

Ces paramètres garantissent que le compilateur produit le plus petit binaire possible sans dépendances cachées.

Reimplémentation des Composants Standard

Sans la bibliothèque standard, les structures de données de base doivent être reconstruites à partir de zéro. La démonstration détaille la création d'une implémentation minimale de std::string. Cette classe personnalisée gère la mémoire manuellement, gérant l'allocation et la désallocation directement plutôt que de s'appuyer sur l'allocateur par défaut.

De plus, des allocateurs personnalisés sont conçus pour fonctionner avec les fonctions WinAPI GlobalAlloc et GlobalFree. En écrivant ces wrappers, le code peut utiliser la gestion de la mémoire du système d'exploitation directement. Cela permet l'utilisation de syntaxes et de fonctionnalités modernes comme les lambdas et le constexpr tandis que les mécanismes sous-jacents sont réglés pour l'architecture vintage.

Édition des Liens et Exécution

Une fois le code écrit et les classes personnalisées en place, la dernière étape est l'édition des liens (linking). Fait surprenant, la démonstration utilise un éditeur de liens remontant à 1998. Cet outil spécifique est capable de produire un format exécutable compatible avec Windows 95.

Le programme résultant s'exécute avec succès sur une machine Pentium équipée de seulement 16 Mo de RAM. Ce résultat démontre que le standard C++23 est suffisamment flexible pour prendre en charge une base de code unifiée. Les développeurs peuvent théoriquement écrire le code une seule fois et, avec les bons drapeaux de compilation et bibliothèques de support, le déployer sur des systèmes de pointe et pour des passionnés d'informatique rétro.