কোনও কারণ আছে যে একটি অর্ধ-কোলন একটি পৃথক চিহ্নের পরিবর্তে লাইন টার্মিনেটর হিসাবে নির্বাচিত হয়েছিল?
আমি এই সিদ্ধান্তের পিছনে ইতিহাস জানতে চাই এবং আশা করি উত্তরগুলি ভবিষ্যতের সিদ্ধান্তগুলিকে প্রভাবিত করতে পারে এমন অন্তর্দৃষ্টি নিয়ে যাবে।
কোনও কারণ আছে যে একটি অর্ধ-কোলন একটি পৃথক চিহ্নের পরিবর্তে লাইন টার্মিনেটর হিসাবে নির্বাচিত হয়েছিল?
আমি এই সিদ্ধান্তের পিছনে ইতিহাস জানতে চাই এবং আশা করি উত্তরগুলি ভবিষ্যতের সিদ্ধান্তগুলিকে প্রভাবিত করতে পারে এমন অন্তর্দৃষ্টি নিয়ে যাবে।
উত্তর:
ইংরেজিতে সেমিকোলনটি বিবৃতিগুলির তালিকায় আইটেমগুলি পৃথক করতে ব্যবহৃত হয়, উদাহরণস্বরূপ
তিনি তিন জনকে দেখেছিলেন: জেমি, যিনি নিউজিল্যান্ড থেকে এসেছিলেন; জন, দুধের ছেলে; এবং জর্জ, একজন ভুতুড়ে ধরণের মানুষ।
প্রোগ্রামিং করার সময় আপনি বেশ কয়েকটি বিবৃতি পৃথক করে এবং একটি সম্পূর্ণ স্টপ ব্যবহার করে দশমিক পয়েন্টের জন্য সহজেই বিভ্রান্ত হতে পারেন। সেমিকোলন ব্যবহার করে স্বাভাবিক ইংরাজী বিরামচিহ্নের কাছাকাছি থাকা অবস্থায় পৃথক প্রোগ্রামের বিবৃতিগুলি পৃথক করার একটি সহজ পদ্ধতি পার্স করতে পারে।
যুক্ত করতে সম্পাদনা করুন
প্রথম দিনগুলিতে যখন মেমরিটি ব্যয়বহুল ছিল, প্রক্রিয়াকরণটি ধীর ছিল এবং প্রথম প্রোগ্রামিং ভাষাগুলি তৈরি করা হচ্ছিল, তখন প্রক্রিয়াজাতকরণের জন্য পৃথক স্টেটমেন্টগুলিতে প্রোগ্রামটি বিভক্ত করার প্রয়োজন ছিল। কিছু ভাষায় প্রতিটি বয়ানকে একটি লাইনে রাখা হয়েছিল যাতে গাড়ীর ফেরত বিবৃতি সীমানার হিসাবে কাজ করতে পারে required অন্যান্য ভাষাগুলি পাঠ্য বিন্যাসে আরও নিখরচায় বিন্যাসের অনুমতি দেয় এবং তাই নির্দিষ্ট নির্দিষ্ট সীমানার চরিত্রের প্রয়োজন হয়। এই চরিত্রটি সেমিকোলন হিসাবে নির্বাচিত হয়েছিল, সম্ভবত এটি ইংরেজি ভাষার ব্যবহারের সাথে সাদৃশ্য হওয়ার কারণে (এটি অনুমান করা উচিত; আমি তখন সেখানে ছিলাম না) এবং এটি অন্যান্য বিরামচিহ্নের সাথে দ্বন্দ্ব তৈরি করে নি বলে মনে হয় গাণিতিক বা অন্যান্য সিন্ট্যাকটিক উদ্দেশ্যে প্রয়োজনীয় চিহ্ন এবং চিহ্নগুলি।
আবার সম্পাদনা করুন
কিছু টার্মিনেটর চরিত্রের প্রয়োজনীয়তা ভাষার পাঠ্যকে বিশ্লেষণের প্রয়োজনীয়তায় ফিরে যায়। প্রারম্ভিক সংকলকগুলি অ্যাসেম্বলি ভাষায় বা কিছু ক্ষেত্রে সরাসরি হাতে তৈরি কারুকারক বাইনারি মেশিনের নির্দেশে লেখা হয়েছিল। একটি বিশেষ চরিত্র থাকা যা বিবৃতিটির শেষটিকে চিহ্নিত করে এবং প্রক্রিয়াকরণ করা পাঠ্যের অংশটিকে সীমিত করে দিয়ে প্রক্রিয়াজাতকরণটিকে আরও সহজ করে তোলে। যেমনটি আমি আগেই বলেছি, অন্যান্য ভাষাগুলি ক্যারেজ রিটার্ন বা বন্ধনী ব্যবহার করেছে। অ্যালগল, পাস্কাল, অ্যাডা, বিসিপিএল, বি, সি, পিএল / এম এবং অন্যান্য ভাষার ভাষার পরিবার সেমিকোলন ব্যবহার করতে দেখা যায়। এই চরিত্রটি ব্যবহার করার জন্য প্রথমে কোনটি ছিল, আমি মনে রাখার মতো ইতিহাসে এতটা পিছিয়ে যাই না। এর পছন্দ এবং গ্রহণ যেমন নিখুঁত জ্ঞান তোলে
চূড়ান্ত মন্তব্য হিসাবে, আমি মনে করি যে এই ভাষাগুলি এভাবে ব্যবহার করার সময় প্রথম ভাষা ডিজাইন করার সময় সেমিকোলনটি কোনও বিবৃতি শেষ করার জন্য সিদ্ধান্ত নেওয়ার ক্ষেত্রে ব্যয় করার চেয়ে এই উত্তরগুলি এবং মন্তব্যে বেশি সময় ব্যয় করেছিল।
অনেক ভাষা সি-র পরে মডেল করা সিনট্যাক্স ব্যবহার করে (যা বি এর পরে মডেল করা হয়েছিল - ধন্যবাদ @ ক্রোলসটার)। মন্তব্যে যেমন দেখা যায়, এই জাতীয় ভাষার একটি দীর্ঘ শৃঙ্খলা রয়েছে ... বি পিএল / আই দ্বারা অনুপ্রাণিত হয়েছিল, যা ;
পৃথককারী হিসাবে পৃথক হিসাবে ব্যবহার করার আগে আ’লজিওএল দ্বারা অনুসরণ করা হয়েছিল ।
যেহেতু সিতে বিবৃতি টার্মিনেটর হয় ;
, এই ভাষাগুলি অনুসরন করে।
কেন এটি সি-তে স্টেটমেন্ট টার্মিনেটর হিসাবে নির্বাচিত হয়েছিল - সম্ভবত ইংরেজিতে এর ব্যবহার "আন্তঃনির্ভর বিবৃতি নির্দেশ করার জন্য" ।
সি পিডিপি -11 এ এমন এক সময় আবিষ্কার করা হয়েছিল যেখানে অক্ষর সেটগুলির জন্য সীমিত পরিমাণে মেমরি উপলব্ধ ছিল, তাই ভাষার সন্ধানকারীদের এই সীমাবদ্ধতার মধ্যে কাজ করতে হয়েছিল।
ফরটারান বিবৃতি বর্ণন করতে গাড়ীর ফেরত ব্যবহার করে। সিবিওএল ব্যবহৃত সময়কাল। এলআইএসপি কোনও কিছুর ব্যবহার করেনি, সমস্ত কিছুর জন্য প্রথম বন্ধনীর উপর নির্ভর করে। ALGOL হ'ল প্রথম ভাষাটি পৃথক বিবৃতি দেওয়ার জন্য সেমিকোলন ব্যবহার করে। পাস্কাল পৃথক বিবৃতিতে সেমিকোলন ব্যবহার করে ALGOL এর নেতৃত্ব অনুসরণ করেছে।
পিএল / আমি বিবৃতি শেষ করতে সেমিকোলন ব্যবহার করেছি। একটি পার্থক্য রয়েছে, এবং এটি পাস্কলে সহজেই দেখা যায়। আডা ALGOL এর চেয়ে এই আইটেমটিতে পিএল / আইয়ের নেতৃত্ব অনুসরণ করেছে।
বিবৃতি বিভাজক বা টার্মিনেটর হিসাবে সেমিকোলন দ্রুত কম্পিউটার বিজ্ঞান সম্প্রদায় একটি দরকারী স্বরলিপি হিসাবে স্বীকৃত হয়েছিল এবং যতদূর আমি জানি, পরবর্তী প্রতিটি ব্লক-কাঠামোগত ভাষা ALGOL এর নেতৃত্ব অনুসরণ করে এবং বিবৃতি পৃথক বা সমাপ্ত করতে সেমিকোলন ব্যবহার করে।
আমাকে বহু বছর আগে বলা হয়েছিল যে বিসিপিএল বিবৃতি বিভাজক / টার্মিনেটর হিসাবে অর্ধিকোলন এবং ক্যারেজ রিটার্ন উভয়ই ব্যবহার করেছে , তবে আমি নিজেই ভাষাটি ব্যবহার করি নি এবং এটি যাচাই করতে অক্ষম। এক পর্যায়ে, বিসিপিএল বংশধরদের কাছ থেকে পৃথক বা সমাপ্ত বিবৃতিতে ক্যারেজ রিটার্নের ব্যবহার বাদ দেওয়া হয়েছিল। বিসিপিএল বি, বি, সি, সি, জি, সি, সি ++, জাভা, ডি এবং পুরো হোস্ট প্যাস্কাল এবং আডাদের চেয়ে যথেষ্ট কম চিন্তা-ভাবনা করে।
অন্য কোনও প্রতীক কেন নয়?
কয়েকটি ভাষায় অন্যান্য চিহ্ন ব্যবহার করা হয়েছে - বেসিকের পুরানো সংস্করণগুলির পরিবর্তে একটি উদাহরণ ব্যবহার করা হয়েছে colon
কয়েকটি ব্যতিক্রম উপেক্ষা করে তবে আমি মনে করি দুটি প্রাথমিক কারণ আছে। প্রথমটি হ'ল আপনি কেবল দ্ব্যর্থহীন কিছু সন্ধান করছেন। একটি সাধারণ পার্সারে, আপনি যদি কোনও গুরুতর যথেষ্ট ত্রুটির মধ্যে পড়ে থাকেন যা আপনি বর্তমানের বিবৃতিটি বিশ্লেষণ অব্যাহত রাখতে পারবেন না, আপনি সাধারণত বিবৃতি টার্মিনেটরের কাছে এড়িয়ে পার্সারটিকে পুনরায় সিঙ্কে ফিরে পাওয়ার চেষ্টা করেন এবং পার্সারটি পুনরায় শুরু করতে পারেন পরবর্তী বিবৃতি শুরু। তার জন্য, আপনি এমন কিছু চান যা কোডের অন্য কোথাও সাধারণত ঘটে না এবং সেমিকোলন এমন একটি চিহ্ন হিসাবে দেখা যায় যা অন্য কোনও অর্থ সংযুক্ত থাকে, তাই এ উদ্দেশ্যে এটি উত্সর্গ করা বেশ সহজ।
দ্বিতীয় কারণটি কিছুটা অনুরূপ, তবে কোডটি পড়া / ব্যবহার করা লোকদের দিকে আরও লক্ষ্য। আবার, এটি সত্যে ফিরে আসে যে আপনি যে প্রকৃত প্রতীকটি ব্যবহার করেন তাতে কিছু আসে যায় না। আপনার পাঠক একটি নির্দিষ্ট উদ্দেশ্যে, কখন এবং যদি সম্ভব হয় সেক্ষেত্রে দেখার অভ্যাসে ব্যবহার করা প্রতীকটি ব্যবহার করে পঠনযোগ্যতার যথেষ্ট সুবিধা রয়েছে। এর অর্থ এই নয় যে সি হ'ল এক নিখুঁত বাক্য গঠন এবং অন্য সব কিছু এটি অনিচ্ছাকৃতভাবে অনুসরণ করা উচিত, তবে এর অর্থ এই যে যথেষ্ট লোকেরা সেই বাক্য গঠনের সাথে পরিচিত যে একটি অস্পষ্টভাবে অনুরূপ ভাষা অনুসরণ করে অনেক কিছু অর্জন করে (এবং খুব সামান্য হারায়) following প্রায় একই সিনট্যাক্স যেখানে এটি করতে পারে।
আমি নোট করব যে এটি প্রায় অন্য কোনও প্রোগ্রাম ডিজাইনের মতো। যদি আমি এমন কোনও প্রোগ্রাম লিখি যা কোনও ধরণের উইন্ডো ব্যবহার করে তবে আমি কেবলমাত্র প্ল্যাটফর্মের লক্ষ্য প্ল্যাটফর্মের স্থানীয় বৈশিষ্ট্যগুলি ব্যবহার করার চেষ্টা করব। অনেকগুলি সিদ্ধান্ত যা মূর্ত আকারে মূলত স্বেচ্ছাচারিত হবে, এবং কার্যকারিতার কোনও বৃহত ক্ষতি ছাড়াই আলাদাভাবে করা যেতে পারে - তবে সমানভাবে, কার্যকারিতাতে যথেষ্ট লাভ ছাড়াই এগুলি পরিবর্তন করা কার্যকরভাবে কিছু অর্জন না করেই ব্যবহারকারীদের বিভ্রান্ত করে। একই ভাষাগত নীতিগুলি "কোন ভাষায় বিবৃতি (বা পৃথক) হওয়া উচিত?" "কোনও স্ক্রোল বারটি দেখতে কেমন হওয়া উচিত" বা "গাছ নিয়ন্ত্রণ কাজ করা উচিত?" এই সমস্ত ক্ষেত্রে, সিদ্ধান্তটি বেশিরভাগ স্বেচ্ছাসেবী হয় এবং অভিন্নতা নিজের মধ্যে এবং তার যথেষ্ট পরিমাণে সুবিধা দেয়।
আমি অনেকগুলি ভাষায় একই ঘটনাকে যুক্ত করব, কেবল আমাদের বেশিরভাগ লোক প্রোগ্রামিংয়ের আগে এতটাই অভ্যস্ত যে খুব কম লোকই এটি সম্পর্কে ভাবেন। সংযোজন নির্দেশ করতে সবাই কেন "+" বা বিয়োগফলকে নির্দেশ করতে "-" ব্যবহার করে? কারণ প্রতীকটির আকৃতি খুব বেশি গুরুত্ব দেয় না, তবে প্রত্যেকে প্রতিটি প্রতীকের জন্য একই অর্থ প্রয়োগ করতে সম্মত হয় তার পক্ষে অনেক গুরুত্বপূর্ণ।
সেমিকোলন মূলত আলগোলে 60 তে একটি বিবৃতি বিভাজক হিসাবে প্রস্তাবিত হয়েছিল , কোনও টার্মিনেটর নয়।
আলগোল 60০ এর আগে অস্তিত্বের একমাত্র উচ্চ-স্তরের প্রোগ্রামিং ভাষা ছিল ফোর্টরান, যার প্রতিটি বিবৃতি পৃথক লাইনে থাকা দরকার। ডু-লুপগুলির মতো একাধিক লাইনের বিস্তৃত বিবৃতিগুলি একটি বিজোড়তা হিসাবে বিবেচিত হয়েছিল এবং সেগুলি 'স্টেটমেন্ট ব্লক' হিসাবে বিবেচিত হত।
আলগোল 60 এর ডিজাইনাররা বুঝতে পেরেছিলেন যে বিবৃতিগুলির একটি শ্রেণিবদ্ধ কাঠামোর প্রয়োজন (যদি তা-হয় অন্যথায়, ডু-লুপগুলি, কেস স্টেটমেন্ট ইত্যাদি) এবং তারা একে অপরের ভিতরে বাসা বেঁধে রাখতে পারে। সুতরাং, পৃথক লাইনে বসে প্রতিটি বক্তব্যটির ধারণাটি আর কোনও অর্থ দেয় না। এস 1 ফর্মের বিবৃতিগুলির ক্রমিক রচনা; আছে S2; ...; SN ঐচ্ছিকরূপে ঘিরা মধ্যে শুরু - শেষ বন্ধনী বলা হয়েছে যৌগ বিবৃতি , এবং কম্পিউটারে কাজ করার একটি ভাষা 60 দ্বারা envisaged বিবৃতি হায়ারারকিকাল কাঠামো মধ্যে মাপসই করা সুতরাং, এখানে, সেমিকোলন পরিষ্কারভাবে একটি বিবৃতি হল বিভাজক , না একটি টারমিনেটর।
এটি বাস্তবে সমস্যাগুলির জন্ম দেয়। Algol 60 এর একটি "খালি বিবৃতি" ছিল যা কিছুই না লিখে বোঝানো হয়েছিল। সুতরাং, কেউ " আর্টিং এস 1; এন্ড " লিখতে পারে যেখানে সেমিকোলনটি উপস্থিত হয় যেন এটি S1 বন্ধ করে দিচ্ছে। তবে অ্যালগল 60 সংকলক সত্যই এটি S1 এর মধ্যে বিভাজক হিসাবে অনুসরণ করেছে এবং এটি অনুসরণ করে একটি অদৃশ্য খালি বিবৃতি রয়েছে। ব্যবহারিক প্রোগ্রামারদের জন্য এই সূক্ষ্মতা কিছুটা ছিল। এসেম্বলি এবং ফোর্টরানের মতো লাইন-ভিত্তিক ভাষার অভ্যস্ত হয়ে ওঠার পরে, তারা সত্যই বিবৃতি দেওয়ার জন্য টার্মিনেটর হিসাবে সেমিকোলনকে ভেবেছিল। যখন প্রোগ্রামগুলি লিখিত ছিল, সাধারণত সেমিকোলনটি বিবৃতিগুলির শেষে দেওয়া হত, যেমন:
a [i]: = 0; i: = i + 1
এবং সেমিকোলনটি সত্যই প্রথম বিবৃতিটির জন্য একটি টার্মিনেটরের মতো দেখায়। যদি প্রোগ্রামাররা সেমিকোলনকে একটি টার্মিনেটর হিসাবে বিবেচনা করে, তবে এর জাতীয় বিবৃতি একটি সিনট্যাক্স ত্রুটি দেয়:
যদি i> 0 হয় a [i]: = 0; আর a [i]: = 1;
কারণ সেমিকোলন "if" টিমিনেট করে এবং তাই, "অন্য" ঝুঁকিতে পরিণত হয়। প্রোগ্রামাররা পুরোপুরি বিভ্রান্ত হয়েছিল।
সুতরাং, পিএল / আই, যা লাইন-ভিত্তিক ফোর্টরানের আইবিএমের উত্তরসূরি ছিল, সেমিকোলনকে বিচ্ছেদের পরিবর্তে স্টেটমেন্ট টার্মিনেটরে পরিণত করার সিদ্ধান্ত নিয়েছিল । প্রোগ্রামাররা সেই পছন্দটি নিয়ে খুশি হয়েছিল। বেশিরভাগ প্রোগ্রামিং ভাষার মুখোমুখি হয়েছিল। (পাস্কেল এই প্রবণতাটি প্রতিহত করেছিলেন, তবে এর উত্তরসূরী আদা এটি ছেড়ে দিয়েছিল।)
[দ্রষ্টব্য যোগ করা হয়েছে: প্রোগ্রামিং ভাষার তুলনা সম্পর্কিত উইকিপিডিয়া নিবন্ধে বিভিন্ন প্রোগ্রামিং ভাষায় সেমিকোলনকে কীভাবে আচরণ করা হয় তার সংক্ষিপ্ত বিবরণে একটি দুর্দান্ত টেবিল রয়েছে।]
এটি বেশ বিশুদ্ধ অনুমানের কাজ, তবে ASCII এর মধ্যে সীমাবদ্ধ একটি মানক QWERTY কীবোর্ডের দিকে তাকানো সমাপ্তি / পৃথকীকরণের জন্য প্রাকৃতিক অক্ষরকে মূল্য দেয়!!?!:; এবং গাড়ী ফেরত। এর মধ্যে! পিরিয়ডগুলি অযোগ্য ঘোষণা করা হবে কারণ তারা দশমিক পয়েন্টগুলির সাথে সহজেই বিভ্রান্ত হয় যা তাদের প্রাথমিক কম্পিউটারগুলির সীমিত জায়গার কারণে টার্মিনেটর হিসাবে অহেতুক জটিল করে তুলবে। কোডের লাইনগুলি পর্দার একক লাইনে প্রদর্শিত হতে পারে তার চেয়ে দীর্ঘ হওয়ার সম্ভাবনা থাকার পরে ক্যারেজ রিটার্ন অযোগ্য ঘোষণা করা হবে, সুতরাং লাইনগুলি যখন অনুভূমিকভাবে স্ক্রোল করা হয়েছিল তখন কোনও প্রোগ্রাম পড়া আরও কঠিন হবে, বা পরের লাইনে ধারাবাহিকতা তৈরি করতে অতিরিক্ত অক্ষরের প্রয়োজন যা আবার জটিলতা যুক্ত করে। এই পাতা, এবং; এর মধ্যে বিকল্পগুলির তুলনায় লিখিতভাবে অনেক বেশি ব্যবহৃত হয়; তাই সেমিকোলনটি বেছে নেওয়া হয়েছে কারণ এটি টাইপ করা সহজ, কম বিভ্রান্তিকর কারণ এটির সীমিত অর্থ সহ একটি চরিত্রের সাথে যুক্ত করার অর্থ এবং কম জটিল কারণ বিশেষত এর ব্যবহারের সাথে বিশেষ ক্ষেত্রে বিদ্যমান নেই।
সেমিকোলনটি বেছে নেওয়া হয়েছিল কারণ এটি অলসতা এবং সরলতার ভিত্তিতে সেরা চরিত্র ছিল।
এটি মূলত একটি স্বেচ্ছাসেবী পছন্দ। কিছু ভাষা অন্যান্য পছন্দ করেছে। সিওবিএল .
চরিত্রের সাথে বিবৃতি সমাপ্ত করে । ফরট্রান, বেসিক এবং পাইথন সাধারণত নিউলাইনগুলি (মাল্টি-লাইন স্টেটমেন্টের জন্য বিশেষ সিনট্যাক্স সহ) দিয়ে স্টেটমেন্টগুলি সমাপ্ত করে। এবং লিস্প তার স্টেটমেন্টগুলি বন্ধনীর সাথে বন্ধনী দেয়।
;
একটি বিবৃতি বিভাজক / টার্মিনেটর হিসাবে মূল কারণটি এত জনপ্রিয় যে আজকের বেশিরভাগ জনপ্রিয় ভাষা ALGOL এর উপর ভিত্তি করে তৈরি হয়েছিল , যা সেই কনভেনশনটি ব্যবহার করেছিল।
পরিবর্তে ভিন্ন প্রতীক?
আপনি আর কি প্রতীক নিতে পারেন?
ASCII টি অক্ষর # $ @ [[] ^ _ `{|} ISO সর্বদা ISO 646 এর মতো প্রাথমিক অক্ষর এনকোডিংগুলিতে উপস্থিত ছিল না ।
অক্ষরগুলি ()*+-/<=>
সাধারণত গাণিতিক অপারেটর হিসাবে ব্যবহৃত হয় এবং বিবৃতি টার্মিনেটর হিসাবে ব্যবহৃত হলে পার্সিং অস্পষ্টতা তৈরি করে।
product = a * b * // If '*' were a statement terminator,
c * d * // Are there two factors, or four?
অনুরূপ সমস্যাগুলি প্রযোজ্য '
এবং "
যা সাধারণত স্ট্রিং ডিলিমিটার হিসাবে ব্যবহৃত হয়; ,
, যা সাধারণত ফাংশন আর্গুমেন্টগুলি পৃথক করতে ব্যবহৃত হয়, এবং .
, যা সাধারণত দশমিক পয়েন্ট হিসাবে ব্যবহৃত হয় (বা এর মতো নির্মাণে ডিলিমিটার হিসাবে some_struct.some_field
)।
যে পাতা !%&:;?
।
পছন্দ করা !
বা ?
সম্ভবত প্রযুক্তিগত অসুবিধা না ঘটায়, তবে তাদের ইংরেজি অর্থ প্রোগ্রামটিকে ভুল মেজাজ দেয়।
print(x)? # Yes, you should.
# It's an IMPERATIVE language; stop questioning my commands.
print(x)! # OK! You don't have to shout!
&
এক বিবৃতিতে বিভাজক (না টারমিনেটর) নামে আরো একটি যুক্তিসম্মত পছন্দ হতে কারণ
do_thing_a() &
do_thing_b()
জিনিস এ এবং তারপরে বি বি করার জন্য একটি কমান্ড হিসাবে পড়া যেতে পারে তবে বেশিরভাগ &
অপারেটর সহ ভাষা এটি লজিকাল বা বিটওয়াইস এবং পরিবর্তে ব্যবহার করে।
%
সাইন মত বিবৃতি বিভ্রান্তি কারণ হতে পারে interest_rate = 2.99%
(যা পরিবর্তনশীল সেট হবে 2.99
প্রত্যাশিত পরিবর্তে 0.0299
)। অবশ্যই, সুপরিচিত গাণিতিক অর্থ সিটিকে %
অবশিষ্ট অপারেটর হিসাবে ব্যবহার করা থেকে বিরত রাখেনি।
যাতে যে পাতা :
এবং ;
।
:
একটি বুদ্ধিমান পছন্দ, এবং বাস্তবে বেসিকের বেশিরভাগ উপভাষায় অন্তর্-লাইন বিবৃতি বিভাজক হিসাবে ব্যবহৃত হয়।
তবে ;
এর ইংরেজি ব্যাকরণ রয়েছে; এটি একটি বাক্যটির মধ্যে পৃথক ধারা ব্যবহার করতে ব্যবহৃত হতে পারে।
আপনার শিরোনাম প্রশ্নের উত্তর দেওয়ার চেষ্টা করার পরিবর্তে, আমি মনে করি আপনার অন্তর্নিহিত প্রশ্নে ফোকাস করা ভাল:
আমি এই সিদ্ধান্তের পেছনের ইতিহাস জানতে চাই এবং আশা করি যে উত্তরগুলি অন্তর্দৃষ্টি নিয়ে যাবে যা ভবিষ্যতের সিদ্ধান্তগুলি প্রোগ্রামিং ভাষার নকশা এবং প্রয়োগের ক্ষেত্রে প্রভাব ফেলতে পারে।
আপনি যদি প্রোগ্রামিং ভাষার নকশা এবং বাস্তবায়নের ইতিহাস সম্পর্কে জানতে চান এবং প্রক্রিয়াটি সম্পর্কে আরও অন্তর্দৃষ্টি অর্জন করতে চান তবে প্রোগ্রামিং ভাষা সম্মেলনের ইতিহাসের কার্যক্রম শুরু করার জন্য খুব ভাল জায়গা to (আমি মনে করি যদিও এই প্রক্রিয়াটি অ্যাক্সেস করতে সক্ষম হওয়ার জন্য আপনার একটি এসিএম সদস্যতার প্রয়োজন হবে))
কেন অনেক প্রোগ্রামিং ভাষায় বিবৃতি সেমিকোলন দ্বারা সমাপ্ত হয়? কোনও কারণ আছে যে একটি অর্ধ-কোলন একটি পৃথক চিহ্নের পরিবর্তে লাইন টার্মিনেটর হিসাবে নির্বাচিত হয়েছিল?
আপনার শিরোনামের প্রশ্নটি উদাহরণ হিসাবে বিবেচনা করে যে আপনি এইচওপিএল প্রক্রিয়াটি পড়ে উত্তর দেওয়ার চেষ্টা করতে পারেন, আমি নিম্নলিখিত বিষয়টি উপস্থাপন করতে চাই: একটি নতুন প্রোগ্রামিং ভাষা ডিজাইন করা লোকেরা সাধারণত তাই করেন কারণ তারা নিজেরাই জানেন এমন বিষয়গুলি বিবেচনা করে কোনওভাবে ভাঙ্গা / ঘাটতি। তাদের নতুন ভাষা হ'ল একদিকে এই ঘাটতিটি সমাধান করার জন্য। অন্যদিকে, ভাষা ডিজাইনাররা অন্যান্য ভাষাগুলি থেকে তারা যেগুলি ভাল বলে মনে করেন তাদের নকশার উপাদানগুলিও অনুলিপি করবেন বা তারা কেবল সেই উপাদানগুলিকেই পরিবর্তন করবেন না যার সাথে তারা কোনও সমস্যা অনুভব করেনি।
বিশেষত শেষ অংশটি গুরুত্বপূর্ণ: টার্মিনেটর হিসাবে কোন প্রোগ্রামিং ভাষাটি প্রথম কোন সেমিকোলন ব্যবহার করে এবং অন্যান্য প্রোগ্রামিং ভাষার অনেক ভাষা কেন অনুলিপি করে তা অনুসন্ধান করার পরিবর্তে, সম্ভবত অনুলিপি না করা ভাষাগুলি দেখে আপনি আরও শিখতে পারবেন এটা। উদাহরণস্বরূপ, যখন স্মলটক Simula থেকে অনুপ্রেরণা অনেক নিল তা নাএর বাক্য গঠনটি এবং অনুলিপিটি হিসাবে টার্মিনেটর হিসাবে সেমিকোলনগুলির বিশেষত এর অনুলিপি করুন। এটি টার্মিনেটরগুলি (সত্যিই পৃথককারীদের) পুরো স্টপেজে পরিবর্তন করেছে এবং সেমিকোলনকে অন্য কোনও কিছুর জন্য ব্যবহার করে। বিপরীতভাবে, প্রথম ভাষায় যে কোনও বিবৃতি টার্মিনেটর হিসাবে সেমিকোলন ব্যবহার করেছিল, এর আগে যে ভাষাগুলিতে ব্যবহৃত হয়েছিল তা থেকে এটি পরিবর্তন করার কোনও কারণ থাকতে পারে। এটি আরও সম্ভব যে এটি প্রথম ভাষা ছিল যে কোনও বিবৃতি টার্মিনেটরের সম্পূর্ণ ধারণাটি চালু করেছিল (বা অন্য ভাষার সাথে স্বতন্ত্রভাবে এটি করেছে) এবং সেমিকোলনটি কোনও কারণে ব্যবহৃত হয়েছিল যা এখন সময়ের সাথে হারিয়ে গেছে। (আমি সন্দেহ করি যে উত্তরসূরীটি এখানেই কেস, কারণ সেমিকোলনটি কেন ভাল পছন্দ ছিল সে সম্পর্কে অন্যান্য উত্তরদাতাদের কেউই সেমিকোলনটি প্রবর্তনকারী ব্যক্তির কাছ থেকে উদ্ধৃতিটি আবিষ্কার করতে সক্ষম হননি।) তবে আমার পুনরায় পুনরুদ্ধার করতে পয়েন্ট, আমি মনে করি যে ভাষা ডিজাইনাররা কেন সেগুলি অনুলিপি করেছে / রাখার পরিবর্তে ভাষা ডিজাইনাররা কেন জিনিসগুলিকে পরিবর্তন করেছে তা দেখে আপনি আরও শিখবেন। লোকেরা যখন সাধারণত জিনিসগুলি পরিবর্তন করতে থাকে বা পরিবর্তনের ব্যাখ্যা দিতে হয়, যখন জিনিসগুলি অনুলিপি করা বা একই রাখার সময় তারা তা করে না কারণ "আমরা কেন এটি পরিবর্তন করব? এটি ঠিক এভাবেই হয়েছে! "
এটি দৃশ্যমানতার বিষয়ে।
প্রাথমিক বিবৃতি বিভাজকরা ছিল '।' কোবল এবং নতুন লাইনের মতো, গাড়িতে করে ফরটারনে ফিরে আসে।
সিআর সীমাবদ্ধ প্রমাণিত করেছে যে এটি বেশ কয়েকটি লাইনে একটি বিবৃতি প্রবাহিত করা শক্ত করে তোলে।
ফুল স্টপ আরও মজাদার সমস্যা তৈরি করেছে। আপনি যখন ইংরেজী পাঠটি পড়েন তখন আপনার মস্তিষ্ক একটি চূড়ান্ত স্তরে সম্পূর্ণ স্টপগুলি প্রসেস করে, আপনি সচেতন হন যে একটি বাক্য শেষ হয়ে গেছে এবং আপনি শ্বাস প্রশ্বাসের জন্য বিরতি দিতে পারেন তবে আপনি এটি সত্যিই লক্ষ্য করেন না। এটি এটি সংকেত। এছাড়াও অনেক ফন্টে '।' সম্ভবতম ক্ষুদ্রতম অক্ষরটি কখনও কখনও একক পিক্সেল হিসাবে রেন্ডার হয়। নিখোঁজ বা অতিরিক্ত সময়সীমা সিওবিএল প্রোগ্রামগুলির ত্রুটির একক সাধারণ কারণ হয়ে উঠেছে।
তাই প্রাথমিক ভুলগুলি থেকে শিখতে ALGOL একটি নির্দিষ্ট টার্মিনেটর বাছাই করে যা একটি বিবৃতিকে বিভিন্ন লাইনের উপর দিয়ে প্রবাহিত করতে পারে এবং এমন একটিকে বেছে নিয়েছিল যা দৃশ্যমান এবং সহজেই মানব পাঠকরা লক্ষ্য করেছিলেন। অর্ধ-কোলন উভয় বৃহত্তর এবং সাধারণ ইংরাজীতে যথেষ্ট অস্বাভাবিক হওয়ায় অবচেতনভাবে প্রক্রিয়াজাত করা যায় না।
এটি আমার বোঝার কারণ ছিল যে এটি বেছে নেওয়া হয়েছিল কারণ একটি গাড়িবহর-ফেরত / নতুন-লাইন ব্যতীত স্পষ্ট বক্তব্য-টার্মিনেটরের প্রয়োজন ছিল। ৮০-কলামের পর্দার দিনগুলিতে, একাধিক লাইন জুড়ে কোড র্যাপের একক লাইনে থাকা যথেষ্ট সাধারণ যে স্টেটমেন্ট টার্মিনেটরের জন্য \ r বা using n ব্যবহার করা কাজ করবে না।
সেমিকোলনগুলি কেবল সুবিধাজনক ছিল কারণ তারা যুক্তি / গণিতের বিবৃতিতে ব্যবহৃত হয় না। যেমন, তারা কোনও উল্লেখযোগ্য পরিমাণে বিবৃতিগুলির আসল সামগ্রীর সাথে বিরোধ করে না।
ব্যক্তিগতভাবে, আমি মনে করি সেমিকোলনের অবিচ্ছিন্ন ব্যবহার 80 টি বর্ণের নীচে রেখাগুলির জন্য স্টাইলের প্রয়োজনীয়তার সাথে খোলামেলা নির্বোধ এবং অ্যানাক্রোনিস্টিক। পাইথনের মতো ভাষাগুলি ব্যাপকভাবে প্রমাণ করেছে যে আপনি এগুলি ছাড়াই আরও সহজে, সংক্ষিপ্ত কোড বোঝার জন্য সহজেই লিখতে পারেন। এছাড়াও, আপনার যদি 80 টি দীর্ঘ অক্ষরের লাইনগুলি নিয়ে সমস্যা থাকে তবে আপনার আরও বড় মনিটর প্রয়োজন।
এখানে দুটি প্রশ্ন রয়েছে: ALGOL কেন সেমিকোলন পেয়েছে এবং অন্যান্য ভাষা কেন এর পরে চলেছে।
প্রথম প্রশ্নের উত্তর ইতিমধ্যে এখানে বিভিন্নভাবে দেওয়া হয়েছে।
দ্বিতীয়টি হিসাবে, ALGOL অ্যালগরিদম লেখার জন্য সিউডোকোড ভাষা হিসাবে বহুল ব্যবহৃত হয়েছিল । সুতরাং, সেমিকোলনগুলি শীঘ্রই বিভিন্ন ভাষার ব্যবহারকারীদের জন্য প্রাকৃতিক হয়ে উঠেছে। এবং স্বাভাবিকভাবেই সেগুলি অল্প বয়স্ক ভাষার জন্য নেওয়া হয়েছিল।
আমি ভুল হতে পারি, তবে আমি মনে করি এটির সাথে এর কিছু সম্পর্ক রয়েছে যে অনেক সমাবেশে একটি মন্তব্য শুরু করার জন্য একটি সেমিকোলন ব্যবহার করা হত, সাধারণত নির্দেশের পরে দেওয়া হয়। একটি পরে সমস্ত কিছু ;
ছিল একটি মন্তব্য, এবং আর নিজেই নির্দেশের একটি অংশ।
তারপরে আপনি যখন কোনও দোভাষীকে এগুলি টাইপ করেন তখন নির্দেশাবলী সমাপ্ত করার দরকার হয়। সংক্ষিপ্ত নির্দেশাবলীর (যেমন গাণিতিক এক্সপ্রেশন) কেবল এন্টার কী টিপুন, দোভাষীকে জানিয়েছিলেন যে অভিব্যক্তি গণনা করার জন্য প্রস্তুত এবং এটি একটি ফলাফল তৈরি করেছিল। তবে কখনও কখনও কেউ নির্দেশের জন্য কোডের একাধিক লাইন ইনপুট করতে চেয়েছিলেন, সুতরাং এটির একটি উপায় হ'ল কেবল কী কী'র উপর নির্ভর না করে নির্দেশের একটি টার্মিনেটর হিসাবে কিছু বিশেষ অক্ষর ব্যবহার করা। এইভাবে, ব্যবহারকারী কোডের আরও লাইন একবারে প্রবেশ করতে পারে, কারণ এন্টার এখনও এটি দোভাষীর কাছে প্রেরণ করে নি। কেবল যখন ইন্টারপ্রেটার এন্টার সহ প্রবেশ করা একটি লাইনে সমাপ্তি চরিত্রটি খুঁজে পেত, শেষ পর্যন্ত এটি কার্যকর করে এবং এর ফলাফল গণনা করে।
এখন এই দুটি জিনিস একত্রিত করুন এবং সেমিকোলনটি সমাপ্তি চরিত্রের জন্য একটি সুস্পষ্ট পছন্দ বলে মনে হচ্ছে: এটি নির্দেশের অংশটি কোথায় শেষ হয় এবং মন্তব্যের অংশটি শুরু হয়, তাই যখন অনুবাদক এটি একটি লাইনে মুখোমুখি হয়, তখন জানে যে এটি ফ্লাশ করতে পারে knows এটি এতদূর প্রকাশিত অভিব্যক্তির সমস্ত লাইন এবং এটি কার্যকর করে, কারণ নির্দেশ সবেমাত্র শেষ হয়েছে, এখন আমরা একটি মন্তব্যে আছি (ভাল, কমপক্ষে এই লাইনের শেষ পর্যন্ত, কারণ পরবর্তী লাইনটি কোডে শুরু হবে) মোড আবার, একটি নতুন এক্সপ্রেশন / নির্দেশ শুরু)।
এটি অবশ্যই ধরে নিয়েছে যে এটি সেমিকোলনই ছিল যা সেই ব্যক্তির মন্তব্যের জন্য ব্যবহার করা হয়েছিল যারা এটিকে নির্দেশিক পরিশ্রমকারী হিসাবে পুনরায় ব্যবহার করার এই ধারণাটি নিয়ে আসে। এটি অন্য কোনও চরিত্র হওয়ার পরে, আমরা অন্য কোনও নির্দেশিকা টার্মিনেটর দিয়ে শেষ করতে পারি।
ইনবি 4: না, এটি কোনও historicalতিহাসিক বিবরণ নয়। আমার কাছে কোনও প্রমাণ নেই যে এটিই সেমিকোলনগুলি জীবনে আসার আসল উপায়। এটি সম্ভবত আমি কীভাবে কল্পনা করেছি এটি সম্ভবত ঘটেছে।
বেশিরভাগ ভাষাগুলি আধা-কোলন গ্রহণ করেছিল কারণ এটি ইতিমধ্যে সেই উদ্দেশ্যে ব্যাপকভাবে ব্যবহৃত হয়েছিল এবং পরিবর্তনের কোনও অর্থ হয় না।
এবং চয়ন করার জন্য প্রথম ভাষা বিবেচনা করে, আপনাকে বিকল্পগুলি কী তা বিবেচনা করতে হবে। কোনও ভাষা নকশা করার সময় আপনি প্রয়োজনীয় অক্ষরগুলি উপলব্ধ থাকতে চান এবং অক্ষর সেটগুলি এই সময়ে 6 টি বিটকে কোড করা হয়েছিল, প্রায়শই কিছু নিদর্শন সংরক্ষিত থাকে, প্রায়শই কিছু অক্ষর দৃ firm়ভাবে সংজ্ঞায়িত হয় না (এটি পরবর্তী ঘটনার জন্য, এটি সম্পর্কে চিন্তা করুন আইএসও -৪66 এর জাতীয় রূপগুলি - মার্কিন রূপটি ASCII নামে ভালই জানে - যা "সাধারণ" অক্ষরের যেমন কোডগুলি পুনরায় ব্যবহার করে [
, #
বা $
, এবং এমন প্রসঙ্গে এমন প্রভাব দেখায় যেখানে অনেকগুলি কোড পজিশনের অর্ধেক থাকে এর অর্ধেকেরও বেশি সংরক্ষণ করে চিঠি এবং অঙ্কগুলি)।
সম্ভবত অন্য কোনও চরিত্র ছিল না যা স্বজ্ঞাত হিসাবে স্টেটমেন্ট বিভাজক হিসাবে ব্যবহৃত হতে পারে ( .
সম্ভবত ইতিমধ্যে সেই মানদণ্ডের একমাত্র গুরুতর প্রতিযোগী) এবং পার্সিং এবং লেক্সিং তত্ত্বটি এখনও বিস্তৃত অবস্থায় ছিল এমন সময়ে লিেক্সিং বা পার্সিংয়ের অসুবিধা প্রবর্তন না করে ( .
এখন আসল সংখ্যায় ব্যবহারের কারণে প্রশ্নের বাইরে)।
সেমিকোলন ব্যবহার করার আরেকটি কারণ হ'ল এটি এমন একটি চরিত্র যা আমাদের প্রয়োজন হয় না বা প্রায়শই ব্যবহার করে না।
ধরুন আমরা এটিকে প্রায়শই পরিবর্তনশীল নাম বা কোনও জিনিস হিসাবে ব্যবহার করি এবং যদি সেমিকোলনটি কীওয়ার্ড বা অপারেটর হিসাবে ব্যবহৃত হত, তবে এটি সংকলকটির জন্য একটি প্রতীক বিরোধ ছিল, সুতরাং এটি প্রতীক ব্যবহার করা গুরুত্বপূর্ণ ছিল যা এটি নয় কোডিংয়ে প্রায়শই ব্যবহৃত হয়।
আমি বিশ্বাস করি সি স্টাইল প্রোগ্রামিং ভাষাগুলি এটি জনপ্রিয় করে তুলেছে এবং তারপরে নতুন প্রোগ্রামিং ভাষার লেখকরা চাকাটি পুনরায় উদ্ভাবন করতে চায় নি এবং তারা এখনও অবধি ব্যবহার করে চলেছে।