- La logique de résolution de types (type resolution) du compilateur Zig a été entièrement repensée, ce qui simplifie sa structure interne et apporte aussi des améliorations visibles pour les utilisateurs
- La nouvelle conception traite de façon paresseuse (lazy) l’analyse des champs de type, évitant d’examiner inutilement la structure détaillée de types non initialisés
- Les messages d’erreur de boucle de dépendances (dependency loop) ont été rendus plus précis, ce qui permet d’identifier clairement la cause de la boucle
- Le problème de suranalyse de la compilation incrémentale (incremental compilation) ainsi que de nombreux bugs ont été corrigés, ce qui améliore nettement la vitesse de build
- Ces changements incluent des dizaines de corrections de bugs et de petites améliorations du langage, renforçant globalement les performances et l’expérience de développement du compilateur Zig
Refonte de la logique de résolution de types
- Une PR d’environ 30�a0000 lignes a été fusionnée, réécrivant la logique de résolution de types du compilateur Zig dans une structure plus logique et plus intuitive
- Au cours de ce processus, l’architecture interne du compilateur a été réorganisée, avec des effets d’amélioration directs aussi pour les utilisateurs
- Le compilateur a été modifié pour effectuer une évaluation paresseuse de l’analyse des champs de type, afin de ne pas explorer inutilement la structure détaillée de types non initialisés
- Dans l’exemple de code, lorsqu’une structure contenant un champ
@compileError est utilisée uniquement comme espace de noms, une erreur de compilation se produisait auparavant, mais le code compile désormais normalement
- Cela évite des dépendances de code inutiles lors de l’utilisation de types servant d’espace de noms comme
std.Io.Writer
Amélioration des messages d’erreur de boucle de dépendances
- Auparavant, les messages d’erreur de boucle de dépendances étaient ambigus, mais ils indiquent désormais clairement la cause et l’emplacement de la boucle
- Dans l’exemple de code où les structures
Foo et Bar se référencent mutuellement, le message d’erreur désigne précisément la position de dépendance de chaque type
- Le message inclut la longueur de la boucle, l’emplacement de déclaration de chaque champ et l’emplacement des requêtes d’alignement
- Même dans des boucles complexes, suffisamment d’informations sont fournies pour identifier facilement l’origine du problème
Amélioration des performances de la compilation incrémentale
- Cette évolution corrige de nombreux bugs de la compilation incrémentale
- En particulier, le problème de « suranalyse (over-analysis) » a été résolu, avec une optimisation pour ne recompiler que les parties modifiées
- En conséquence, la vitesse de compilation s’améliore fortement dans de nombreux cas
- Les développeurs peuvent activer la compilation incrémentale à partir de Zig 0.15.1 pour profiter d’une meilleure expérience de développement
Autres améliorations
- Cette PR comprend des dizaines de corrections de bugs, de petites évolutions du langage et des améliorations de performances du compilateur
- La plupart concernent des cas détaillés ou spécifiques
- L’ensemble des changements est consultable dans la PR #31403 sur Codeberg
- En cas de découverte de nouveaux bugs, il est recommandé de signaler un ticket
Portée de ces changements
- Grâce à la simplification de la logique de résolution de types et à l’optimisation de la compilation incrémentale, la stabilité et l’efficacité du compilateur Zig sont renforcées
- Les développeurs bénéficient d’un retour plus rapide et plus clair, et peuvent espérer un gain de productivité même sur de grandes bases de code
Aucun commentaire pour le moment.