Comment la coutume d'utiliser des crochets pour les éléments du tableau s'est-elle développée?

11

De nombreux langages de programmation utilisent la syntaxe a[i]pour faire référence au i'e élément d'un tableau, d'une séquence ou d'un vecteur a- en particulier, C et Pascal (de la fin des années 1960 au début des années 1970) le font. En revanche, certaines langues antérieures, comme le Fortran (des années 1950), n'utilisent pas cette convention. De plus, j'ai étudié un peu les mathématiques, et les mathématiciens utilisent des crochets pour les intervalles et des indices pour, eh bien, les indices de matrice et de tableau (ou des parenthèses régulières si le tableau est considéré comme une fonction d'entiers non négatifs).

Donc, ma question est: où / comment / dans quel contexte ces crochets pour l'indexation des tableaux se sont-ils développés, et par qui?

Remarque: Pas du tout une dupe de cette question sur l'utilisation des accolades en C.

einpoklum
la source
@gnat: Comment est-ce une dupe de cela?
einpoklum
1
Lié mais pas dupe.
blaster
1
la deuxième bonne réponse là-bas couvre l'histoire des crochets
gnat
1
@Paul Typo. Vous voulez dire xkcd.com/163 (le domaine xkdc est enregistré en Chine)
1201ProgramAlarm

Réponses:

10

Le principal langage précurseur de C et Pascal était Algol . La première version de celui-ci était Algol 58 qui utilisait des crochets pour les déclarations et les références de tableaux.

La raison pour laquelle Algol a utilisé des crochets plutôt que, par exemple, des parenthèses était triple:

  1. parce qu'ils le pouvaient. Les premiers claviers IBM, avec lesquels Fortran a été conçu, n'avaient que des parenthèses. Cela avait changé au moment où Algol était spécifié.
  2. l'expérience avec Fortran avait montré que les programmeurs étaient souvent confondus avec l'utilisation excessive des parenthèses, ce qui était considéré comme un changement syntaxique important.
  3. l'intention derrière Algol était qu'il serait utilisé pour décrire des algorithmes afin de le rapprocher de la notation mathématique standard était logique.

Notez que, contrairement à C, qui utilise principalement des tableaux pour indexer la mémoire, Algol a permis de spécifier les limites d'index inférieures et supérieures. Encore une fois, cela était conforme à son intention plus mathématique. À tel point, en fait, qu'Algol a été le langage de facto du pseudocode pendant de nombreuses années.

Alex
la source
Mais les crochets sont-ils vraiment plus proches de la notation mathématique standard? Lorsque j'ai étudié l'appariement, a [x]été utilisé pour les classes d'équivalence, pas pour les positions d'indication dans les vecteurs ou les matrices.
einpoklum
2
@einpoklum Plus pour les plages dans la déclaration que pour les indices ou les exposants dans les références. Mais, comme ils ne pouvaient pas réellement faire des indices ou des exposants avec la technologie de l'époque, ils ont opté pour la cohérence visuelle. Et ils ne visaient pas la notion mathématique comme le faisait, disons, APL. Ils visaient à exprimer clairement des algorithmes qui sont une branche assez étroite.
Alex
Oh, aussi, des crochets ont été utilisés pour les intervalles. Je suppose que c'est comme des plages dans un tableau, dans un sens. Aussi - vous êtes sûr qu'Algol est à l'origine de cette coutume?
einpoklum
@einpoklum Je suis sûr que l'utilisation des crochets en C et Pascal vient d'Algol. La lignée est assez bien documentée. S'il y avait un prédécesseur d'Algol 58 dont les concepteurs ont emprunté la syntaxe, je l'ignore. C'est peu probable étant donné le timing mais pas impossible. Algol 58 n'a pas été implémenté avant Algol 60, il est donc possible qu'une langue non implémentée ait été une inspiration.
Alex
5

Ceci est une lecture intéressante: https://en.m.wikipedia.org/wiki/Bracket

Voici mes propres observations.

Les concepteurs de C ont pris grand soin d'adopter le sens des personnages et des constructions tels qu'ils étaient utilisés depuis des centaines d'années dans un langage écrit régulier. Et ce faisant, ils ont dû travailler avec le sous-ensemble assez limité de caractères ASCII. Dans la langue occidentale, davantage de caractères de regroupement sont utilisés dans le texte écrit, mais ceux-ci ne sont tout simplement pas convertis en ASCII.

En langage ordinaire, la signification des parenthèses fournit des informations secondaires sans interrompre le message principal. Cela a du sens lors de l'appel d'une procédure: le message principal est l'action à effectuer et les sous-informations sont les arguments.

Les accolades sont utilisées pour le regroupement. "Cette collection de mots va de pair, doit être distinguée des autres". Il est donc logique de les utiliser pour des blocs de code, des instructions composées.

Les crochets sont utilisés pour les insertions dans du texte qui ne faisaient pas partie de l'original, pour clarifier le texte d'origine et fournir un contexte. Ou pour indiquer une omission avec des points de suspension: [...]. "Elle [la reine] n'était pas amusée". En programmation informatique, il est un peu judicieux d'utiliser le support pour l'indexation des tableaux car il s'agit d'une sorte de contexte fourni. "Array? Quel tableau? Eh bien, spécifiquement cet élément." Mais même si la signification d'origine ne couvre pas entièrement l'utilisation dans un langage informatique, il n'y a pas trop d'autres options en ASCII.

Je dirais donc que c'est une combinaison de l'art antérieur et de ce qui était disponible à l'époque qui a conduit à l'utilisation de crochets pour l'indexation de tableaux.

[modifier à cause du commentaire d'Alex]

Selon cette source, ASCII a été introduit en 1963 et a obtenu l'approbation du gouvernement en 1968. Le développement du langage C n'a commencé qu'en 1969, selon ce wiki . Il semble donc probable que M. Ritchie ait gardé un œil sur cette nouvelle norme largement prise en charge appelée ASCII lors de la sélection de ses personnages.

Veuillez également consulter les autres réponses plaidant pour qu'Algol, "la mère de nombreuses langues", exerce une forte influence.

Martin Maat
la source
Je pense avoir compris ce que vous dites, mais ASCII n'a été codifié que près d'une décennie après la conception de C. Un impact beaucoup plus direct a été le clavier du PDP-11 pour lequel C a été conçu. Il est logique d'utiliser des caractères qu'il prend en charge. L'utilisation de crochets pour les tableaux a été directement inspirée d'Algol via BCPL et B. De même pour Pascal. Wirth a implémenté Algol-W avant de concevoir Pascal.
Alex