Linus Torvalds est connu pour ne pas être très attaché à la gentillesse, bien qu'il y travaille depuis 2018. Vous pouvez voir des aperçus de cette nouvelle approche, moins chargée de jurons, dans la façon dont Torvalds a récemment abordé un commit avec lequel il était en désaccord total. Cela concerne les tabulations.
Le commit de la semaine dernière a changé exactement une chose sur une ligne, en remplaçant un caractère de tabulation par un espace : « Cela aide les analyseurs de Kconfig à lire le fichier sans erreur ». Torvalds a répondu par un commit de son cru qui « ajouterait volontairement des tabulations cachées ».
Code C : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | diff --git a/arch/Kconfig b/arch/Kconfig index 9f066785bb71d9..65afb1de48b36e 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -1172,12 +1172,12 @@ config PAGE_SIZE_LESS_THAN_256KB config PAGE_SHIFT int - default 12 if PAGE_SIZE_4KB - default 13 if PAGE_SIZE_8KB - default 14 if PAGE_SIZE_16KB - default 15 if PAGE_SIZE_32KB - default 16 if PAGE_SIZE_64KB - default 18 if PAGE_SIZE_256KB + default 12 if PAGE_SIZE_4KB + default 13 if PAGE_SIZE_8KB + default 14 if PAGE_SIZE_16KB + default 15 if PAGE_SIZE_32KB + default 16 if PAGE_SIZE_64KB + default 18 if PAGE_SIZE_256KB # This allows to use a set of generic functions to determine mmap base # address by giving priority to top-down scheme only if the process |
Essayer d'aplanir un problème de tabulation contre espace semble avoir éveillé Torvalds au besoin d'avoir des échecs de détection de tabulation « plus évidents ». Torvalds en aurait bien rajouté, écrit-il, mais il ne voulait pas « rendre les choses plus laides que nécessaire. Mais cela pourrait être nécessaire s'il s'avère que nous voyons plus de ce genre d'outils stupides ».
Comprendre le débat tabulations Vs espace
Dans le vaste domaine du développement logiciel, peu de sujets ont suscité autant de passion, de débats et, parfois, de rivalités que le choix apparemment anodin entre les tabulations et les espaces pour l'indentation du code. À première vue, il peut s'agir d'une simple préférence stylistique, comme le choix d'une police avec ou sans empattement dans le domaine de la conception. Cependant, si l'on creuse un peu, on se rend vite compte que ce choix transcende la simple esthétique. Il touche à l'éthique même des pratiques de codage, à la collaboration et même à la lisibilité et à la maintenabilité du code.
Le débat sur les tabulations et les espaces n'est pas nouveau. Depuis des décennies, les développeurs défendent ardemment leur méthode d'indentation préférée, souvent avec une ferveur qui rivalise avec certains des débats politiques les plus passionnés. Certains soutiennent que les tabulations sont plus flexibles, permettant à chaque développeur de définir sa largeur de tabulation préférée, tandis que d'autres défendent fermement les espaces, citant la cohérence entre les différentes plateformes et éditeurs. L'intensité de ces débats témoigne des croyances profondément ancrées et des opinions tranchées des deux camps. Au fil de cet article, nous explorerons les origines, les mérites et les inconvénients de chaque type de tabulation.
À un niveau fondamental, les tabulations et les espaces ont la même fonction dans le code : ils fournissent une indentation pour structurer et organiser le code de manière lisible. Toutefois, leur fonctionnement et leurs implications diffèrent sensiblement.
- Fonctionnalité : Le caractère de tabulation, souvent représenté par \t dans de nombreux langages de programmation, est un caractère unique qui indique à l'éditeur de texte de déplacer le curseur jusqu'au prochain taquet de tabulation. Cela peut être équivalent à un certain nombre d'espaces de colonne, souvent configurables dans les éditeurs de texte modernes. Les espaces, quant à eux, sont exactement ce à quoi ils ressemblent : des caractères d'espacement individuels qui font avancer le curseur d'une colonne pour chaque espace utilisé.
- Considérations relatives au stockage : Du point de vue du stockage, les tabulations présentent un avantage. Une tabulation est un caractère unique, quel que soit l'espace visuel qu'elle occupe dans un éditeur de texte. Cela signifie que si une tabulation représente visuellement 4 ou 8 espaces, elle n'occupe que l'espace de stockage d'un seul caractère. À l'inverse, l'utilisation d'espaces pour l'indentation nécessite de stocker chaque caractère d'espace individuellement. Par exemple, si vous utilisez quatre espaces pour l'indentation, vous devez stocker quatre caractères pour chaque niveau d'indentation. Bien que le stockage soit peu coûteux dans le monde d'aujourd'hui, dans les grandes bases de code ou les environnements où chaque octet compte, cela peut être un facteur à prendre en considération.
- Cohérence de l'affichage : C'est là que les espaces brillent. Les espaces sont cohérents dans tous les éditeurs de texte et sur toutes les plateformes. Quatre espaces seront toujours quatre espaces, quel que soit l'endroit où vous visualisez le code. Les tabulations, en revanche, peuvent être un peu imprévisibles. En fonction des paramètres de l'éditeur de texte ou de la plate-forme, une tabulation peut être équivalente à 2, 4, 8 ou tout autre nombre d'espaces. Cela signifie que le code indenté avec des tabulations peut apparaître différemment selon les développeurs, ce qui peut nuire à la lisibilité. Pour les projets
En substance, alors que les tabulations offrent une efficacité de stockage et la flexibilité d'une lisibilité personnalisée, les espaces offrent la garantie d'une apparence cohérente, assurant que le code est le même pour tout le monde, où que l'on soit. Le choix entre les deux se résume souvent à mettre en balance ces différences techniques avec les besoins et les préférences du développeur ou de l'équipe.
Il est donc difficile d'imaginer la question des tabulations contre des espaces être vraiment résolue, codifiée, ou mise en place par des normes. Néanmoins, le noyau Linux a son propre style de codage, et il cite directement "K&R", ou Kernighan & Ritchie, les auteurs de la bible du codage The C Programming Language, qui est un livre à tabulations. Si vous soumettez du code pour le noyau, il est préférable d'utiliser des tabulations (tabulations à huit caractères, idéalement, bien que cela soit lié en partie à l'histoire du télétype et de l'imprimante à ligne).
La réaction de Linus Torvalds
En tentant d'aplanir une minuscule partie du noyau pour qu'un outil d'analyse puisse considérer un caractère espace comme un espace blanc délimitant, Prasad Pandit a involontairement suscité une solide réfutation:
Envoyé par Linus
Rien de particulièrement inhabituel cette semaine - quelques nouvelles mitigations hw peuvent se démarquer, mais après une décennie de cela, je ne peux plus vraiment appeler cela "inhabituel", n'est-ce pas ? Nous avons également eu un peu plus de corrections de bcachefs, et une mise à jour de l'outil turbostat, mais à part cela, c'est la chute habituelle de choses aléatoires un peu partout.
Les pilotes finissent par être le gros des choses restantes, et nous avons encore quelques retombées des grosses mises à jour de timer de cette fenêtre de fusion. Rien d'autre ne me frappe vraiment, mais le foll shortlog est annexé comme d'habitude - assez facile à parcourir pour avoir une idée de ce qui s'est passé.
Les pilotes finissent par être le gros des choses restantes, et nous avons encore quelques retombées des grosses mises à jour de timer de cette fenêtre de fusion. Rien d'autre ne me frappe vraiment, mais le foll shortlog est annexé comme d'habitude - assez facile à parcourir pour avoir une idée de ce qui s'est passé.
L’incident met en lumière non seulement la passion de Torvalds pour les détails techniques, mais aussi son engagement envers une communication plus mesurée, un aspect sur lequel il travaille depuis 2018. Bien que la question des tabulations contre les espaces ne soit probablement jamais résolue de manière définitive, elle reste un élément essentiel de la culture et des pratiques de codage au sein de la communauté Linux.
Sources : Git (1, 2, 3, 4)
Et vous ?
Quelle est votre position personnelle sur l’utilisation des tabulations versus les espaces, et pourquoi ? Quels sont les avantages et les inconvénients de l’utilisation des tabulations par rapport aux espaces dans le code source ?
Comment gérez-vous les différences d’indentation dans votre équipe de développement ?
Pensez-vous que l’utilisation des tabulations ou des espaces devrait être dictée par les outils de parsing ou par les conventions de codage établies ?
Pensez-vous que l’argument de Linus Torvalds concernant l’utilisation des tabulations dans le noyau Linux est valable pour tous les projets de codage ?
Les tabulations cachées introduites par Linus Torvalds sont-elles une approche efficace pour encourager les développeurs à suivre les conventions de codage du kernel Linux ?
Comment les nouvelles générations de développeurs devraient-elles s’adapter aux conventions de codage historiques telles que celles du kernel Linux ?
La décision de Linus Torvalds pourrait-elle avoir un impact sur la façon dont les futurs outils de développement sont conçus ?
Devrait-il y avoir un standard universel pour l’indentation du code, ou est-ce que la diversité des pratiques est bénéfique pour le monde du développement logiciel ?