2. Philosophie et design
2. Philosophie et design
Un langage bas niveau doit faire deux choses : ne pas vous mentir et ne pas vous surprendre. Vitte a Ă©tĂ© pensĂ© autour de cette idĂ©e. Câest un langage qui prĂ©fĂšre la clartĂ© Ă la magie, et la stabilitĂ© Ă la nouveautĂ© permanente.
Principes
ClartĂ© par dĂ©faut : le code doit se lire comme un contrat. Diagnostics prĂ©cis : les messages dâerreur doivent aider, pas juger. Pipeline transparent : comprendre la compilation doit ĂȘtre possible sans lire 100 000 lignes de code. Reproductibilité : un build doit ĂȘtre un rĂ©sultat, pas une loterie.
Ces principes ne sont pas dĂ©coratifs. Ils influencent la syntaxe, les messages dâerreur, et mĂȘme la maniĂšre dont on organise les modules.
Le coût des abstractions
Les abstractions sont utiles, mais elles ont un coĂ»t. Vitte vous demande dâĂȘtre explicite sur ce coĂ»t. Cela rend le code plus verbeux au dĂ©but, mais il devient plus robuste quand lâĂ©quipe grandit. Un code court mais incomprĂ©hensible est une victoire de dix minutes ; un code clair est une victoire de dix ans.
Ce que Vitte nâest pas
Un langage « magique ». Un macroâsystĂšme sans gardeâfous. Un systĂšme qui cache lâABI ou les appels externes.
Cette position peut sembler austÚre au début. Mais elle paie vite quand le projet grandit.
Le rĂŽle du compilateur
Le compilateur nâest pas un oracle. Il est un partenaire : il vous signale les incohĂ©rences, il refuse les ambiguĂŻtĂ©s, et il vous aide Ă rester honnĂȘte. Cette relation est saine : elle vous pousse Ă expliciter vos hypothĂšses.
La stabilité comme stratégie
Les projets longâvivants demandent un langage qui ne change pas Ă chaque mode. La stabilitĂ© nâest pas un conservatisme, câest une stratĂ©gie : elle rĂ©duit les coĂ»ts de maintenance et rend le code plus abordable pour les nouvelles recrues.
Lisibilité et performance ne sont pas des ennemies
Un code lisible ne signifie pas un code lent. Au contraire : la lisibilitĂ© vous permet dâidentifier les vrais chemins chauds, et donc dâoptimiser lĂ oĂč câest utile. Le code obscur, lui, dissipe vos efforts.
Le contrat implicite
Vitte vous demande dâĂȘtre explicite, mais en Ă©change il promet quelque chose : un contrat stable, des diagnostics cohĂ©rents, et un pipeline comprĂ©hensible. Câest un pacte entre le langage et le dĂ©veloppeur.
Ă retenir
Le design de Vitte privilégie la durabilité du code. Si vous hésitez entre « court » et « clair », choisissez « clair ».
Deux styles de code
Comparez ces deux styles :
Style A : court, dense, difficile à lire. Style B : plus long, mais chaque étape est visible.
Un compilateur accepte les deux. Une équipe, elle, préfÚre le second. La lisibilité est un acte collectif.
Pourquoi la simplicité est une stratégie
Quand un bug survient, vous nâavez pas besoin dâune thĂ©orie. Vous avez besoin dâune trace lisible. La simplicitĂ© augmente la probabilitĂ© que votre futur vous comprenne.
Erreurs courantes de philosophie
Confondre âminimalâ et âopaqueâ. Penser que la syntaxe magique accĂ©lĂšre les Ă©quipes. Sacrifier la lisibilitĂ© pour une optimisation non mesurĂ©e.
Checklist de design
Chaque module a une responsabilité claire. Les interfaces sont petites et bien nommées. Les erreurs sont actionnables. Le build est reproductible.
Exercice : écrire pour un autre
Prenez un petit bout de code que vous connaissez bien. Réécrivezâle comme si vous deviez lâexpliquer Ă une personne qui ne connaĂźt pas votre projet. Si votre code devient plus clair, vous avez compris la philosophie.
OâReilly en une phrase
Un langage est une promesse dâexplications futures. Vitte vous demande dâĂȘtre explicite aujourdâhui pour Ă©viter lâopacitĂ© demain.
Code complet (API actuelle)
Exemple de deux styles : lâun compact, lâautre lisible.
proc sum_compact(a: [i32]) -> i32 {
let i: i32 = 0
let s: i32 = 0
loop { if i >= a.len as i32 { break } s = s + a[i as usize]; i = i + 1 }
give s
}
proc sum_clear(a: [i32]) -> i32 {
let i: i32 = 0
let s: i32 = 0
loop {
if i >= a.len as i32 { break }
set s = s + a[i as usize]
i = i + 1
}
give s
}
API idéale (future)
Un formalisme de style (lint) qui encourage les blocs lisibles au lieu des expressions compressées.