ওহে মানুষ, আমি এই প্রশ্নের উত্তরটি যথাসম্ভব উত্তর দেওয়ার চেষ্টা করতে আগ্রহী ited আমি আশা করি আমি আমার চিন্তাগুলি সঠিকভাবে পেতে পারি।
@ দোভাল যেমন উল্লেখ করেছেন এবং প্রশ্নকর্তা নির্দেশ করেছেন (তবুও অভদ্রভাবে), আপনার কাছে আসলে কোনও টাইপ সিস্টেম নেই। আপনার ট্যাগ ব্যবহার করে গতিশীল চেকগুলির একটি সিস্টেম রয়েছে যা সাধারণভাবে দুর্বল এবং খুব কম আকর্ষণীয় less
"একটি টাইপ সিস্টেম কী" এর প্রশ্নটি বেশ দার্শনিক হতে পারে এবং আমরা এই বিষয়ে বিভিন্ন দৃষ্টিভঙ্গি সহ একটি বই পূরণ করতে পারি। যাইহোক, এটি প্রোগ্রামারদের জন্য একটি সাইট হিসাবে, আমি আমার উত্তরটিকে যথাসম্ভব ব্যবহারিক রাখার চেষ্টা করব (এবং সত্যই, প্রকারগুলি প্রোগ্রামিংয়ে অত্যন্ত বাস্তব, যদিও কিছু মনে করেন তা সত্ত্বেও)।
সংক্ষিপ্ত বিবরণ
আরও আনুষ্ঠানিক আন্ডারপিনিংগুলিতে ডুব দেওয়ার আগে, টাইপ সিস্টেমটি কী জন্য ভাল তা বোঝার জন্য আসনটির প্যান্ট দিয়ে শুরু করা যাক। একটি প্রকার সিস্টেম আমাদের প্রোগ্রামগুলিতে কাঠামো চাপিয়ে দেয় । তারা আমাদের জানায় যে কীভাবে আমরা বিভিন্ন ফাংশন এবং এক্সপ্রেশন একসাথে প্লাগ করতে পারি। কাঠামো ব্যতীত প্রোগ্রামগুলি অদৃশ্য এবং বুনো জটিল, প্রোগ্রামারের সামান্যতম ভুলতে ক্ষতি হওয়ার জন্য প্রস্তুত।
কোনও টাইপ সিস্টেমের সাথে প্রোগ্রামগুলি লেখার মতো হ'ল পুদিনা অবস্থায় যত্ন নেওয়া - ব্রেকগুলি কাজ করে, দরজাগুলি নিরাপদে বন্ধ হয়, ইঞ্জিনটি তেলযুক্ত হয় etc. স্প্যাগেটি বাইরে। আপনার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ নেই।
আলোচনা মাটিতে, আসুন আমরা আক্ষরিক অভিব্যক্তি সঙ্গে একটি ভাষা দাও num[n]
এবং str[s]
যে সংখ্যা n এবং স্ট্রিং গুলি যথাক্রমে, এবং আদিম ফাংশন প্রতিনিধিত্ব plus
এবং concat
অভিপ্রেত অর্থ সঙ্গে। স্পষ্টতই, আপনি plus "hello" "world"
বা এর মতো কিছু লিখতে সক্ষম হতে চান না concat 2 4
। তবে কীভাবে আমরা এটি প্রতিরোধ করতে পারি? একটি অগ্রাধিকার , স্ট্রিং আক্ষরিক "বিশ্ব" থেকে সংখ্যা 2 পার্থক্য করার কোন পদ্ধতি নেই। আমরা যা বলতে চাই তা হ'ল এই মত প্রকাশগুলি বিভিন্ন প্রসঙ্গে ব্যবহার করা উচিত; তাদের বিভিন্ন প্রকার রয়েছে।
ভাষা এবং প্রকার
আসুন কিছুটা পিছন ফিরে আসুন: প্রোগ্রামিং ভাষা কী? সাধারণভাবে, আমরা একটি প্রোগ্রামিং ভাষা দুটি স্তরে বিভক্ত করতে পারি: বাক্য গঠন এবং শব্দার্থবিদ্যা। এগুলিকে যথাক্রমে স্ট্যাটিকস এবং ডায়নামিক্সও বলা হয়। দেখা যাচ্ছে যে এই দুটি অংশের মধ্যে ইন্টারঅ্যাকশন মধ্যস্থতার জন্য টাইপ সিস্টেমটি প্রয়োজনীয়।
বাক্য গঠন
একটি প্রোগ্রাম একটি গাছ। আপনি কম্পিউটারে লেখার পাঠ্যগুলি দ্বারা বোকা বোকাবেন না; এগুলি হ'ল কোনও প্রোগ্রামের মানব-পঠনযোগ্য উপস্থাপনা । প্রোগ্রামটি নিজেই একটি বিমূর্ত সিনট্যাক্স ট্রি । উদাহরণস্বরূপ, সি তে আমরা লিখতে পারি:
int square(int x) {
return x * x;
}
যে কংক্রিট প্রোগ্রাম (টুকরা) জন্য সিনট্যাক্স। গাছের উপস্থাপনাটি হ'ল:
function square
/ | \
int int x return
|
times
/ \
x x
একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ সেই ভাষার বৈধ গাছগুলি সংজ্ঞায়িত করে একটি ব্যাকরণ সরবরাহ করে (কংক্রিট বা বিমূর্ত সিনট্যাক্স ব্যবহার করা যেতে পারে)। এটি সাধারণত বিএনএফ স্বরলিপি জাতীয় কিছু ব্যবহার করে করা হয়। আমি ধরে নেব যে আপনি নিজের তৈরি ভাষার জন্য এটি করেছেন।
শব্দার্থবিদ্যা
ঠিক আছে, আমরা জানি একটি প্রোগ্রাম কী, তবে এটি কেবল একটি স্থির গাছের কাঠামো। সম্ভবত, আমরা আমাদের প্রোগ্রামটি আসলে কিছু গণনা করতে চাই। আমাদের শব্দার্থক প্রয়োজন।
প্রোগ্রামিং ভাষার শব্দার্থবিজ্ঞান অধ্যয়নের একটি সমৃদ্ধ ক্ষেত্র। বিস্তৃতভাবে বলতে গেলে, দুটি পন্থা রয়েছে: ডোনোটেশনাল শব্দার্থক এবং অপারেশনাল শব্দার্থক । ডেনোটেশনাল শব্দার্থবিজ্ঞান একটি প্রোগ্রামকে কিছু অন্তর্নিহিত গাণিতিক কাঠামোর (যেমন প্রাকৃতিক সংখ্যা, ধারাবাহিক কার্যাদি ইত্যাদি) ম্যাপ করে বর্ণনা করে। যা আমাদের প্রোগ্রামকে অর্থ প্রদান করে। বিপরীতে অপারেশনাল শব্দার্থবিজ্ঞান একটি প্রোগ্রামকে কীভাবে কার্যকর করে তার বিশদ দ্বারা সংজ্ঞা দেয়। আমার মতে, অপারেশনাল শব্দার্থক প্রোগ্রামারগুলিতে (নিজেকে সহ) আরও স্বজ্ঞাত, তাই এর সাথে আমরা আঁকড়ে থাকি।
আমি কীভাবে কোনও আনুষ্ঠানিক অপারেশনাল শব্দার্থবিজ্ঞানের সংজ্ঞা দিতে পারি না (বিশদটি কিছুটা জড়িত) তবে মূলত আমরা নীচের মতো নিয়ম চাই:
num[n]
একটি মান
str[s]
একটি মান
- যদি
num[n1]
এবং num[n2]
পূর্ণসংখ্যার n_1$ and $n_2$, then
প্লাস (num [n1], num [n2]) এর মূল্যায়ন হয় `পূর্ণসংখ্যার জন্য মূল্যায়ন করে $ n_1 + n_2 $ $
- যদি
str[s1]
এবং str[s2]
স্ট্রিং এস 1 এবং এস 2 এর concat(str[s1], str[s2])
মূল্যায়ন করে তবে স্ট্রিং এস 1 এস 2 এ মূল্যায়ন করে।
ইত্যাদি নিয়মগুলি অনুশীলনে প্রচুর পরিমাণে আরও আনুষ্ঠানিক হয় তবে আপনি আক্ষেপটি পাবেন। যাইহোক, আমরা শীঘ্রই একটি সমস্যায় পড়ি। আমরা নিম্নলিখিতটি লিখলে কী ঘটে:
concat(num[5], str[hello])
হুঁ। এটি বেশ ধোঁয়াশা। স্ট্রিং দিয়ে কোনও সংখ্যাকে কীভাবে সংযুক্ত করতে হয় তার জন্য আমরা কোনও নিয়ম সংজ্ঞায়িত করি নি have আমরা এই জাতীয় নিয়ম তৈরি করার চেষ্টা করতে পারি, তবে আমরা স্বজ্ঞাতভাবে জানি যে এই অপারেশনটি অর্থহীন। আমরা চাই না যে এই প্রোগ্রামটি বৈধ হোক। এবং এইভাবে আমরা প্রকারভেদে অবিস্মরণীয়ভাবে নেতৃত্বাধীন।
প্রকারভেদ
একটি প্রোগ্রাম এমন একটি গাছ যা ভাষার ব্যাকরণ দ্বারা সংজ্ঞায়িত হয়। প্রোগ্রামগুলি কার্যকর করার বিধি দ্বারা অর্থ প্রদান করা হয়। তবে কিছু প্রোগ্রাম কার্যকর করা যায় না; যে, কিছু প্রোগ্রাম অর্থহীন । এই প্রোগ্রামগুলি টাইপযুক্ত। সুতরাং, টাইপিং একটি ভাষায় অর্থবহ প্রোগ্রামগুলি বৈশিষ্ট্যযুক্ত করে। কোনও প্রোগ্রাম যদি ভালভাবে টাইপ করা থাকে তবে আমরা এটি কার্যকর করতে পারি।
আসুন কিছু উদাহরণ দেওয়া যাক। আবার মূল্যায়নের নিয়মের মতো আমিও টাইপিং বিধিগুলি অনানুষ্ঠানিকভাবে উপস্থাপন করব তবে সেগুলি কঠোর করা যায়। এখানে কিছু নিয়ম রয়েছে:
- ফর্মের একটি টোকেনের
num[n]
ধরণ রয়েছে nat
।
- ফর্মের একটি টোকেনের
str[s]
ধরণ রয়েছে str
।
- যদি এক্সপ্রেশনটির
e1
টাইপ থাকে nat
এবং এক্সপ্রেশনটির e2
টাইপ থাকে nat
তবে এক্সপ্রেশনটির plus(e1, e2)
টাইপ থাকে nat
।
- যদি এক্সপ্রেশনটির
e1
টাইপ থাকে str
এবং এক্সপ্রেশনটির e2
টাইপ থাকে str
তবে এক্সপ্রেশনটির concat(e1, e2)
টাইপ থাকে str
।
সুতরাং, এই নিয়ম অনুযায়ী, plus(num[5], num[2])
টাইপ আছে আছে nat
, কিন্তু আমরা একটি টাইপ বরাদ্দ করতে পারি না plus(num[5], str["hello"])
। আমরা বলি যে কোনও প্রোগ্রাম (বা এক্সপ্রেশন) ভাল-টাইপ করা থাকে যদি আমরা এটিকে যে কোনও ধরণের নির্ধারণ করতে পারি এবং অন্যথায় এটি টাইপ করা হয়। সমস্ত টাইপ করা প্রোগ্রামগুলি কার্যকর করতে পারলে একটি টাইপ সিস্টেম সাউন্ড হয়। হাস্কেল শব্দ; সি হয় না।
উপসংহার
ধরণের অন্যান্য মতামত আছে। কিছু অর্থে প্রকারগুলি স্বজ্ঞাত যুক্তির সাথে সঙ্গতিপূর্ণ এবং এগুলি বিভাগের তত্ত্বের বিষয় হিসাবেও দেখা যেতে পারে। এই সংযোগগুলি বোঝা আকর্ষণীয়, তবে যদি কেউ কেবল কোনও প্রোগ্রামিং ভাষা লিখতে বা এমনকি ডিজাইন করতে চান তবে এটি প্রয়োজনীয় নয়। তবে অনুষ্ঠানটি কি গঠন নিয়ন্ত্রণ জন্য একটি হাতিয়ার হিসেবে ধরনের বুঝতে হয় প্রোগ্রামিং ভাষা নকশা, ও উন্নয়ন অপরিহার্য। আমি কী ধরণের প্রকাশ করতে পারি তার পৃষ্ঠটি কেবল স্ক্র্যাচ করেছি। আমি আশা করি আপনি তাদের ভাষায় অন্তর্ভুক্ত করার জন্য তারা যথেষ্ট সার্থক বলে মনে করেন।