অক্যাম

**অক্যাম** একটি প্রোগ্রামিং ভাষা, যা সহযোগী কম্পিউটিং বা সহযোগী এবং কমিউনিকেটিং সিকোয়েনশিয়াল প্রসেসেস (CSP) প্রক্রিয়া বীজগণিতের উপর ভিত্তি করে নির্মিত। এর অনেক বৈশিষ্ট্য এই প্রক্রিয়া অ্যালজেব্রার সাথে সামঞ্জস্যপূর্ণ। এই ভাষাটির নামকরণ করা হয়েছে দার্শনিক ওকামের উইলিয়াম এর নামে, যার নামে অকামের রেজারও পরিচিত।

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

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

প্রক্রিয়াগুলির মধ্যে যোগাযোগ *চ্যানেল* নামে নির্দিষ্ট চ্যানেলের মাধ্যমে ঘটে। একটি প্রক্রিয়া `!` চিহ্ন দিয়ে চ্যানেলে ডেটা আউটপুট করে এবং আরেকটি প্রক্রিয়া `?` চিহ্ন দিয়ে ডেটা ইনপুট করে। ইনপুট এবং আউটপুট তখনই ঘটে যখন অন্য প্রান্ত ডেটা গ্রহণ বা প্রস্তাব করার জন্য প্রস্তুত থাকে। (যখন এই *প্রসিড না করার* অবস্থা ঘটে, তখন বলা হয় যে প্রক্রিয়াটি চ্যানেলে *ব্লক* হয়েছে। তবে প্রোগ্রামটি স্পিন করবে না বা পোল করবে না; তাই এখানে *অপেক্ষা*, *আটকে থাকা* বা *ইল্ড* করার মতো শব্দগুলোও এই আচরণটি বোঝাতে পারে; তবে এটি অন্য স্বাধীন প্রক্রিয়াগুলি চলমান হতে বাধা দেবে না।) উদাহরণ (c একটি ভেরিয়েবল):

  keyboard ? c

  screen ! c

`SEQ` একটি এক্সপ্রেশন তালিকার সূচনা করে যা সিরিয়ালি অর্থাৎ ক্রমান্বয়ে মূল্যায়ন করা হয়। অধিকাংশ প্রোগ্রামিং ভাষার মতো এটি আপনা-আপনি ঘটে না। যেমন:

  SEQ  
    x := x + 1  
    y := x * x

`PAR` একটি এক্সপ্রেশন তালিকার সূচনা করে যা সমান্তরালে অর্থাৎ একযোগে মূল্যায়ন করা যেতে পারে। যেমন:

  PAR  
    p()  
    q()

`ALT` একটি *গার্ডেড* কমান্ড তালিকা নির্দিষ্ট করে। গার্ডগুলো একটি বুলিয়ান শর্ত এবং ইনপুট এক্সপ্রেশনের সংমিশ্রণ, উভয়ই ঐচ্ছিক। যে সকল গার্ডের কন্ডিশন ট্রু এবং ইনপুট চ্যানেল রেডি থাকে, তাদের একটি সফল বিকল্প হিসেবে নির্বাচন করা হয়। যেমন:

  ALT  
    count1 < 100 & c1 ? data  
      SEQ  
        count1 := count1 + 1  
        merged ! data  
    count2 < 100 & c2 ? data  
      SEQ  
        count2 := count2 + 1  
        merged ! data  
    status ? request  
      SEQ  
        out ! count1  
        out ! count2

এটি চ্যানেল c1 বা c2 থেকে ডেটা পড়ে (যে চ্যানেল প্রস্তুত থাকে) এবং এটিকে একটি মার্জড চ্যানেলে প্রেরণ করে। count (গনণাকারী ভেরিয়েবল) যদি ১০০-তে পৌঁছে যায়, তবে সংশ্লিষ্ট চ্যানেল থেকে পড়া নিষ্ক্রিয় করা হবে। স্ট্যাটাস চ্যানেলের অনুরোধটি count1 এবং count2 আউটপুটের মাধ্যমে আউটপুট দেয়।

## সংস্করণ
থাম্ব|"অক্যাম", ইনমস লিমিটেড, ১৯৮৩

### অক্যাম ১
*অক্যাম ১* (১৯৮৩) ভাষাটির একটি প্রাথমিক সংস্করণ ছিল যা ডেভিড মের EPL এবং টনি হোয়ার এর CSP কাজ থেকে ধার করা হয়েছিল। এটি শুধুমাত্র VAR ডেটা টাইপ সমর্থন করত, যা টার্গেট আর্কিটেকচারের দেশীয় শব্দ দৈর্ঘ্যের সাথে সমান একটি পূর্ণসংখ্যা টাইপ ছিল, এবং এটি শুধুমাত্র এক মাত্রার অ্যারে সমর্থন করত।

### অক্যাম ২
*অক্যাম ২* ১৯৮৭ সালে Inmos Ltd দ্বারা তৈরি একটি সম্প্রসারিত সংস্করণ, যা ফ্লোটিং-পয়েন্ট সমর্থন, ফাংশন, বহু-মাত্রিক অ্যারে এবং বিভিন্ন ডেটা টাইপ যেমন ভিন্ন আকারের পূর্ণসংখ্যা (INT16, INT32) এবং বাইট সমর্থন যোগ করেছে।

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

### অক্যাম ২.১
*অক্যাম ২.১* ছিল ইনমসের অবদানে অক্যাম ভাষার উন্নয়নের শেষ সংস্করণ। ১৯৯৪ সালে সংজ্ঞায়িত এই সংস্করণটি প্রাথমিকভাবে ১৯৯০-এর দশকের শুরুতে ইনমসে জিওফ ব্যারেটের তৈরি প্রস্তাবিত একটি **অক্যাম ৩** ভাষা (প্রাথমিক উন্নয়নের সময়ে "অক্যাম৯১" নামেও পরিচিত) দ্বারা প্রভাবিত ছিল। অক্যাম ৩-এর একটি সংশোধিত রেফারেন্স ম্যানুয়াল সম্প্রদায়ের মন্তব্যের জন্য বিতরণ করা হয়েছিল, তবে এটি কখনোই সম্পূর্ণরূপে একটি কম্পাইলারে বাস্তবায়িত হয়নি।

অক্যাম ২.১ অক্যাম ২-এর কিছু নতুন বৈশিষ্ট্য যুক্ত করে, যেমন:
* নামযুক্ত ডেটা টাইপ (DATA TYPE x IS y)
* নামযুক্ত রেকর্ড
* প্যাকড রেকর্ড
* কিছু টাইপ কনভার্সন নিয়মের শিথিলকরণ
* নতুন অপারেটর (যেমন BYTESIN)
* চ্যানেলের পুনঃটাইপিং এবং চ্যানেল অ্যারে
* স্থির দৈর্ঘ্যের অ্যারে ফাংশন থেকে রিটার্ন করার ক্ষমতা

সম্পূর্ণ পরিবর্তনগুলির তালিকা দেখতে Inmos occam 2.1 Reference Manual-এর পরিশিষ্ট P দেখুন: http://www.wotug.org/occam/documentation/oc21refman.pdf।

### অক্যাম-পাই
*অক্যাম-পাই* হল পরবর্তী সংস্করণের কেন্ট রিটার্গেটেবল অক্যাম কম্পাইলার (KRoC) দ্বারা বাস্তবায়িত অক্যামের একটি পরিবর্তিত রূপ। অক্যাম নামে *π* (pi) প্রতীক যুক্ত করার মাধ্যমে এটিকে π-ক্যালকুলাস দ্বারা অনুপ্রাণিত বিভিন্ন ধারণা অন্তর্ভুক্ত করার ইঙ্গিত দেওয়া হয়েছে। এটি অক্যাম ২.১ কম্পাইলারে কয়েকটি গুরুত্বপূর্ণ সম্প্রসারণ যুক্ত করেছে, যেমন:
* নেস্টেড প্রোটোকল
* রান-টাইম প্রক্রিয়া তৈরি
* মোবাইল চ্যানেল, ডেটা, এবং প্রক্রিয়া
* পুনরাবৃত্তি
* প্রোটোকল উত্তরাধিকার
* অ্যারে কনস্ট্রাক্টর
* বিস্তৃত রেন্ডেভাস

বিষয়শ্রেণী:প্রোগ্রামিং ভাষা