স্কোয়ার ধনুর্বন্ধনী []
টাইপ করা সহজ, যখন থেকে আইবিএম 2741 টার্মিনালটি "মাল্টিক্সে ব্যাপকভাবে ব্যবহৃত হয়েছিল" ওএস, যার ফলশ্রুতিতে দেব দলের সদস্য হিসাবে সি ভাষা নির্মাতাদের মধ্যে একজন ছিলেন ডেনিস রিচি ।
আইবিএম 2741 লেআউটে কোঁকড়ানো ধনুর্বন্ধনীগুলির অনুপস্থিতিতে নোট করুন !
সি-তে স্কোয়ার ব্রেসেসগুলি "নেওয়া" হয় কারণ এগুলি অ্যারে এবং পয়েন্টারগুলির জন্য ব্যবহৃত হয় । ভাষা ডিজাইনাররা যদি কোড ব্লকের চেয়ে আরও বেশি ঘন ঘন অ্যারে এবং পয়েন্টারগুলি বেশি গুরুত্বপূর্ণ / ব্যবহৃত হওয়ার প্রত্যাশা করেন (যা তাদের পাশে যুক্তিসঙ্গত অনুমান হিসাবে মনে হয়, নীচে কোডিং শৈলীর historicতিহাসিক প্রসঙ্গে আরও), এর অর্থ কোঁকড়া ধনুর্বন্ধনী "কম গুরুত্বপূর্ণ" " বাক্য গঠন.
রিচির সি ভাষার উন্নয়নের নিবন্ধে অ্যারেগুলির গুরুত্ব বেশ স্পষ্ট । "সি প্রোগ্রামগুলিতে পয়েন্টারগুলির বিস্তৃতি" সম্পর্কে একটি স্পষ্টভাবে বিবৃত ধারণাও রয়েছে ।
... নতুন ভাষা অ্যারের শব্দার্থবিজ্ঞানের সুসংগত এবং কার্যক্ষম (যদি অস্বাভাবিক হয়) ধরে রেখেছে ... দুটি ধারণা তার শ্রেণীর ভাষার মধ্যে সি এর সর্বাধিক বৈশিষ্ট্যযুক্ত : অ্যারে এবং পয়েন্টারগুলির মধ্যে সম্পর্ক ... এর অন্যান্য বৈশিষ্ট্যযুক্ত বৈশিষ্ট্য সি, এর অ্যারেগুলির চিকিত্সা ... এর আসল গুণ রয়েছে । যদিও পয়েন্টার এবং অ্যারেগুলির মধ্যে সম্পর্ক অস্বাভাবিক, তবে এটি শেখা যায়। তদুপরি, ভাষাটি গুরুত্বপূর্ণ ধারণাগুলি বর্ণনা করার জন্য যথেষ্ট শক্তি দেখায় , উদাহরণস্বরূপ, ভেক্টরগুলির দৈর্ঘ্য চলমান সময়ে পরিবর্তিত হয়, কেবল কয়েকটি প্রাথমিক নিয়ম এবং কনভেনশন সহ ...
সি ভাষা তৈরির সময় contextতিহাসিক প্রসঙ্গ এবং কোডিং শৈলীর আরও বোঝার জন্য, আমাদের বিবেচনা করা উচিত যে "সি এর উত্সটি ইউনিক্সের বিকাশের সাথে ঘনিষ্ঠভাবে জড়িত" এবং বিশেষত, পিডিপিতে ওএসকে পোর্ট করে- 11 "সি এর প্রাথমিক সংস্করণ বিকাশের দিকে পরিচালিত করেছে" ( উদ্ধৃতি উত্স )। উইকিপিডিয়া অনুসারে , "১৯ 197২ সালে ইউনিক্সকে সি প্রোগ্রামিং ভাষায় নতুন করে লেখা হয়েছিল" ।
ইউনিক্সের বিভিন্ন পুরানো সংস্করণের উত্স কোড অনলাইনে উপলব্ধ, যেমন দ্য ইউনিক্স ট্রি সাইটে। সেখানে উপস্থাপিত বিভিন্ন সংস্করণগুলির মধ্যে, সর্বাধিক প্রাসঙ্গিক বলে মনে হচ্ছে দ্বিতীয় সংস্করণ ইউনিক্সের 1972-06 তারিখ:
ইউনিক্সের দ্বিতীয় সংস্করণটি পিডিপি -11 এর জন্য বেল ল্যাবসে কেন থম্পসন, ডেনিস রিচি এবং অন্যান্য দ্বারা বিকাশ করা হয়েছিল। এটি আরও বেশি সিস্টেম কল এবং আরও কমান্ডের সাহায্যে প্রথম সংস্করণ প্রসারিত করেছিল। এই সংস্করণে সি ভাষার শুরুও দেখেছিল, যা কিছু আদেশ লিখতে ব্যবহৃত হয়েছিল ...
সময়ের সাধারণ কোডিং শৈলীর ধারণা পেতে আপনি দ্বিতীয় সংস্করণ ইউনিক্স (ভি 2) পৃষ্ঠা থেকে সি উত্স কোডটি ব্রাউজ এবং অধ্যয়ন করতে পারেন ।
একটি বিশিষ্ট উদাহরণ যা এই ধারণাকে সমর্থন করে যে প্রোগ্রামাররা তখন সহজেই স্কোয়ার বন্ধনী টাইপ করতে সক্ষম হয়েছিলেন 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;
এটি লক্ষণীয় আকর্ষণীয় যে লক্ষ্যযুক্ত ব্যবহারিক প্রয়োগগুলিতে ব্যবহারের উপর ভিত্তি করে ভাষা সিনট্যাক্স উপাদানগুলিকে বোঝাতে চরিত্রগুলি বাছাইয়ের ব্যবহারিক অনুপ্রেরণা এই ভয়ঙ্কর উত্তরে বর্ণিত হিসাবে জিপফের আইনের সাথে সাদৃশ্যপূর্ণ ...
ফ্রিকোয়েন্সি এবং দৈর্ঘ্যের মধ্যে পরিলক্ষিত সম্পর্ককে জিপফের আইন বলা হয়
... উপরের বিবৃতিতে দৈর্ঘ্যটি টাইপিংয়ের গতি হিসাবে / সাধারণীকরণ দ্বারা প্রতিস্থাপিত হয় only