Square braces []
lebih mudah diketik , sejak terminal IBM 2741 yang "banyak digunakan pada Multics" OS, yang pada gilirannya memiliki Dennis Ritchie, salah satu pembuat bahasa C sebagai anggota tim pengembang .
Perhatikan tidak adanya kurung kurawal pada tata letak IBM 2741!
Dalam C, kurung siku "diambil" karena ini digunakan untuk array dan pointer . Jika perancang bahasa mengharapkan array dan pointer menjadi lebih penting / digunakan lebih sering daripada blok kode (yang kedengarannya seperti asumsi yang masuk akal di pihak mereka, lebih pada konteks historis gaya pengkodean di bawah), itu berarti kurung kurawal akan mengarah ke "kurang penting "sintaks.
Pentingnya array cukup jelas dalam artikel Pengembangan Bahasa C oleh Ritchie. Bahkan ada asumsi yang secara eksplisit menyatakan "prevalensi pointer dalam program C" .
... bahasa baru mempertahankan penjelasan yang koheren dan bisa diterapkan (jika tidak biasa) dari semantik array ... Dua ide adalah ciri paling khas C di antara bahasa kelasnya: hubungan antara array dan pointer ... Fitur karakteristik lain dari C, perawatan array ... memiliki kebajikan nyata . Meskipun hubungan antara pointer dan array tidak biasa, itu bisa dipelajari. Selain itu, bahasa menunjukkan kekuatan yang cukup besar untuk menggambarkan konsep-konsep penting, misalnya, vektor yang panjangnya bervariasi pada waktu berjalan, dengan hanya beberapa aturan dasar dan konvensi ...
Untuk pemahaman lebih lanjut tentang konteks historis dan gaya pengkodean waktu ketika bahasa C dibuat, orang perlu mempertimbangkan bahwa "asal C terkait erat dengan pengembangan Unix" dan, khususnya, bahwa porting OS ke PDP- 11 "mengarah pada pengembangan versi awal C" ( sumber kutipan ). Menurut Wikipedia , "pada tahun 1972, Unix ditulis ulang dalam bahasa pemrograman C" .
Kode sumber dari berbagai versi lama Unix tersedia online, misalnya di situs The Unix Tree . Dari berbagai versi yang disajikan di sana, yang paling relevan tampaknya adalah Second Edition Unix tanggal 1972-06:
Unix edisi kedua dikembangkan untuk PDP-11 di Bell Labs oleh Ken Thompson, Dennis Ritchie dan lainnya. Ini memperluas Edisi Pertama dengan lebih banyak panggilan sistem dan lebih banyak perintah. Edisi ini juga melihat awal dari bahasa C, yang digunakan untuk menulis beberapa perintah ...
Anda dapat menelusuri dan mempelajari kode sumber C dari halaman Second Edition Unix (V2) untuk mendapatkan gambaran tentang gaya pengkodean khas waktu itu.
Sebuah contoh menonjol yang mendukung gagasan bahwa pada saat itu agak penting bagi programmer untuk dapat mengetik kurung siku dengan mudah dapat ditemukan dalam kode sumber V2 / c / ncc.c :
/* C command */
main(argc, argv)
char argv[][]; {
extern callsys, printf, unlink, link, nodup;
extern getsuf, setsuf, copy;
extern tsp;
extern tmp0, tmp1, tmp2, tmp3;
char tmp0[], tmp1[], tmp2[], tmp3[];
char glotch[100][], clist[50][], llist[50][], ts[500];
char tsp[], av[50][], t[];
auto nc, nl, cflag, i, j, c;
tmp0 = tmp1 = tmp2 = tmp3 = "//";
tsp = ts;
i = nc = nl = cflag = 0;
while(++i < argc) {
if(*argv[i] == '-' & argv[i][1]=='c')
cflag++;
else {
t = copy(argv[i]);
if((c=getsuf(t))=='c') {
clist[nc++] = t;
llist[nl++] = setsuf(copy(t));
} else {
if (nodup(llist, t))
llist[nl++] = t;
}
}
}
if(nc==0)
goto nocom;
tmp0 = copy("/tmp/ctm0a");
while((c=open(tmp0, 0))>=0) {
close(c);
tmp0[9]++;
}
while((creat(tmp0, 012))<0)
tmp0[9]++;
intr(delfil);
(tmp1 = copy(tmp0))[8] = '1';
(tmp2 = copy(tmp0))[8] = '2';
(tmp3 = copy(tmp0))[8] = '3';
i = 0;
while(i<nc) {
if (nc>1)
printf("%s:\n", clist[i]);
av[0] = "c0";
av[1] = clist[i];
av[2] = tmp1;
av[3] = tmp2;
av[4] = 0;
if (callsys("/usr/lib/c0", av)) {
cflag++;
goto loop;
}
av[0] = "c1";
av[1] = tmp1;
av[2] = tmp2;
av[3] = tmp3;
av[4] = 0;
if(callsys("/usr/lib/c1", av)) {
cflag++;
goto loop;
}
av[0] = "as";
av[1] = "-";
av[2] = tmp3;
av[3] = 0;
callsys("/bin/as", av);
t = setsuf(clist[i]);
unlink(t);
if(link("a.out", t) | unlink("a.out")) {
printf("move failed: %s\n", t);
cflag++;
}
loop:;
i++;
}
nocom:
if (cflag==0 & nl!=0) {
i = 0;
av[0] = "ld";
av[1] = "/usr/lib/crt0.o";
j = 2;
while(i<nl)
av[j++] = llist[i++];
av[j++] = "-lc";
av[j++] = "-l";
av[j++] = 0;
callsys("/bin/ld", av);
}
delfil:
dexit();
}
dexit()
{
extern tmp0, tmp1, tmp2, tmp3;
unlink(tmp1);
unlink(tmp2);
unlink(tmp3);
unlink(tmp0);
exit();
}
getsuf(s)
char s[];
{
extern exit, printf;
auto c;
char t, os[];
c = 0;
os = s;
while(t = *s++)
if (t=='/')
c = 0;
else
c++;
s =- 3;
if (c<=8 & c>2 & *s++=='.' & *s=='c')
return('c');
return(0);
}
setsuf(s)
char s[];
{
char os[];
os = s;
while(*s++);
s[-2] = 'o';
return(os);
}
callsys(f, v)
char f[], v[][]; {
extern fork, execv, wait, printf;
auto t, status;
if ((t=fork())==0) {
execv(f, v);
printf("Can't find %s\n", f);
exit(1);
} else
if (t == -1) {
printf("Try again\n");
return(1);
}
while(t!=wait(&status));
if ((t=(status&0377)) != 0) {
if (t!=9) /* interrupt */
printf("Fatal error in %s\n", f);
dexit();
}
return((status>>8) & 0377);
}
copy(s)
char s[]; {
extern tsp;
char tsp[], otsp[];
otsp = tsp;
while(*tsp++ = *s++);
return(otsp);
}
nodup(l, s)
char l[][], s[]; {
char t[], os[], c;
os = s;
while(t = *l++) {
s = os;
while(c = *s++)
if (c != *t++) goto ll;
if (*t++ == '\0') return (0);
ll:;
}
return(1);
}
tsp;
tmp0;
tmp1;
tmp2;
tmp3;
Sangat menarik untuk dicatat bagaimana motivasi pragmatis memilih karakter untuk menunjukkan elemen sintaksis bahasa berdasarkan penggunaannya dalam aplikasi praktis yang ditargetkan menyerupai Hukum Zipf seperti yang dijelaskan dalam jawaban hebat ini ...
hubungan yang diamati antara frekuensi dan panjang disebut Hukum Zipf
... dengan satu-satunya perbedaan yang panjang dalam pernyataan di atas diganti dengan / digeneralisasi sebagai kecepatan mengetik.