BCPL : Le grand-père oublié du C — Histoire, caractéristiques & exemple de code
BCPL (Basic Combined Programming Language) est l'ancêtre direct de B et C. Conçu par Martin Richards à l'Université de Cambridge en 1966, c'est le premier langage à prouver qu'un langage de programmation système pouvait être à la fois petit, portable et assez puissant pour écrire son propre compilateur.
Pourquoi BCPL a compté
- Portabilité d'abord : Le compilateur était scindé en front-end (analyseur) et back-end (générateur de code). Retargeter vers un nouveau CPU (PDP-10, 68000, x86, MIPS) prenait des semaines, pas des années.
- Programmation système : Pas de dépendance à une bibliothèque d'exécution. Accès mémoire direct via pointeurs. Utilisé pour écrire des noyaux OS (TRIPOS, AmigaDOS), compilateurs, éditeurs.
- Minimalisme : Un seul type de donnée : le mot (entier/pointeur largeur machine). Pas de types, pas de structures, pas de flottants — tout se construit à partir de mots.
- A influencé C directement : Ken Thompson a épuré BCPL pour créer B (pour PDP-7 Unix). Dennis Ritchie a ajouté les types → C. Le modèle bytecode de Java fait écho à la représentation intermédiaire O-code de BCPL.
Caractéristiques clés du langage
- Structuré par blocs : `$( ... $)` pour instructions composées (comme `{ }` en C).
- Pointeurs/Indirection : `!ptr` (déréférencement), `ptr!i` (index tableau). `rv` (result value) pour retour.
- Allocation dynamique : `getvec(n)` / `freevec(vec)` — gestion manuelle du tas.
- Compilation conditionnelle : `#if`, `#unless` — pionnier pour 1967.
- Assembleur en ligne : `code` ... `endcode` pour opérations machine-spécifiques.
Hello World en BCPL (Style Martin Richards)
GET "libhdr"
LET start() = VALOF
$( writes("Hello, World!*N")
RESULTIS 0
$)
Note : `writes` écrit une chaîne ; `*N` est retour à la ligne. `VALOF`/`RESULTIS` est le mécanisme de retour de fonction.
L'innovation O-code
BCPL compile vers l'O-code (Object code) — un bytecode simple de machine à pile. Le back-end traduit l'O-code vers l'assembleur cible. Cette architecture bipasse (Frontend → O-code → Backend) est le plan directeur pour :
- Pascal P-code
- Bytecode JVM Java
- LLVM IR
- WebAssembly
Où vit BCPL aujourd'hui
- AmigaOS / MorphOS / AROS : Composants noyau encore en BCPL (VM Cintcode).
- Système Cintcode de Martin Richards : Maintenu activement ; tourne sur Linux, Windows, Raspberry Pi. Site officiel.
- Rétro-informatique / Éducation : Enseignement construction compilateurs (compilateur one-pass tient en 2000 lignes).
BCPL n'est pas « mort » — c'est l'ADN architectural à l'intérieur de chaque programme C, C++, Java, Go, Rust et Swift qui tourne aujourd'hui.
