T13 · Extensibilité et invention des langages  ·  Chapitre 6 / 11

Les écosystèmes multi-langages

Quand la coopération entre langages devient architecture

Il y a un monolinguisme technique qui persiste dans l'industrie, plus idéologique que pragmatique. L'idée qu'un bon système devrait être écrit dans un seul langage — par souci de cohérence, de recrutement, de simplicité opérationnelle. J'ai longtemps compris cet argument. Je ne l'ai jamais accepté. Parce qu'il confond la cohérence de l'architecture avec l'uniformité des outils. Ce sont deux choses radicalement différentes.

Un orchestre symphonique n'est pas incohérent parce qu'il contient des violons, des cuivres et des percussions. Il est cohérent parce que chaque instrument joue sa partie au bon moment, guidé par une partition commune et un chef qui comprend comment les timbres se combinent. Retirer les cuivres pour ne garder que les cordes, au nom de la simplification, ne produit pas un meilleur orchestre. Ça produit un orchestre appauvri.

CAKE est construit sur cette conviction : la richesse d'un système ne vient pas de la pureté de son langage unique, mais de la qualité de la coopération entre les langages qu'il orchestre.


Pourquoi le monolinguisme technique est un mythe coûteux

L'argument pour le monolinguisme est séduisant : une seule équipe, une seule toolchain, une seule culture de code. Moins de frictions à la frontière entre composants. Moins de context-switching pour les développeurs. En théorie, ça tient.

En pratique, ça produit des systèmes où tout est fait dans le même langage — y compris les parties pour lesquelles ce langage est fondamentalement mal adapté. Du JavaScript pour du calcul intensif. Du Python pour de l'orchestration temps réel. Du Java pour des scripts de déploiement. Le résultat n'est pas de la cohérence — c'est de l'uniformité imposée au détriment de la performance.

J'ai vu des équipes passer des mois à optimiser du code dans un langage mal choisi, alors qu'une couche de 200 lignes dans le bon langage aurait résolu le problème en une semaine. Le coût du monolinguisme est réel, il est mesurable, et il est presque toujours invisible dans les décisions d'architecture initiales.


La spécialisation des couches — chaque outil à sa place

Dans une architecture multi-langages mature, chaque couche du système est confiée au langage le mieux positionné pour la servir. Pas le langage que tout le monde connaît déjà. Pas le langage à la mode. Le langage dont les propriétés fondamentales — modèle mémoire, paradigme, écosystème — correspondent au profil de la couche en question.

Couche Technologie Pourquoi ce choix
Interface
JS / TypeScript
Réactivité native, écosystème UI mature, exécution dans le navigateur sans transpilation lourde.
Backend métier
C# / Java
Typage fort, concurrence gérée, outillage d'entreprise éprouvé, intégration DDD naturelle.
Calcul intensif
C++ / Rust
Contrôle mémoire direct, absence de GC, performance prédictible — indispensable pour les pipelines lourds.
Orchestration
C% / CAKE
Conçu pour coordonner les autres couches — pas pour les remplacer. C'est le rôle pour lequel il a été inventé.
Données
SQL / DSL
Le langage des données doit parler le langage des données — pas être traduit depuis un paradigme objet ou fonctionnel.

Ce tableau n'est pas une prescription universelle. C'est une illustration d'un principe : les décisions de choix de langage devraient être des décisions architecturales, pas des habitudes d'équipe. Chaque couche mérite qu'on se pose la question honnêtement : quel est le langage qui sert le mieux ce rôle précis ?


L'interopérabilité — l'art de faire parler des systèmes différents

La promesse des architectures multi-langages ne se tient que si les composants peuvent communiquer sans friction excessive. L'interopérabilité n'est pas un détail d'implémentation — c'est une décision architecturale de premier ordre qui doit être prise avant d'écrire la première ligne de chaque composant.

Dans CAKE, j'ai fait un choix délibéré : les interfaces entre couches sont définies en CXML — le langage de structure du système. Ce n'est ni du JSON, ni du Protobuf, ni du OpenAPI, bien qu'il puisse générer vers ces formats. C'est une déclaration d'intention dans le langage du système lui-même. Chaque contrat entre composants est un artefact CAKE — versionné, validé, traçable dans le pipeline.

Cela change profondément la nature de l'interopérabilité. Elle n'est plus un pont improvisé entre deux systèmes qui ne se connaissaient pas. Elle devient une conversation structurée entre des composants qui ont été conçus pour se parler.


CAKE comme chef d'orchestre — pas comme instrument

Architecture CAKE — Orchestration multi-langages
C% · Orchestrateur central
KotlinAndroid / Mobile
C#Backend / WPF
RustCalcul / Perf
SQLDonnées
DSL×NDomaines spécialisés

C% n'est pas le langage dans lequel on écrit la logique métier de CAKE. C'est le langage dans lequel on décrit comment les autres langages coopèrent. C'est une distinction fondamentale. Un chef d'orchestre ne joue pas de tous les instruments — il comprend suffisamment chacun d'eux pour savoir quand et comment les faire sonner ensemble.

Cette position d'orchestrateur est à la fois plus humble et plus puissante que celle d'un méta-langage universel. Elle reconnaît que chaque composant a son domaine de souveraineté. Elle ne cherche pas à l'absorber — elle cherche à le coordonner. Et c'est précisément cette retenue qui rend l'architecture extensible sans la rendre ingouvernable.

Un système multi-langages mal conçu est une tour de Babel. Un système multi-langages bien conçu est un orchestre. La différence n'est pas dans le nombre de langages — elle est dans la qualité de la partition qui les unit. — Sébastien Roy, CEO Unibool Inc.

Principe clé — Chapitre 6

Les architectures multi-langages ne sont pas un compromis face à la complexité. Elles sont une réponse mature à la réalité des systèmes modernes — où chaque domaine mérite l'outil conçu pour lui, et où la cohérence vient de l'orchestration, pas de l'uniformité.

Utiliser le bon langage au bon endroit n'est pas de l'indiscipline. C'est du respect envers le problème qu'on cherche à résoudre.

← Chapitre précédent C05 · Inventer de nouveaux paradigmes
T13C06 · 65%
Chapitre suivant → C07 · Génération dynamique de langages
Auteur  ·  Sébastien Roy  ·  CEO, Unibool Inc.  ·  Canada  ·  Édition 2026