2016-06-04 2 views
4

J'ai récemment essayé de trouver les raisons qui ont conduit à l'utilisation d'accolades pour les blocs (composés-instructions) dans le langage C et d'autres langages same family.Justification de la syntaxe C pour les blocs

Pense comme les crochets pour les tableaux ou les parenthèses pour changer la priorité de l'opérateur semble provenir du mathematicalnotation utilisé pour ces choses, donc cela a du sens pour moi. Le point-virgule est logique aussi, il est destiné à séparer related sentences with independent clauses, et il fait quelque chose comme ça dans C.

Mais je ne pouvais pas trouver quelque chose de similaire pour les accolades: ils sont utilisés pour sets en mathématiques, et quelque chose d'une certaine manière similaire leur utilisation dans musical notation (Ensemble portées) où ils sont utilisés pour indiquent que la musique sur toutes les portées doit être joué simultanément (pas tout à fait le même usage mais je pensais que c'était plus proche que leur utilisation en mathématiques pour les ensembles) .

En outre, je me demandais si C est réellement la première langue à introduire cette syntaxe de bloc ou l'a-t-elle simplement popularisée?

+1

Pourrait être aussi simple que '()' et '[]' ont déjà été prises. Pourquoi utilisons-nous '< >' pour les templates/génériques? –

Répondre

4

La première était curly brace programming languageBCPL en 1966, bien qu'il laisse $( et $) pour délimiter des blocs en plus de { et }. Le BCPL était basé sur CPL qui utilisait le § inhabituel (aux yeux des programmeurs modernes) pour ouvrir un bloc et le même symbole avec une ligne qui le traversait pour fermer le bloc. Martin Richards, l'inventeur du BCPL dans "How BCPL evolved from CPL": dit:

CPL utilisé un symbole de section (§) équivalent à Algol de BEGIN et un symbole de la section overprinted par une barre oblique pour représenter END. BCPL a adopté et $) pour ces jetons et comme avec CPL ces parenthèses de section pourraient être marquées , permettant à une parenthèse de section fermée de fermer plusieurs sections . Malheureusement, cette avance de convention à des erreurs de programmation plutôt obscures et donc quand accolades ({ et }) est devenu disponibles, ils n'ont été utilisés comme supports de section et l'utilisation non étiquetés de $( et $) a été découragé.

Des accolades sont venues à C (1972) via B (1969).

+1

Je pense que vous devinez juste. La disponibilité des caractères spéciaux dans les jeux de caractères et sur les claviers était (et est toujours parfois) un problème pour la programmation portable. C'est pourquoi '{' et '}' ont toujours des encodages alternatifs comme trigraph ('<' and '??> ') et digraph (' <%' and '%> '). –

+0

Ma supposition était fausse, donc je l'ai édité - j'ai trouvé une référence de Martin Richards et j'ai remplacé mon estimation par cela. –

+0

Merci pour le lien vers "[Comment BCPL a évolué de CPL] (http://www.cl.cam.ac.uk/~mr10/cpl2bcpl.pdf)", il est assez intéressant d'avoir une explication sur l'évolution d'un syntaxe/langue à l'autre! – evuez