Guido Von Rossum
Extrait d' une entrevue avec Guido Van Rossum , qui peut être vue en texte intégral sur books.google.com (c'est moi qui souligne):
Le choix de l'indentation pour le regroupement n'était pas un concept nouveau en Python; J'ai hérité de ABC , mais cela s'est également produit en occam, une langue plus ancienne. Je ne sais pas si les auteurs d'ABC ont eu l'idée de l'occam, ou l'ont inventé indépendamment, ou s'il y avait un ancêtre commun. Bien sûr, j'aurais pu choisir de ne pas suivre l'exemple d'ABC, comme je l'ai fait dans d'autres domaines (par exemple, ABC a utilisé des majuscules pour les mots-clés de langue et les noms de procédure, une idée que je n'ai pas copiée), mais j'en étais venu à aimer la fonctionnalité assez peu en utilisant ABC, car il semblait supprimer un certain type de débat inutile courant chez les utilisateurs C à l'époque, sur l' endroit où placer les accolades .
Von Rossum s'est fortement inspiré de ABC , et même s'il n'avait pas à tout copier, l'utilisation de l'indentation a été conservée car elle pourrait être bénéfique pour éviter les guerres de religion.
J'étais également bien conscient que le code lisible utilise de toute façon volontairement l'indentation pour indiquer le regroupement, et j'avais rencontré des bogues subtils dans le code où l'indentation n'était pas d'accord avec le regroupement syntaxique en utilisant des accolades - le programmeur et tous les examinateurs avaient supposé que l'indentation correspondait au regroupement et donc pas remarqué le bug. Encore une fois, une longue session de débogage a enseigné une leçon précieuse.
Rossum a également été témoin de bogues en raison de l'incohérence entre le regroupement et le retrait, et apparemment, bien que se fier à l'indentation uniquement pour structurer le code serait plus sûr contre les erreurs de programmation 1 .
Donald E. Knuth et Peter J. Landin
Dans l'interview référencée, Guido mentionne l'idée de Don Knuth d'utiliser l'indentation. Ceci est détaillé dans The Knuth Indentation Quote rediscovered , qui cite la programmation structurée avec des instructions goto . Knuth fait également référence aux 700 prochains langages de programmation de Peter John Landin (voir la section Discussion sur l'indentation). Landin a conçu ISWIM qui ressemble à la première langue avec indentation au lieu de blocs de début / fin. Ces articles portent davantage sur la faisabilité de l'utilisation de l'indentation pour structurer des programmes plutôt que sur des arguments réels en faveur de le faire.
1. Je pense que c'est en fait un argument en faveur de la création de regroupements et de la mise en forme automatique, afin d'attraper et de récupérer des erreurs de programmation, qui ne manqueront pas de se produire. Si vous bousillez votre indentation en Python, la personne qui débogue votre code devra deviner laquelle est correcte:
if (test(x)):
foo(x)
bar(x)
Doit bar
toujours être appelé ou seulement si le test réussit?
Les constructions de regroupement ajoutent un niveau de redondance qui vous aide à repérer une erreur lorsque vous indentez automatiquement votre code. En C, le code équivalent peut être mis en retrait automatiquement comme suit:
if (test(x))
foo(x);
bar(x);
Si je voulais bar
être au même niveau que foo
, alors l'indentation automatique basée sur la structure du code m'a permis de voir qu'il y a quelque chose qui ne peut pas être corrigé en ajoutant des accolades autour de foo
et bar
.
Dans Python: Mythes sur l'indentation , il y a un supposé mauvais exemple de C:
/* Warning: bogus C code! */
if (some condition)
if (another condition)
do_something(fancy);
else
this_sucks(badluck);
C'est le même cas que ci-dessus, dans Emacs, je sélectionne l'ensemble du bloc / fonction, j'appuie sur Tab, puis tout le code est réindenté. L'écart entre l'indentation humaine et la structure du code me dit que quelque chose ne va pas (cela et le commentaire précédent!).
En outre, le code intermédiaire où l'indentation est désactivée en C ne passe tout simplement pas par la branche principale, toutes les vérifications de style en place feraient crier GCC / Jenkins sur moi. J'ai récemment eu un problème similaire à celui décrit ci-dessus en Python, avec une déclaration désactivée par un niveau d'indentation. Parfois, j'ai du code en C qui va au-delà d'une accolade fermante, mais ensuite je frappe Tab et le code induit "à tort": c'est une chance de plus pour voir le bogue.
let x =1; y = 2; z = 3
est complètement valide, tel queldo { putStrLn $ show x; putStrLn $ show y; putStrLn $ show z; }
. Ceux-ci n'ont pas besoin d'être sur la même ligne.