ভূমিকা §
এলইনার প্রকারগুলি হ’ল শৃঙ্খলার তত্ত্ব টাইপ করার জন্য একটি অ্যাপ্লিকেশন
লিনিয়ার লজিকজিন-ইয়ভেস গিরার্ড দ্বারা প্রথম বর্ণিত (গিরার্ড, 1987)। প্রতিষ্ঠার পর থেকে এটি কম্পিউটার বিজ্ঞানে অনেক ফলপ্রসূ আবিষ্কারের দিকে পরিচালিত করেছে। এই নিবন্ধে আমি কেন এটি এত আকর্ষণীয় তা ব্যাখ্যা করার আশা করি, পাশাপাশি এটি আজ প্রোগ্রামারদের জন্য উপলব্ধ কংক্রিট সরঞ্জাম এবং অনুশীলনের সাথে সম্পর্কিত।
টিলিনিয়ার লজিকের চারটি প্রধান অপারেটর এখানে:
\ (A ⊗ b \), পড়ুন একটি সময় খমানগুলির একটি স্বতন্ত্র জোড় উপস্থাপন করে যা কোনও ক্রমে ব্যবহৃত হতে পারে, অনুরূপ
struct
মরিচা মত ভাষায়;\ (A ⊕ b \), পড়ুন একটি প্লাস খহয় একটি প্রতিনিধিত্ব করে ক বা ক খএবং গ্রাহক অবশ্যই উভয় সম্ভাবনার জন্য প্রস্তুত থাকতে হবে, অনুরূপ
enum
মরিচা মত ভাষায়;\ (এ \ অপারেটর্নেম {\ &} বি \), পড়ুন একটি খহয় হয় একটি ক বা ক
খএবং গ্রাহক কোনটি বেছে নিতে পারেন;\ (এ \ অপারেটর্নেম {⅋} বি \), পড়ুন একটি দ্বারা খপ্রযোজক দ্বারা নির্বাচিত একটি আদেশে উপস্থাপিত মানগুলির একটি আন্তঃনির্ভর জোড়, এবং গ্রাহককে যে কোনও ক্রমে তাদের প্রতিক্রিয়া জানাতে প্রস্তুত থাকতে হবে।
ক লিনিয়ার ধরণের সাধারণ ফর্ম (বিশেষত এমএলএলঅ্যাডেটিভ/’চয়েস’ অপারেটর ⊕ এবং &) ছাড়াই লিনিয়ার লজিকের খণ্ডটি এমন একটি প্রোগ্রামিং ভাষা হিসাবে এনকোড করা যেতে পারে যেখানে প্রতিটি মান ব্যবহার করা যেতে পারে এবং অবশ্যই একবার ব্যবহার করা যেতে পারে এবং হেনরি বেকার লিসপ থেকে আবর্জনা সংগ্রহ অপসারণ সম্পর্কে প্রয়োগ করার বিষয়ে একটি সিরিজে জনপ্রিয় করে তোলে।
হেনরি বেকার একজন বিশিষ্ট লিস্প হ্যাকার এবং লিস্প মেশিনের অন্যতম মূল নির্মাতা, যা কখনও কখনও সময়ের তুলনামূলকভাবে ধীর হার্ডওয়্যারটিতে আবর্জনা সংগ্রহের জন্য প্রয়োজনীয় দীর্ঘ এবং অপ্রত্যাশিত ‘বিরতি’ কারণে সি-ভিত্তিক ইউনিক্স মেশিনগুলির কাছে হারিয়ে গেছে বলে মনে করা হয়। এটি সাধারণত প্রোগ্রামিং ভাষায় দেখা ফর্ম। উদাহরণস্বরূপ, টাইপের একটি λ- ক্যালকুলাস শব্দ (এ \ মাল্টিম্যাপ বি \) এমন একটি ফাংশন যা হুবহু একটি \ (এ \) গ্রহণ করে এবং একটি \ (বি \) উত্পাদন করে-লিনিয়ার লজিক প্রস্তাবের একটি প্রমাণ এনকোডিং \ (এ^\ বট \ অপারেটর্নাম \}} \))।
অ্যাপ্লিকেশন §
খy লিনিয়ার প্রকারের নিয়োগ করে, প্রোগ্রামারটি এমন কিছু মডেল করতে পারে যেখানে কিছু ব্যবহার করে এর ধরণ পরিবর্তন করে। একটি সাধারণ উদাহরণে একটি ‘ব্যয়’ জড়িত: যদি আমার কাছে একটি ভেন্ডিং মেশিন থাকে যা আমাকে একটি চকোলেট বার বা একটি ডলারের জন্য ক্রিস্পের প্যাকেট দেয় তবে আমি কেবল দু’বার ডলারের মধ্যে রাখতে পারি না এবং উভয়ই পেতে পারি না। একটি আইটেমের জন্য ডলার ব্যবহার করে খরচ হয় ডলার, এবং এটি অন্য আইটেমটি পাওয়ার জন্য আর উপলব্ধ নেই।
ক প্রতিদিনের প্রোগ্রামিংয়ের আরও সাধারণ উদাহরণে এমন অবজেক্টগুলিতে জড়িত রয়েছে যা নির্দিষ্ট প্রোটোকল রয়েছে (উপলব্ধ অপারেশনগুলির একটি ক্রম) যা অবশ্যই মেনে চলতে হবে। উদাহরণস্বরূপ, একবার কোনও ফাইল হ্যান্ডেল বন্ধ হয়ে গেলে, এটি আর লিখতে পারে না: প্রোগ্রামারের দৃষ্টিকোণ থেকে, ফাইল হ্যান্ডেলটি আর বিদ্যমান নেই। রাজ্যে আরও পরিশীলিত পরিবর্তন, উদাহরণস্বরূপ একটি ‘খোলার’ ফাইল হ্যান্ডেল যার মেটাডেটা একটি ‘খোলা’ ফাইল হ্যান্ডেল হয়ে/যা থেকে প্রোগ্রামার ডেটা লিখতে/পড়তে পারে, পুরানো অবজেক্টটিকে ‘ধ্বংস’ হিসাবে মডেল করা যেতে পারে এবং একটি নতুনকে ফিরিয়ে দেওয়া যায়।
ক সম্পর্কিত অ্যাপ্লিকেশনটি একটি নেটওয়ার্ক প্রোটোকল। উদাহরণস্বরূপ, এইচটিটিপি বাস্তবায়নকারী একটি স্ট্রিমে, সার্ভারটি ক্লায়েন্টকে আশা করতে পারে:
একটি সকেট খুলুন
শিরোনাম প্রেরণ করুন
একটি অনুরোধ বডি লিখুন
একটি প্রতিক্রিয়া পড়ুন
কএই অপারেশনগুলির এনওয়াই ভুল অর্ডারিং, উদাহরণস্বরূপ শিরোনামগুলির আগে অনুরোধের বডিটি লেখার জন্য ক্লায়েন্ট প্রোগ্রামারের পক্ষ থেকে একটি ত্রুটি গঠন করে।
চিত্র 1। একটি এইচটিটিপি অনুরোধ প্রোটোকল।
কনোটার খুব গুরুত্বপূর্ণ উদাহরণ মেমরি ম্যানেজমেন্টের। যেহেতু মানগুলির স্বেচ্ছাসেবী সদৃশতা বাতিল করা হয় না, এটি কোডের কাঠামোর মধ্যে অন্তর্নিহিত যে কোনও মান অবশ্যই কতক্ষণ থাকতে হবে এবং তাই যখন এটির স্মৃতি পুনরায় ব্যবহার করা নিরাপদ। এটি সাধারণভাবে লিনিয়ার ভাষাগুলি কোনও আবর্জনা সংগ্রাহক, রেফারেন্স কাউন্টার, বা মেমরি রেফারেন্সগুলি ট্র্যাক করার অন্যান্য উপায়গুলির আশ্রয় ছাড়াই নিরাপদে সম্পাদন করার অনুমতি দেয় – সিস্টেম ভাষায় একটি গুরুত্বপূর্ণ গুণ, যেখানে অপ্রত্যাশিত আবর্জনা সংগ্রহের বিরতি প্রায়শই কোনও বিকল্প হয় না। আরও সাধারণভাবে, লিনিয়ার প্রকারগুলি কার্যকরী এবং অপরিহার্য ভাষার মধ্যে ব্যবধানটি পূরণ করতে ব্যবহার করা যেতে পারে। লিনিয়ার ধরণের একটি কার্যকরী প্রোগ্রাম একটি আবশ্যক প্রোগ্রাম হিসাবে উপলব্ধি করা যেতে পারে; যেহেতু দু’বার কোনও মান পর্যবেক্ষণ করার কোনও উপায় নেই, তাই মেমরির অঞ্চলটি সেই মানটিকে সমর্থন করে নিরাপদে পুনর্বিবেচিত হতে পারে, বাস্তবে পরিবর্তনটি পর্যবেক্ষণ করার সম্ভাবনা ছাড়াই (ব্রেকিং ব্রেকিং
রেফারেন্সিয়াল স্বচ্ছতা)।
এলদুটি কারণে ইনার প্রকারগুলিও সমবর্তী প্রোগ্রামিংয়ে খুব কার্যকর হতে পারে:
নির্দিষ্ট ক্রমে ব্যবহার করার জন্য (কনসপশনস এবং প্রোডাকশনগুলির ক্রমের মাধ্যমে) মানগুলির প্রয়োজনের মাধ্যমে তারা সমবর্তী উপাদানগুলির মধ্যে প্রোটোকলের স্পেসিফিকেশনের অনুমতি দেয়;
এবং, আরও গুরুত্বপূর্ণভাবে, ⊗ এবং ⅋ এ সংস্থানগুলির বিচ্ছেদ/যোগদান প্রোগ্রামারকে সিকোয়েন্সিংয়ের সময় নির্দিষ্ট করার অনুমতি দেয় না
অচলাবস্থা থেকে স্বাধীনতা নিশ্চিত করার সময় সম্মান করা দরকার।
টিo একযোগে সুবিধাগুলি দেখুন, আমরা টাইপগুলি টাইপিং মান হিসাবে চিন্তাভাবনা বন্ধ করতে পারি এবং পরিবর্তে সেগুলি টাইপিং প্রক্রিয়া হিসাবে দেখতে পারি। এই দৃশ্যে, \ (a ⊸ b \) এর মতো একটি ফাংশন ধরণের একটি প্রক্রিয়া যা একটি \ (a \) প্রত্যাশা করে এবং একটি \ (বি \) উত্পাদন করে একই সময়ে (এই অর্থে যে প্রক্রিয়াটি এই বিষয়গুলির সাথে ইন্টারঅ্যাক্ট করার জন্য ক্রমটি বেছে নেয়), যখন একটি টেনসর টাইপের মতো \ (a ⊗ b \) প্রক্রিয়াগুলির একটি জুড়ি উপস্থাপন করে
কেবল ইন্টারফেসে এক জোড়া প্রক্রিয়া: গণনাটি একটি একক প্রক্রিয়া দ্বারা করা যেতে পারে, যতক্ষণ না এটি আচরণ করতে পারে যেন এটি দুটি প্রক্রিয়া, অর্থাত্ কোনও নির্দিষ্ট ক্রমে অ্যাক্সেস করার উপর নির্ভরতা নেই। এটি ভোক্তাদের ইচ্ছা যে কোনও ক্রমে একটি \ (এ \) এবং একটি \ (বি \) উত্পাদন করবে।
ব্যবহারে লিনিয়ার প্রকার §
এনo মূলধারার প্রোগ্রামিং ভাষা সম্পূর্ণ লিনিয়ার প্রকারগুলি প্রয়োগ করে তবে বিভিন্ন ভাষায় এগুলির বিভিন্ন দুর্বলতা রয়েছে। সম্পর্কিত কাঠামোগত প্রকারগুলি আরও বেশি বা কম মূলধারার প্রোগ্রামিং সিস্টেমগুলিতে অস্বাভাবিক নয়।
অ্যাফাইন প্রকার §
কএন অ্যাফাইন টাইপ সিস্টেমটি এমন একটি যেখানে কোনও মান মুছে ফেলা যায়, তবে সমস্ত মান অনুলিপি করা যায় না। অ্যাফাইন প্রকারগুলি মূলধারার দ্বারা তৈরি করা হয়েছে মরিচাসহজাতভাবে অ্যাফাইন টাইপ সিস্টেম সহ একটি ভাষা। মরিচা একটি থাকার জন্যও আকর্ষণীয় আদেশ
টাইপ সিস্টেম, একটিতে নির্দিষ্ট মানগুলি অন্যান্য মানগুলির আগে ব্যবহার করা উচিত।
স্বতন্ত্রতা প্রকার §
ইউনিকাশী প্রকারগুলি একটি শক্তিশালী ফর্ম সরবরাহ করে এমএলএলএমন একটিতে যার মধ্যে কেবল মানগুলি একাধিকবার ব্যবহার করার অনুমতি দেওয়া হয় না, তবে গ্যারান্টিগুলি তৈরি করা হয় যে একবারে কেবল একটি রেফারেন্স মানটিতে থাকতে পারে। মরিচা আবার এটির অনন্য-রেফারেন্স প্রকারগুলিতে এনকোড করে (বানান mut
historical তিহাসিক কারণে) যেখানে তারা রাষ্ট্রের পরিবর্তনের সুযোগকে সীমাবদ্ধ করতে এবং ডেটা রেস প্রতিরোধে ব্যবহৃত হয়। দ্য
পরিষ্কার প্রোগ্রামিং ভাষা খাঁটি কার্যকরী শব্দার্থবিজ্ঞান বজায় রেখে পার্শ্ব প্রতিক্রিয়াগুলি নিয়ন্ত্রণ করতে স্বতন্ত্রতার ধরণগুলি ব্যবহার করে।
সেশন প্রকার §
এসইশন প্রকারগুলি লিনিয়ার প্রকারের একটি বৈকল্পিক যা একটি প্রোটোকলকে একটি ভাগ করা যোগাযোগ চ্যানেলের উপরে দুটি বা ততোধিক পক্ষ দ্বারা প্রণীত করার জন্য স্পষ্টভাবে প্রকাশ করার দিকে সুস্পষ্টভাবে প্রস্তুত এবং লিনিয়ার প্রকারের থেকে পৃথক যে তারা বার্তাগুলির সুনির্দিষ্ট ক্রমটি প্রকারের মধ্যে স্পষ্টভাবে প্রেরণ করার জন্য তৈরি করে। সেশন প্রকারগুলি ব্যবহারের জন্য উপলব্ধ
গ,
মরিচাএবং
জাভাঅন্যান্য ভাষার মধ্যে।