IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Linus Torvalds met volontairement des tabulations arbitraires cachées dans Linux 6.9
Après un commit qui remplaçait une tabulation par un espace pour faciliter la lecture de fichier par les outils de parsing

Le , par Stéphane le calme

35PARTAGES

15  0 
Linus Torvalds, le créateur du noyau Linux, a récemment réitéré sa position sur l’utilisation des tabulations plutôt que des espaces dans le code du noyau, suite à une tentative de modification qui a suscité une réponse robuste de sa part. La controverse a commencé lorsqu’un développeur a proposé un changement dans une ligne de code, remplaçant une tabulation par un espace, dans le but de faciliter la lecture du fichier par les outils d’analyse de configuration (Kconfig parsers). Cette modification semblait anodine, mais elle a déclenché une réaction inattendue de Torvalds, qui a répondu par un commit ajoutant des tabulations cachées exprès

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:

Citation Envoyé par Linus
Il n'était pas clair de quel outil il s'agissait, mais assurons-nous qu'il soit corrigé. Parce que si vous ne pouvez pas analyser les tabulations comme des espaces blancs, vous ne devriez pas analyser les fichiers Kconfig du noyau.

En fait, rendons une telle rupture plus évidente qu'une option ésotérique de taille d'enregistrement de ftrace. Si vous ne pouvez pas analyser les tabulations, vous ne pouvez pas avoir de taille de page.

Oui, la confusion entre les tabulations et l'espace est malheureusement un phénomène traditionnel d'Unix, et 'make' est réputé pour être défectueux à cet égard. Mais non, cela ne veut pas dire que c'est correct.

J'ajouterais bien plus de tabulations aléatoires à nos fichiers Kconfig, mais je ne veux 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.
Les tabulations cachées de Torvalds apparaissent dans la quatrième version candidate du noyau Linux 6.9, dont Torvalds a écrit qu'il ne se passait « rien de particulièrement inhabituel » la semaine de sa publication :

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é.
Conclusion

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 ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de air-dex
Membre expert https://www.developpez.com
Le 24/04/2024 à 23:10
T'indentes comme les guidelines de disent de le faire. Linux impose les tabulations ? T'indentes avec des tabulations, point barre ! Un projet Python choisit de respecter le standard Python alias PEP 8 ? T'utilises des espaces. Idem avec un projet PHP décidant de respecter la PSR-12. Le plus important est de respecter l'équipe et les décisions quant au guide de style prises pour le projet.

Personnellement j'ai toujours été pro-tabulations. L'indentation avec les espaces c'est comme les bises quand on se dit bonjour : personne n'a le même nombre. Alors qu'une tabulation sera toujours une unité d'indentation partout. La simplicité à l'état brut. Mais est-ce pour autant que je force sur les tabulations s'il a été décidé de mettre des espaces ? Non.
8  0 
Avatar de Dave Hiock
Membre confirmé https://www.developpez.com
Le 19/04/2024 à 11:07
\ô/
un des intérêt de la tabulation est le partage des sources qui selon le développeur pourra configurer la largeur comme bon lui semble au travers de son éditeur, 2 ,4, 8 ou autres et ce pour son confort visuel.
Le gain de taille pouvant être anecdotique compte tenu de la minification pouvant être appliquée au final.
8  1 
Avatar de sebdev200
Membre à l'essai https://www.developpez.com
Le 19/04/2024 à 10:10
Citation Envoyé par fodger Voir le message
La raison de préférer l'espace à la tabulation est tout simplement que l'espace a toujours la même valeur unitaire quelque soit l'os, l'éditeur, ce qui n'est pas le cas pour la tabulation.
C'est pour cela qu'un éditeur qui puisse changer, en temps réel, la largeur d'une tabulation par la molette de souris permettrait de retrouver facilement la bonne identation.
6  0 
Avatar de Docox2
Membre à l'essai https://www.developpez.com
Le 19/04/2024 à 14:25
Lorsque jeune je codais sur cartes perforées et utilisais une machine à écrire mécanique, la tabulation était variable au gré de l'utilisateur qui lui-même réglait ses taquets.
Dans la bataille en cours je me rends compte que les protagonistes utilisent tous les deux, espaces et tabulations, à mauvais escient.
La touche de tabulation sur la machine à écrire permettait d´atteindre une position sur une ligne sans taper de multiples fois sur une touche. Mettre deux tabulations successives est donc une ineptie au même titre que mettre plus de deux espaces consécutifs.
Le but recherché est une indentation de texte pour un visuel confortable.
Dans le cadre de la majorité des codes, nul besoin de mettre d´espace ou de tabulation en début de ligne: chaque caractère comptait et se payait sur une carte perforée!
Une simple analyse du code par un outil convenable, même sans IA, permet d'afficher ce code avec l'indentation souhaitée. C'est ce que font beaucoup d'IDE. Gain d'espace, gain de temps, et tous les parsers peuvent extraire les données.
Utilisons des outils modernes et adaptés au lieu de disserter sur des blancs inutiles du point de vue de la majorité des langages informatiques!
6  0 
Avatar de sami_c
Membre averti https://www.developpez.com
Le 19/04/2024 à 10:47
Pour info Stackoverflow avait fait une étude amusante qui démontre que les fans des espaces gagnent plus que ceux des tabs

https://stackoverflow.blog/2017/06/1...oney-use-tabs/
5  0 
Avatar de Dominiqly
Futur Membre du Club https://www.developpez.com
Le 21/04/2024 à 17:06
Historiquement (sur les machines à écrire), la touche tabulation servait à propulser la tête d'écriture jusqu'au prochain taquet. Les taquets doivent donc être préalablement positionnés.
Rien de tel avec les éditeurs de texte ni avec les commandes comme less ou diff.
Donc il semble logique de ne pas utiliser de caractères de tabulation. Je ne mets que des espaces (avec expandtab sous Vim).
Néanmoins je peux comprendre la réaction de Linux Torvald : si un outil est perturbé par un simple caractère de tabulation alors il faut corriger l'outil au lieu de corriger tous les sources. Le caractère de tabulation doit donc être accepté et traité, si nécessaire, avec un espacement de 8 car c'est l'espacement par défaut de très nombreux terminaux (lire la commande "tabs" par exemple).
4  0 
Avatar de Aurelien.Regat-Barrel
Expert éminent sénior https://www.developpez.com
Le 23/04/2024 à 12:50
Citation Envoyé par djm44 Voir le message
Tout cela est bien futile . On dirait une polémique de bureaucrates .
Cela porte un nom : https://fr.wikipedia.org/wiki/Loi_de...9_de_Parkinson
4  0 
Avatar de Metal3d
Membre régulier https://www.developpez.com
Le 20/04/2024 à 0:27
L'intérêt de la tabulation, et c'est la raison qui a poussé les créateurs de Go d'utiliser cette règle dans les formateurs de code, c'est que ça ne vaut qu'un octet, et que les éditeurs peuvent définir comment l'afficher. Par exemple sur NeoVim, je préfère afficher les tabulations avec 4 espaces en Go, 2 pour typescript et Python, 4 pour le C... Alors que mes collègues vont préférer utiliser 4 partout, ou 8, ou 2... On a tous le même fichier, aucun conflit, c'est l'affichage qui change.

Franchement, j'étais pro espace plus jeune, mais je me suis rendu compte de mon erreur.

Voilà...
3  0 
Avatar de Daïmanu
Membre émérite https://www.developpez.com
Le 19/04/2024 à 10:38
Citation Envoyé par Stéphane le calme Voir le message
[*]Considérations relatives au stockage : [...] 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.
Je serais curieux de quantifier cette affirmation.

A priori (calcul très rapide), si je prends une ligne de 50 caractères (en moyenne), et mettons 8 espaces en moyenne, ça ferait 16% de caractères dans le code utilisés pour la tabulation. Si c'est 2 tabulations, ça descend à 4%.

Mais ça peut dépendre de la taille des lignes, des équipes, etc.

Je me demande aussi si git compresse bien ces espaces dans les repository.
2  0 
Avatar de esperanto
Membre émérite https://www.developpez.com
Le 19/04/2024 à 15:29
Citation Envoyé par Dave Hiock Voir le message
\ô/
un des intérêt de la tabulation est le partage des sources qui selon le développeur pourra configurer la largeur comme bon lui semble au travers de son éditeur, 2 ,4, 8 ou autres et ce pour son confort visuel
Oui c'est vrai aussi

Citation Envoyé par fodger Voir le message
Pour une bête histoire d'alignement tu peux avoir un maximum d'emmerdements.
Y'a rien de plus chiant pour la lecture du code sur des projets conséquents que de devoir reprendre des mises en pages parce que personne n'a la même configuration d'un éditeur, plateforme à l'autre.

La simplicité a du bon : KISS.
Et donc c'est quoi ta recommendation "simple"?

Citation Envoyé par Docox2 Voir le message
Lorsque jeune je codais sur cartes perforées et utilisais une machine à écrire mécanique, la tabulation était variable au gré de l'utilisateur qui lui-même réglait ses taquets.
Dans la bataille en cours je me rends compte que les protagonistes utilisent tous les deux, espaces et tabulations, à mauvais escient.
[...]
Dans le cadre de la majorité des codes, nul besoin de mettre d´espace ou de tabulation en début de ligne: chaque caractère comptait et se payait sur une carte perforée!
Du temps de la carte perforée on programmait principalement en Cobol, Basic ou assembleur. Donc des langages à programmation "spaghetti" où il y a rarement des structures à plus de deux niveaux d'imbrication.
Pour les langages à structure de bloc, c'est une autre histoire.
2  0