টাইপ সিস্টেম কী?


50

পটভূমি

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

আমার আলাপকালে আমি উল্লেখ করেছি যে ভিএম একটি টাইপ সিস্টেম সরবরাহ করে, তাকে জিজ্ঞাসা করা হয়েছিল " আপনার টাইপ সিস্টেমটি কী জন্য? "। উত্তর দেওয়ার পরে আমি ব্যক্তিটি জিজ্ঞাসা করে হেসেছিলাম।

সুতরাং, যদিও আমি প্রায় অবশ্যই এই প্রশ্নটি জিজ্ঞাসা করার জন্য খ্যাতি হারাতে চলেছি, আমি প্রোগ্রামারদের দিকে ফিরে যাই।

আমার বোঝাপড়া

যেমন আমি তাদের বুঝতে পারি, টাইপ সিস্টেমগুলি কোনও প্রোগ্রামে সত্তা সম্পর্কে অতিরিক্ত স্তর সরবরাহ করার জন্য ব্যবহৃত হয়, যাতে রানটাইম, বা সংকলক, বা অন্য কোনও যন্ত্র, এটি চালিত বিটের স্ট্রিংগুলি কী করতে পারে তা জানে। তারা চুক্তিগুলি বজায় রাখতেও সহায়তা করে - সংকলক (বা কোড বিশ্লেষক, বা রানটাইম, বা অন্য কোনও প্রোগ্রাম) যাচাই করতে পারে যে কোনও নির্দিষ্ট সময়ে প্রোগ্রামটি মূল্যবোধের প্রোগ্রামারদের দ্বারা পরিচালিত হয় এটি এটি পরিচালনা করার প্রত্যাশা করে।

প্রকারগুলি মানব প্রোগ্রামারদের তথ্য সরবরাহ করতেও ব্যবহৃত হতে পারে। উদাহরণস্বরূপ, আমি এই ঘোষণাটি পাই:

function sqrt(double n) -> double;

এই এক থেকে আরও দরকারী

sqrt(n)

প্রাক্তন প্রচুর তথ্য দেয়: sqrtশনাক্তকারীটি একটি ফাংশন, doubleইনপুট হিসাবে একক গ্রহণ করে এবং অন্যটিকে doubleআউটপুট হিসাবে উত্পাদন করে। পরেরটি আপনাকে বলে যে এটি সম্ভবত কোনও একক প্যারামিটার গ্রহণ করা একটি ফাংশন।

আমার উত্তর

সুতরাং, "আপনার টাইপ সিস্টেমটি কীসের জন্য?" জিজ্ঞাসা করার পরে? আমি নীচে উত্তর দিয়েছি:

টাইপ সিস্টেমটি গতিশীল (প্রকারগুলি মানগুলিতে নির্ধারিত হয়, ধরণের ভেরিয়েবলগুলিতে নয়) তবে বিস্ময়কর জবরদস্তি বিধিবিহীন শক্তিশালী (আপনি সংখ্যার সাথে স্ট্রিং যোগ করতে পারবেন না তারা বেমানান প্রকারের প্রতিনিধিত্ব করে তবে আপনি ভাসমান পয়েন্ট সংখ্যায় পূর্ণসংখ্যার যোগ করতে পারেন) ।

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

ফলো-আপ প্রশ্নটি ছিল "এবং কীভাবে কোনও মানকে টাইপ করা হয়?" সুতরাং আমি বুঝিয়েছি যে সমস্ত মান বাক্সযুক্ত, এবং একটি টাইপ সংজ্ঞা কাঠামোর দিকে নির্দেশকারী একটি পয়েন্টার রয়েছে যা প্রকারের নাম, কোন বার্তাগুলিতে এটি প্রতিক্রিয়া জানায় এবং কী ধরণের থেকে উত্তরাধিকার সূত্রে প্রাপ্ত তা সম্পর্কিত তথ্য সরবরাহ করে।

তারপরে, আমি হেসেছিলাম, এবং "এটি বাস্তব টাইপ সিস্টেম নয়" এই মন্তব্যে আমার উত্তর খারিজ করা হয়েছিল।

সুতরাং - আমি যা বর্ণনা করেছি তা যদি "রিয়েল টাইপ সিস্টেম" হিসাবে যোগ্য না হয় তবে কী হবে? সেই ব্যক্তিটি কি সঠিক ছিল যে আমি সরবরাহ করি তা টাইপ সিস্টেম হিসাবে বিবেচনা করা যায় না?


19
লোকেরা যখন টাইপ সিস্টেমে কথা বলে তখন তারা সাধারণত স্ট্যাটিক টাইপিংয়ের কথা বলে। গতিশীল টাইপিং টাইপ সিস্টেমগুলি সম্পর্কে যত্নশীল এমন ধরণের লোকদের কাছে খুব আকর্ষণীয় নয় কারণ এটি প্রায় কোনও কিছুর গ্যারান্টি দেয় না। উদাহরণস্বরূপ x কী ধরণের মান পরিবর্তনশীল হতে পারে? কিছু.
ডোভাল

7
তাদের প্রতিক্রিয়া রক্ষা / ব্যাখ্যা করতে তাদের যা বলতে চেয়েছিল তা শুনতে আমি আগ্রহী হব।
নিউটোপিয়ান

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

10
"এবং কোনও ধরণের মানকে কীভাবে নির্ধারিত করা হয়?" - এর উত্তরটি দিয়ে ব্যক্তি প্রশ্নটি নিয়েছিল। তারা টাইপিং বিধি সম্পর্কে শুনতে চেয়েছিল, বাক্স এবং পয়েন্টার চিত্রগুলি নয়। হাসতে হাসতে একেবারে অভদ্রতা ছিল।
বাগেরহেড

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

উত্তর:


30

এটি সমস্ত কি ধরণের সিস্টেম সরবরাহ করে তার একটি সূক্ষ্ম বর্ণনার মত মনে হয়। আপনার বাস্তবায়ন এটি করছে তার পক্ষে যুক্তিসঙ্গত যথেষ্ট বলে মনে হচ্ছে।

কিছু ভাষার জন্য, আপনার রানটাইম তথ্য প্রয়োজন হবে না যেহেতু আপনার ভাষা রানটাইম প্রেরণা করে না (বা আপনি ভিটিবেল বা অন্য কোনও পদ্ধতির মাধ্যমে একক প্রেরণ করেন, সুতরাং প্রকারের তথ্যের প্রয়োজন হবে না)। কিছু ভাষার ক্ষেত্রে, কেবল একটি প্রতীক / স্থানধারকই যথেষ্ট, যেহেতু আপনি কেবল টাইপ সমতার বিষয়ে চিন্তা করেন, এর নাম বা উত্তরাধিকার নয়।

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

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


3
"আপনার পরিবেশের উপর নির্ভর করে ব্যক্তিটি আপনার টাইপ সিস্টেমে আরও আনুষ্ঠানিকতা চেয়েছিলেন।" সম্ভবত এটি। আমি টাইপ সিস্টেমের সাহায্যে কী প্রমাণ করতে পারি তাতে মনোনিবেশ করি নি , বরং এটি একটি সরঞ্জাম হিসাবে ভেবেছিলাম। বই সুপারিশ করার জন্য ধন্যবাদ!
মেল

1
@ মেল কিছু ধরণের সিস্টেম লজিক হিসাবে ব্যবহৃত হয় ( লজিকাল ফ্রেমওয়ার্কগুলি দেখুন )। সুতরাং মূলত টাইপটি সূত্র দেয় এবং প্রোগ্রামগুলি সেই সূত্রগুলির প্রমাণ (যেমন ফাংশন টাইপটি বোঝা যায় খa -> b হিসাবে , যেমন আপনি আমাকে টাইপের একটি মান দেন তবে আমি টাইপের একটি মান পেতে পারি )। তবে এটি সামঞ্জস্যপূর্ণ হওয়ার জন্য ভাষা অবশ্যই মোট হতে হবে, এবং এইভাবে নন-টিউরিং সম্পূর্ণ। সুতরাং সমস্ত বাস্তব জীবনের ধরণের সিস্টেমগুলি আসলে একটি বেমানান যুক্তি সংজ্ঞায়িত করে। ab
বাকুরিউ

20

আমি @ টেলাস্টিনের উত্তরটি বিশেষত আনুষ্ঠানিকতায় আগ্রহী একাডেমিক আগ্রহের কারণে পছন্দ করি।

আমাকে আলোচনায় যোগ দেওয়ার অনুমতি দিন।

টাইপ সিস্টেম কী?

একটি টাইপ সিস্টেম অবৈধ প্রোগ্রামের স্থিতিগুলির সংজ্ঞা, সনাক্তকরণ এবং প্রতিরোধের জন্য একটি প্রক্রিয়া। এটি সীমাবদ্ধতাগুলি সংজ্ঞায়িত এবং প্রয়োগ করে কাজ করে। সীমাবদ্ধ সংজ্ঞাগুলি হ'ল ধরণের , এবং, সীমাবদ্ধ প্রয়োগগুলি হ'ল প্রকারের ব্যবহার , যেমন ভেরিয়েবল ঘোষণায়।

প্রকারের সংজ্ঞা সাধারণত সংমিশ্রণ অপারেটরগুলিকে সমর্থন করে (যেমন কাঠামো, সাবক্ল্যাসিং, এবং, এনামস, ইউনিয়নগুলির মতো বিভাজন হিসাবে বিভিন্ন রূপের সংমিশ্রণ)।

সীমাবদ্ধতা, প্রকারের ব্যবহার, কখনও কখনও সংমিশ্রণ অপারেটরদেরও (যেমন কমপক্ষে এটি, ঠিক এটি, এটি হয় বা এটিই সরবরাহ করে যে অন্য কিছু ধারণ করে।

যদি টাইপ সিস্টেমটি ভাষায় উপলভ্য থাকে এবং সংকলন-সময় ত্রুটিগুলি জারি করতে সক্ষম হবার লক্ষ্যে সংকলন সময়ে প্রয়োগ করা হয়, এটি একটি স্ট্যাটিক টাইপ সিস্টেম; এগুলি অনেক অবৈধ প্রোগ্রামকে সংকলন থেকে বিরত রাখতে দেয় না, তাই এটি অবৈধ প্রোগ্রামের রাষ্ট্রগুলিকে প্রতিরোধ করে।

(একটি স্ট্যাটিক টাইপ সিস্টেম প্রোগ্রামটি যে অভিযোগ করা হচ্ছে না তা জানা (বা অনস্বীকার্য) এটি চালিত হওয়া বা না হওয়া বন্ধ করে দেয় stat একটি স্ট্যাটিক টাইপ সিস্টেম নির্দিষ্ট ধরণের বাজে কথা সনাক্ত করে (ঘোষিত সীমাবদ্ধতা লঙ্ঘন)) এবং প্রোগ্রামটি চালানোর আগে ত্রুটিযুক্তভাবে বিচার করে))

যদি রানটাইমের সময় কোনও প্রকারের সিস্টেম প্রয়োগ করা হয় তবে এটি একটি গতিশীল টাইপ সিস্টেম যা অবৈধ প্রোগ্রামগুলিকে বাধা দেয়: কিন্তু প্রোগ্রামটি মাঝের দিকে থামিয়ে দিয়ে, এটি প্রথম স্থানে চালানো থেকে রোধ না করে।

মোটামুটি সাধারণ ধরণের সিস্টেম অফার হ'ল স্থির এবং গতিশীল উভয় বৈশিষ্ট্য সরবরাহ করা।


আমি মনে করি না তথাকথিত হাইব্রিড টাইপ সিস্টেমগুলি মোটেই খুব সাধারণ। আপনার কোন ভাষাগুলি মনে আছে?
উদ্যানক্ষেত্র

2
@ গার্ডেনহেড, ডাউন কাস্ট করার ক্ষমতা কোনও স্ট্যাটিক টাইপ সিস্টেম বৈশিষ্ট্য নয়, তাই এটি সাধারণত রানটাইম সময়ে গতিশীলভাবে পরীক্ষা করা হয়।
এরিক tদ

1
@ গার্ডেনহেড: সর্বাধিক স্থিতিযুক্ত টাইপ করা ভাষা আপনাকে টাইপিংকে রানটাইমের চেয়ে পিছনে দেয়, কেবল এটি সি এর void *পয়েন্টার (খুব দুর্বল), সি # এর গতিশীল বস্তু, বা হাস্কেলের অস্তিত্বযুক্ত পরিমাণযুক্ত জিএডিটি (যা আপনাকে অন্যান্য স্থানে স্ট্যাটিকালি টাইপ করা মানগুলির চেয়ে বরং শক্তিশালী গ্যারান্টি দেয়) ভাষা)।

সত্য, আমি "কাস্টিং" সম্পর্কে ভুলে গেছি। দুর্বল ধরণের সিস্টেমের জন্য castালাই কেবল ক্রাচ।
উদ্যানক্ষেত্র

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

14

ওহে মানুষ, আমি এই প্রশ্নের উত্তরটি যথাসম্ভব উত্তর দেওয়ার চেষ্টা করতে আগ্রহী 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

একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ সেই ভাষার বৈধ গাছগুলি সংজ্ঞায়িত করে একটি ব্যাকরণ সরবরাহ করে (কংক্রিট বা বিমূর্ত সিনট্যাক্স ব্যবহার করা যেতে পারে)। এটি সাধারণত বিএনএফ স্বরলিপি জাতীয় কিছু ব্যবহার করে করা হয়। আমি ধরে নেব যে আপনি নিজের তৈরি ভাষার জন্য এটি করেছেন।

শব্দার্থবিদ্যা

ঠিক আছে, আমরা জানি একটি প্রোগ্রাম কী, তবে এটি কেবল একটি স্থির গাছের কাঠামো। সম্ভবত, আমরা আমাদের প্রোগ্রামটি আসলে কিছু গণনা করতে চাই। আমাদের শব্দার্থক প্রয়োজন।

প্রোগ্রামিং ভাষার শব্দার্থবিজ্ঞান অধ্যয়নের একটি সমৃদ্ধ ক্ষেত্র। বিস্তৃতভাবে বলতে গেলে, দুটি পন্থা রয়েছে: ডোনোটেশনাল শব্দার্থক এবং অপারেশনাল শব্দার্থক । ডেনোটেশনাল শব্দার্থবিজ্ঞান একটি প্রোগ্রামকে কিছু অন্তর্নিহিত গাণিতিক কাঠামোর (যেমন প্রাকৃতিক সংখ্যা, ধারাবাহিক কার্যাদি ইত্যাদি) ম্যাপ করে বর্ণনা করে। যা আমাদের প্রোগ্রামকে অর্থ প্রদান করে। বিপরীতে অপারেশনাল শব্দার্থবিজ্ঞান একটি প্রোগ্রামকে কীভাবে কার্যকর করে তার বিশদ দ্বারা সংজ্ঞা দেয়। আমার মতে, অপারেশনাল শব্দার্থক প্রোগ্রামারগুলিতে (নিজেকে সহ) আরও স্বজ্ঞাত, তাই এর সাথে আমরা আঁকড়ে থাকি।

আমি কীভাবে কোনও আনুষ্ঠানিক অপারেশনাল শব্দার্থবিজ্ঞানের সংজ্ঞা দিতে পারি না (বিশদটি কিছুটা জড়িত) তবে মূলত আমরা নীচের মতো নিয়ম চাই:

  1. num[n] একটি মান
  2. str[s] একটি মান
  3. যদি num[n1]এবং num[n2]পূর্ণসংখ্যার n_1$ and $n_2$, thenপ্লাস (num [n1], num [n2]) এর মূল্যায়ন হয় `পূর্ণসংখ্যার জন্য মূল্যায়ন করে $ n_1 + n_2 $ $
  4. যদি str[s1]এবং str[s2]স্ট্রিং এস 1 এবং এস 2 এর concat(str[s1], str[s2])মূল্যায়ন করে তবে স্ট্রিং এস 1 এস 2 এ মূল্যায়ন করে।

ইত্যাদি নিয়মগুলি অনুশীলনে প্রচুর পরিমাণে আরও আনুষ্ঠানিক হয় তবে আপনি আক্ষেপটি পাবেন। যাইহোক, আমরা শীঘ্রই একটি সমস্যায় পড়ি। আমরা নিম্নলিখিতটি লিখলে কী ঘটে:

concat(num[5], str[hello])

হুঁ। এটি বেশ ধোঁয়াশা। স্ট্রিং দিয়ে কোনও সংখ্যাকে কীভাবে সংযুক্ত করতে হয় তার জন্য আমরা কোনও নিয়ম সংজ্ঞায়িত করি নি have আমরা এই জাতীয় নিয়ম তৈরি করার চেষ্টা করতে পারি, তবে আমরা স্বজ্ঞাতভাবে জানি যে এই অপারেশনটি অর্থহীন। আমরা চাই না যে এই প্রোগ্রামটি বৈধ হোক। এবং এইভাবে আমরা প্রকারভেদে অবিস্মরণীয়ভাবে নেতৃত্বাধীন।

প্রকারভেদ

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

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

  1. ফর্মের একটি টোকেনের num[n]ধরণ রয়েছে nat
  2. ফর্মের একটি টোকেনের str[s]ধরণ রয়েছে str
  3. যদি এক্সপ্রেশনটির e1টাইপ থাকে natএবং এক্সপ্রেশনটির e2টাইপ থাকে natতবে এক্সপ্রেশনটির plus(e1, e2)টাইপ থাকে nat
  4. যদি এক্সপ্রেশনটির e1টাইপ থাকে strএবং এক্সপ্রেশনটির e2টাইপ থাকে strতবে এক্সপ্রেশনটির concat(e1, e2)টাইপ থাকে str

সুতরাং, এই নিয়ম অনুযায়ী, plus(num[5], num[2])টাইপ আছে আছে nat, কিন্তু আমরা একটি টাইপ বরাদ্দ করতে পারি না plus(num[5], str["hello"])। আমরা বলি যে কোনও প্রোগ্রাম (বা এক্সপ্রেশন) ভাল-টাইপ করা থাকে যদি আমরা এটিকে যে কোনও ধরণের নির্ধারণ করতে পারি এবং অন্যথায় এটি টাইপ করা হয়। সমস্ত টাইপ করা প্রোগ্রামগুলি কার্যকর করতে পারলে একটি টাইপ সিস্টেম সাউন্ড হয়। হাস্কেল শব্দ; সি হয় না।

উপসংহার

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


4
+1 টি। গতিশীল টাইপিং উত্সাহীরা এড়াতে সবচেয়ে বড় কৌশলটি বিশ্বকে বোঝানো ছিল যে কোনও ধরণের সিস্টেম ছাড়াই আপনার "প্রকার" থাকতে পারে। :-)
রুখ

1
যেহেতু আপনি স্বতঃস্ফূর্ত প্রোগ্রামগুলির জন্য আকর্ষণীয় কিছু স্বয়ংক্রিয়ভাবে যাচাই করতে পারবেন না , তাই প্রতিটি ধরণের সিস্টেমে অবশ্যই একটি কাস্ট অপারেটর (বা নৈতিক সমতুল্য) সরবরাহ করতে হবে, নাহলে এটি টিউরিং সম্পূর্ণতার ত্যাগ করে। এর মধ্যে অবশ্যই হাস্কেল অন্তর্ভুক্ত রয়েছে
কেভিন 4

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

9
"ডায়নামিক টাইপিং সত্যিই টাইপিং হয় না" আমার কাছে সর্বদা মনে হয় ধ্রুপদী সংগীতজ্ঞ যেমন "পপ সংগীত সত্যই সংগীত নয়" বা ইভানজেলিকাল বলে যে "ক্যাথলিকরা আসলে খ্রিস্টান নয়"। হ্যাঁ, স্ট্যাটিক টাইপ সিস্টেমগুলি শক্তিশালী এবং আকর্ষণীয় এবং গুরুত্বপূর্ণ এবং গতিশীল টাইপিং আলাদা। তবে (অন্যান্য উত্তরগুলির বর্ণনা হিসাবে) স্ট্যাটিক টাইপ সিস্টেমের বাইরেও প্রচুর দরকারী জিনিস রয়েছে যা traditionতিহ্যগতভাবে টাইপিং বলা হয় এবং এটি সমস্ত গুরুত্বপূর্ণ অভিন্নতা ভাগ করে দেয়। কেন আমাদের টাইপিং টাইপকে প্রকৃত টাইপিং হিসাবে জোর দেওয়ার প্রয়োজন?
পিটার লেফানু লামসডাইন

5
@ আইএমএসওপি: বইয়ের চেয়ে ছোট কিছু জন্য ক্রিস স্মিথের প্রবন্ধটি বিতর্কিত ধরণের সিস্টেমগুলির আগে কী কী জানা উচিত তা স্থির করে কেন ডায়নামিক টাইপিং সত্যই স্ট্যাটিক টাইপিং থেকে একেবারেই আলাদা বিষয়।
পিটার লেফানু লামসডাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.