Duas das principais influências para C foram a família de línguas Algol (Algol 60 e Algol 68) e BCPL (da qual C leva o nome).
BCPL was the first curly bracket programming language, and the curly brackets survived the syntactical changes and have become a common means of denoting program source code statements. In practice, on limited keyboards of the day, source programs often used the sequences $( and $) in place of the symbols { and }. The single-line '//' comments of BCPL, which were not taken up in C, reappeared in C++, and later in C99.
De link
BCPL introduced and implemented several innovations which became quite common elements in the design of later languages. Thus, it was the first curly bracket programming language (one using { } as block delimiters), and it was the first language to use // to mark inline comments.
De link
Dentro do BCPL, muitas vezes vemos chaves, mas nem sempre. Esta foi uma limitação dos teclados no momento. Os caracteres $(
e $)
eram lexicograficamente equivalentes a {
e }
. Diagramas e trigramas foram mantidos em C (embora um conjunto diferente para substituição de chaves - ??<
e ??>
).
O uso de chaves foi refinado em B (que precedeu C).
De Referência dos Usuários para B por Ken Thompson:
/* The following function will print a non-negative number, n, to
the base b, where 2<=b<=10, This routine uses the fact that
in the ASCII character set, the digits 0 to 9 have sequential
code values. */
printn(n,b) {
extern putchar;
auto a;
if(a=n/b) /* assignment, not test for equality */
printn(a, b); /* recursive */
putchar(n%b + '0');
}
Há indicações de que chaves foram usadas como mão curta para begin
e end
dentro de Algol.
I remember that you also included them in the 256-character card code that you published in CACM, because I found it interesting that you proposed that they could be used in place of the Algol 'begin' and 'end' keywords, which is exactly how they were later used in the C language.
De link
O uso de colchetes (como sugestão de substituição na pergunta) remonta ainda mais longe. Como mencionado, a família Algol influenciou C. Dentro Algol 60 e 68 (C foi escrito em 1972 e BCPL em 1966), o colchete foi usado para designar um índice em um array ou matriz.
BEGIN
FILE F(KIND=REMOTE);
EBCDIC ARRAY E[0:11];
REPLACE E BY "HELLO WORLD!";
WRITE(F, *, E);
END.
Como os programadores já estavam familiarizados com colchetes para matrizes em Algol e BCPL e chaves para blocos em BCPL, havia pouca necessidade ou desejo de mudar isso ao criar outro idioma.
A pergunta atualizada inclui um adendo de produtividade para uso de chaves e menciona python. Existem alguns outros recursos que fazem este estudo, embora a resposta se resume a "Seu anedótico, e com o que você está acostumado é com o que é mais produtivo". Por causa das habilidades amplamente variadas em programação e familiaridade com diferentes idiomas, estas são difíceis de explicar.
Veja também: Estouro de pilha Existem estudos estatísticos que indicam que o Python é “mais produtivo”?
Grande parte dos ganhos seria dependente do IDE (ou falta de) que é usado. Nos editores baseados em vi, colocar o cursor sobre um abrir / fechar correspondente e pressionar %
moverá o cursor para o outro caractere correspondente. Isso é muito eficiente com linguagens baseadas em C nos velhos tempos - menos agora.
Uma comparação melhor seria entre {}
e begin
/ end
, que eram as opções do dia (o espaço horizontal era precioso). Muitas linguagens de Wirth foram baseadas em um estilo begin
e end
(Algol (mencionado acima), pascal (muitos estão familiarizados com) e a família Modula).
Eu tenho dificuldade em encontrar algum que isole esse recurso de linguagem específico - na melhor das hipóteses, posso mostrar que as linguagens de chaves são muito mais populares do que as linguagens finais e é uma construção comum. Como mencionado no link de Bob Bemer acima, o chaveiro foi usado para facilitar a programação como um atalho.
De Por que Pascal não é minha linguagem de programação favorita
C and Ratfor programmers find 'begin' and 'end' bulky compared to { and }.
Que é sobre tudo o que pode ser dito - sua familiaridade e preferência.