সি--

প্রোগ্রামিং ভাষা

সি-- (উচ্চারণ সি মাইনাস মাইনাস) একটি সি-সদৃশ প্রোগ্রামিং ভাষা, যা মূলত উচ্চ-স্তরের ভাষার কম্পাইলারগুলো দ্বারা তৈরি করার জন্য ডিজাইন করা হয়েছে, মানব প্রোগ্রামারদের দ্বারা সরাসরি লেখার জন্য নয়। এটি ফাংশনাল প্রোগ্রামিং গবেষক সাইমন পেটন জোন্স এবং নরম্যান র‍্যামসি দ্বারা তৈরি করা হয়। অনেক অন্যান্য মধ্যবর্তী ভাষার বিপরীতে, এটি বাইটকোড বা অন্য কোনো বাইনারি ফর্ম্যাটে নয়, বরং সাধারণ ASCII টেক্সটে উপস্থাপিত হয়।[][]

সি--
প্যারাডাইমইম্পারেটিভ
নকশাকারসাইমন পেইটন জোন্স এবং নর্মান র‍্যামসি
প্রথম প্রদর্শিত১৯৯৮
টাইপিং পদ্ধতিস্ট্যাটিক, উইক টাইপিং
ওয়েবসাইটhttps://www.cs.tufts.edu/~nr/c--/index.html
যার দ্বারা প্রভাবিত
সি

সি-- এর দুটি প্রধান শাখা রয়েছে:

  • সি--, মূল শাখা, যার চূড়ান্ত সংস্করণ ২.০ ২০০৫ সালের মে মাসে প্রকাশিত হয়েছিল[]
  • সিএমএম (সিএমএম), একটি ফর্ক যা গ্লাসগো হাস্কেল কম্পাইলার (জিএইচসি)-এ মধ্যবর্তী উপস্থাপনা (আইআর) হিসেবে সক্রিয়ভাবে ব্যবহৃত হয়[]

ডিজাইন

সম্পাদনা

সি-- একটি "পোর্টেবল অ্যাসেম্বলি ভাষা", যা উচ্চমানের মেশিন কোড তৈরির কম্পাইলারগুলোর বাস্তবায়ন সহজ করতে ডিজাইন করা হয়েছে। এটি নিম্ন-স্তরের কোড উৎপাদন এবং প্রোগ্রাম অপ্টিমাইজেশনের কাজ সি-- কম্পাইলারের ওপর ন্যস্ত করে। ভাষাটির সিনট্যাক্স সি থেকে অনেকটাই ধার করা হয়েছে, তবে এতে স্ট্যান্ডার্ড সি বৈশিষ্ট্য যেমন ভ্যারিয়াডিক ফাংশন, পয়েন্টার সিনট্যাক্স, এবং টাইপ সিস্টেমের কিছু দিক বাদ দেওয়া হয়েছে বা পরিবর্তন করা হয়েছে, কারণ সেগুলো সি-- এর মূল বৈশিষ্ট্য এবং কোড উৎপাদনের সহজতায় প্রতিবন্ধকতা সৃষ্টি করে।[]

ভাষাটির নাম একটি রসিকতা নির্দেশ করে, যা বোঝায় যে সি-- হল সি এর একটি সরল সংস্করণ, যেমন সি++ এর নামকরণ করা হয়েছিল সি এর উন্নত সংস্করণ বোঝাতে। (সি-তে -- এবং ++ যথাক্রমে "হ্রাস" এবং "বৃদ্ধি" বোঝায়।)

সি-- এর কাজ শুরু হয়েছিল ১৯৯০ এর দশকের শেষ দিকে। যেহেতু কাস্টম কোড জেনারেটর লেখা নিজেই একটি চ্যালেঞ্জ, এবং তখনকার গবেষকদের জন্য বিদ্যমান কম্পাইলার ব্যাকএন্ডগুলো জটিল ও অপর্যাপ্তভাবে ডকুমেন্টেড ছিল, অনেক প্রকল্প সি কোড জেনারেট করার জন্য কম্পাইলার তৈরি করেছিল (যেমন, মূল মডুলা-৩ কম্পাইলার)। তবে সি ফাংশনাল ভাষার জন্য একটি দুর্বল পছন্দ: এটি টেল-কল অপ্টিমাইজেশনের নিশ্চয়তা দেয় না, নির্ভুল গারবেজ কালেকশন সমর্থন করে না, বা কার্যকর এক্সেপশন হ্যান্ডলিং সরবরাহ করে না। সি-- হলো সি এর একটি সরল, সুসংজ্ঞায়িত বিকল্প যা এই সব বৈশিষ্ট্য সমর্থন করে। এর সবচেয়ে উদ্ভাবনী বৈশিষ্ট্য হলো একটি রানটাইম ইন্টারফেস যা পোর্টেবল গারবেজ কালেক্টর, এক্সেপশন হ্যান্ডলিং সিস্টেম এবং অন্যান্য রানটাইম বৈশিষ্ট্য লেখার সুযোগ দেয়, যা যেকোনো সি-- কম্পাইলারের সাথে কাজ করতে পারে।[]

সি-- এর প্রথম সংস্করণ এপ্রিল ১৯৯৮ সালে একটি এমএসআরআ পেপার হিসেবে প্রকাশিত হয়, যা জানুয়ারি ১৯৯৯ সালে গারবেজ কালেকশন সম্পর্কিত একটি পেপারের সঙ্গে সঙ্গতিপূর্ণ ছিল। মে ১৯৯৯ সালে একটি হালনাগাদ নির্দেশিকা এইচটিএমএল আকারে পোস্ট করা হয়। ২০০০ সালে নরম্যান র‍্যামসি ("প্রস্তাবিত পরিবর্তন") এবং ক্রিশ্চিয়ান লিন্ডিগ ("একটি নতুন ব্যাকরণ") দ্বারা প্রস্তাবিত দুটি প্রধান পরিবর্তন সি-- এর সংস্করণ ২ তে নিয়ে যায়, যা ২০০৪ সালের দিকে চূড়ান্ত এবং ২০০৫ সালে আনুষ্ঠানিকভাবে প্রকাশিত হয়।

টাইপ সিস্টেম

সম্পাদনা

সি-- এর টাইপ সিস্টেম হার্ডওয়্যার দ্বারা আরোপিত সীমাবদ্ধতাকে প্রতিফলিত করার জন্য ডিজাইন করা হয়েছে, উচ্চ-স্তরের ভাষা দ্বারা আরোপিত প্রচলিত নিয়ম নয়। একটি রেজিস্টার বা মেমরিতে সংরক্ষিত মানের শুধুমাত্র একটি টাইপ থাকতে পারে: বিট-ভেক্টর। তবে, বিট-ভেক্টর একটি পলিমর্ফিক টাইপ, যা বিভিন্ন প্রস্থে আসে, যেমন বিটস৮, বিটস৩২, বা বিটস৬৪। একটি আলাদা ৩২-বা-৬৪ বিট ফ্লোটিং-পয়েন্ট টাইপের পরিবারও সমর্থিত। বিট-ভেক্টর টাইপের পাশাপাশি, সি-- একটি বুলিয়ান টাইপ bool প্রদান করে, যা এক্সপ্রেশনের মাধ্যমে গণনা করা যায় এবং কন্ট্রোল ফ্লোতে ব্যবহৃত হয়, কিন্তু রেজিস্টার বা মেমরিতে সংরক্ষণ করা যায় না। অ্যাসেম্বলি ভাষার মতো, যেকোনো উচ্চতর টাইপ শৃঙ্খলা, যেমন signed, unsigned, float, এবং pointer এর মধ্যে পার্থক্য, সি-- অপারেটর বা অন্যান্য সিনট্যাকটিক কন্সট্রাক্ট দ্বারা আরোপিত হয়। সি-- টাইপ-চেক করা হয় না, এবং এটি কলিং কনভেনশন আরোপ বা পরীক্ষা করে না।

সি-- এর সংস্করণ ২ বিট-ভেক্টর এবং ফ্লোটিং-পয়েন্ট টাইপের মধ্যে পার্থক্য তুলে দেয়। এই টাইপগুলো একটি স্ট্রিং "কাইন্ড" ট্যাগ দিয়ে এনোটেট করা যায়, যা একটি ভেরিয়েবলের পূর্ণসংখ্যা বনাম ফ্লোট টাইপিং এবং এর স্টোরেজ আচরণ (গ্লোবাল বা লোকাল) নির্ধারণে সাহায্য করে। এটি বিশেষত সেই টার্গেটে কার্যকর যেখানে পূর্ণসংখ্যা এবং ফ্লোটিং-পয়েন্ট মানের জন্য আলাদা রেজিস্টার রয়েছে। পয়েন্টার এবং নেটিভ ওয়ার্ডের জন্য বিশেষ টাইপ পরিচয় করানো হয়েছে, যদিও এগুলোকে টার্গেট-নির্ভর দৈর্ঘ্যের বিট-ভেক্টরে ম্যাপ করা হয়েছে।

কোডিং এর উদাহারণ

সম্পাদনা

নিম্নলিখিত সি-- কোডটি ১ থেকে n পর্যন্ত পূর্ণসংখ্যার যোগফল এবং গুণফল গণনা করে (n একটি আর্গুমেন্ট হিসেবে গ্রহণ করা হয়)। এটি ভাষার দুটি বৈশিষ্ট্য প্রদর্শন করে:

  • প্রোসিডিউর একাধিক ফলাফল ফিরিয়ে দিতে পারে।
  • টেল রিকর্শন স্পষ্টভাবে "jump" কীওয়ার্ড দিয়ে অনুরোধ করা হয়।
  
/* টেল রিকর্শন */  
export sp;  
sp( bits32 n ) {  
  jump sp_help( n, 1, 1 );  
}

sp_help( bits32 n, bits32 s, bits32 p ) {  
  if n==1 {  
      return( s, p );  
  } else {  
      jump sp_help( n-1, s+n, p*n );  
  }  
}

বাস্তবায়ন

সম্পাদনা

সি-- এর স্পেসিফিকেশন পৃষ্ঠায় এর কয়েকটি বাস্তবায়ন তালিকাভুক্ত রয়েছে। "সবচেয়ে সক্রিয়ভাবে উন্নয়নশীল" কম্পাইলার, কুইক সি--, ২০১৩ সালে পরিত্যক্ত হয়।

সি-- এর কিছু ডেভেলপার, যেমন সাইমন পেটন জোন্স, জোয়াও ডায়াস, এবং নরম্যান র‍্যামসি, জিএইচসি-তে কাজ করেছেন বা কাজ করছেন, যার উন্নয়ন সি-- ভাষায় সম্প্রসারণ এনেছে। এর ফলে Cmm ডায়ালেক্ট তৈরি হয়েছে, যা এরগনোমিক্সের জন্য সি প্রিপ্রসেসর ব্যবহার করে।

জিএইচসি ব্যাকএন্ডগুলো সি-- কে এক্সিকিউটেবল কোডে রূপান্তরিত করার দায়িত্বে রয়েছে, যা এলএলভিএম আইআর, স্লো সি, বা অন্তর্নির্মিত নেটিভ ব্যাকএন্ডের মাধ্যমে সরাসরি সম্পন্ন হয়। যদিও মূল উদ্দেশ্য ছিল ভিন্ন, জিএইচসি সি-- এ অনেক জেনেরিক অপ্টিমাইজেশন সম্পাদন করে। অন্যান্য কম্পাইলার আইআর-এর মতো, ডিবাগিংয়ের জন্য সি-- উপস্থাপনাটি ডাম্প করা যায়। লক্ষ্য নির্দিষ্ট অপ্টিমাইজেশন পরে ব্যাকএন্ড দ্বারা সম্পাদিত হয়।

প্রসেসিং সিস্টেম

সম্পাদনা

২০২৩ সালের তথ্য অনুযায়ী, বেশিরভাগ প্রসেসিং সিস্টেম রক্ষণাবেক্ষণ করা হয় না, এবং এর সোর্স কোডের প্রকাশও বন্ধ।

  • কুইক সি-- একটি কম্পাইলার যা দ্যা কুইক সি-- টিম দ্বারা ডেভেলপ করা হয়েছে। এটি সি-- এর সংস্করণ ২ কোডকে ইন্টেল এক্স৮৬ লিনাক্স মেশিন কোডে কম্পাইল করে। অন্যান্য প্ল্যাটফর্মের জন্য মেশিন কোডে কম্পাইলেশন একটি পরীক্ষামূলক বৈশিষ্ট্য হিসেবে উপলব্ধ। পূর্বে, কুইক সি--, সি-- ভাষার স্পেসিফিকেশনের বিকাশের সাথে সমান্তরালে ডেভেলপ করা হয়েছিল। তবে, এখন সোর্স কোড শুধুমাত্র গিটহাবে উপলব্ধ এবং ডেভেলপমেন্ট বন্ধ হয়ে গেছে।
  • সিএমএমসি হলো একটি সি-- কম্পাইলার যা এমএল প্রোগ্রামিং ভাষায় ফারমিন রেইগ দ্বারা বাস্তবায়িত। এটি আলফা, স্পার্ক এবং x86 আর্কিটেকচারের জন্য মেশিন কোড তৈরি করে।
  • ট্রাম্পোলিন সি-- কম্পাইলার হলো একটি সি-- থেকে সি ট্রান্সপাইলার, যা ১৯৯৯ সালের মে মাসে সের্গেই এগোরভ দ্বারা তৈরি করা হয়। এটি সি-- কোডকে সি কোডে অনুবাদ করে, যা স্ট্যান্ডার্ড সি কম্পাইলার ব্যবহার করে কম্পাইল করা যায়।
  • দ্যা অরেগন গ্র্যাজুয়েট ইন্সটিটিউটস সি-- (ওজিআই সি-- কম্পাইলার) হলো প্রথম প্রোটোটাইপ সি-- কম্পাইলার, যা ১৯৯৭ সালে এমএল প্রোগ্রামিং ভাষায় বাস্তবায়িত হয়। কুইক সি-- এর ডেভেলপমেন্ট শুরু হওয়ার পর ওজিআই সি-- কম্পাইলার এর রক্ষণাবেক্ষণ বন্ধ করা হয়।

তথ্যসূত্র

সম্পাদনা
  1. GC 99, April 1998
  2. The C-- Language Specification Version 2.0, https://www.cs.tufts.edu/~nr/c--/extern/man2.pdf
  3. V2
  4. 11vm Backend
  5. The C– Language Reference Manual, https://www.microsoft.com/en-us/research/publication/the-c-language-reference-manual/
  6. C–: a portable assembly language that supports garbage collection, https://www.microsoft.com/en-us/research/publication/portable-assembly-language-supports-garbage-collection/