À propos du projet

PB-Compiler (`pbc`) est une réimplémentation clean-room des compilateurs de la famille PowerBASIC, écrite en C# moderne. Son objectif principal est de permettre à du code source BASIC vintage de l'ère DOS d'être compilé en véritables binaires `.EXE` MS-DOS 16 bits exécutables sur du matériel 64 bits moderne. Le projet met l'accent sur une fidélité stricte aux dialectes historiques, garantissant que les programmes se comportent de manière identique à ceux produits par les compilateurs propriétaires d'origine, y compris les bugs documentés. Les capacités clés incluent : **Support des dialectes** : Le compilateur prend en charge un large éventail de dialectes via l'option `--dialect`, couvrant la lignée Borland (Turbo Basic, PowerBASIC 2.0-3.5) et la lignée Microsoft (BASICA, GW-BASIC, QuickBASIC 1.0-4.5, QBasic, BASIC PDS). Chaque dialecte conditionne les fonctionnalités plus récentes et active des comportements spécifiques à chaque version. **Contrat de fidélité** : Pour les dialectes historiques, la sortie est vérifiée par rapport aux binaires d'origine à l'aide d'un harnais différentiel piloté par oracle. Cela garantit que le code généré produit une sortie de programme identique octet par octet, préservant la compatibilité avec les écosystèmes logiciels hérités. **Pipeline d'optimisation** : Un backend d'optimisation avancé basé sur SSA est disponible pour tous les dialectes via l'option `--optimize`. Ce pipeline inclut le pliage de constantes, l'élimination de code mort, l'élimination de sous-expressions communes, la réduction de force, et plus encore. Il peut réduire significativement la taille des binaires (par exemple, réduire un programme Hello World à 25 octets) sans altérer le comportement observable. **Sur-ensemble PowerBASIC 3.6** : Un dialecte tourné vers l'avenir (`pb36`) ajoute des fonctionnalités de langage modernes telles que les fonctions à corps d'expression, les tuples, la surcharge, les paramètres par défaut, les lambdas/closures, les génériques, les coroutines (`YIELD`) et la gestion structurée des exceptions (`TRY/CATCH`). Ces fonctionnalités sont optionnelles et n'affectent pas le code PB 3.5 existant. **Formats de sortie** : Génère des fichiers DOS MZ `.EXE` standard, des unités compilées (`.PBU`) et des bibliothèques d'unités (`.PBL`). Il prend également en charge l'émission de C99 portable ou de LLVM IR pour un traitement ultérieur. **Installation et utilisation** : Construit avec .NET, il fonctionne sur tout système d'exploitation prenant en charge .NET 6+. Les utilisateurs clonent le dépôt, compilent avec `dotnet` et compilent les sources BASIC à l'aide de l'outil CLI `pbc`. Les résultats peuvent être testés dans DOSBox ou sur du matériel DOS réel.