প্রকারের সিস্টেমগুলি: নামমাত্র বনাম কাঠামোগত, সুস্পষ্ট বনাম অন্তর্নিহিত


24

নামমাত্র এবং কাঠামোগত ধরণের সিস্টেমের মধ্যে পার্থক্য সম্পর্কে আমি কিছুটা বিভ্রান্ত। কেউ দয়া করে তাদের পার্থক্য কীভাবে ব্যাখ্যা করতে পারেন?

আমি যা বুঝতে পারি তা থেকে:

  • নামমাত্র: প্রকারের সামঞ্জস্যতা টাইপের নামের উপর ভিত্তি করে।
  • কাঠামোগত: প্রকারের সামঞ্জস্যতা প্রকার কাঠামোর উপর ভিত্তি করে, যেমন সিতে যদি 2 ভেরিয়েবলগুলি বিভিন্ন নামের সাথে একই ধরণের কাঠামোযুক্ত হয় তবে একই কাঠামো হয়, তবে তাদের প্রকারগুলি সামঞ্জস্যপূর্ণ।

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

উত্তর:


29

ডায়নামিকালি টাইপ করা সিস্টেমে মানগুলি রানটাইমের সময় টাইপ করে থাকে তবে ভেরিয়েবল এবং ফাংশন থাকে না। স্ট্যাটিক্যালি টাইপ করা সিস্টেমে ভেরিয়েবল এবং ফাংশনগুলির মধ্যে টাইপগুলি পরিচিত এবং সংকলন-সময়ে পরীক্ষা করা হয়। পাইথনে যেমন কিছুx হতে পারে ; রানটাইমের সময়, এটি যদি 1এটি একটি সংখ্যা এবং যদি এটি হয় তবে এটি "foo"একটি স্ট্রিং। আপনি কেবল xরান টাইমে কোন ধরণের তা জানতেন এবং আপনি যখন প্রোগ্রামটি চালাচ্ছিলেন তখন এটি আলাদা হতে পারে। জাভা মত একটি ভাষা, আপনি লিখতে হবে int xযদি xছিল একটি সংখ্যা হওয়া, এবং আপনি সময় সঙ্কলন যে জানতে চাই xসবসময় একটি হতে হয়েছে int

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

public int foo(String bar, Object baz) { ... }

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

let foo x = x + 1

যেহেতু আপনি ব্যবহার করেছেন +, ওক্যামেল xএটি নির্ধারণ করতে পারে যে এটি একটি intনিজস্ব হতে হবে। সুতরাং ধরণ foo( foo : int -> int) করা হয় মাত্র জাভা উদাহরণটি কম্পাইল সময়ে পরিচিত। এটি সম্পূর্ণ অচল। যাইহোক, সংকলকটি যেহেতু কী কী ধরণের নিজস্ব হতে হবে তা নির্ধারণ করতে পারে, তাই আপনাকে সেগুলি নিজেই লিখতে হবে না: সেগুলি অন্তর্নিহিত।

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

প্রায়শই, আপনার টাইপ সিস্টেম থাকে যা বিভিন্ন সময়ে সুস্পষ্ট এবং কখনও কখনও অন্তর্নিহিত থাকে।

উদাহরণস্বরূপ, আমি বিশ্বাস করি সি # আপনাকে varকীওয়ার্ড ব্যবহার করে প্রকারগুলি নির্ধারণ করতে দেয় । লেখার পরিবর্তে int x = 10, আপনি লিখতে পারেন var x = 10এবং সংকলক পরিসংখ্যানগুলি যে xএকটি হতে হবে int। সি ++ এর সাথে একই রকম কিছু করে auto। এই সিস্টেমগুলি সাধারণত স্পষ্ট হয় তবে কিছুটা অনুভূতি রয়েছে।

ফ্লিপসাইডে, এমন সিস্টেম রয়েছে যা সাধারণত অন্তর্ভুক্ত থাকে তবে কখনও কখনও আপনাকে টাইপ স্বাক্ষরটি লিখতে বাধ্য করে। হাস্কেল একটি দুর্দান্ত উদাহরণ। বেশিরভাগ সময়, হাস্কেল আপনার জন্য প্রকারগুলি নির্ধারণ করতে পারে। তবে, কখনও কখনও আপনি কোডটি লিখতে পারেন যা অস্পষ্ট মত show . read, যেখানে হাস্কেল নিজে থেকে প্রকারগুলি বের করতে পারে না। এই ক্ষেত্রে, আপনি স্পষ্টভাবে হয় showবা উভয় প্রকারের নির্দিষ্ট করতে বাধ্য করা হবে read। অধিকন্তু, টাইপ সিস্টেমের আরও কয়েকটি উন্নত বৈশিষ্ট্য (যেমন র‌্যাঙ্ক-এন পলিমারফিজম) অনুমানকে অনির্ধারিত করে তোলে - এটি থামার গ্যারান্টিযুক্ত নয়। এর অর্থ এই বৈশিষ্ট্যটি ব্যবহার করে কোডটির প্রায়শই সুস্পষ্ট ধরণের স্বাক্ষর প্রয়োজন।


2
আসলে, এমন কিছু ভাষা রয়েছে যা আপনি স্পষ্ট গতিশীল টাইপিং বলতে পারেন । সাধারণত, সেই ভাষাগুলি আপনাকে প্রকারের সাথে এক্সপ্রেশনটি বেনিফিট করতে দেয় এবং তারপরে সেই টাইপগুলি রানটাইমের সময় রানটাইম টাইপের বিপরীতে পরীক্ষা করা হবে ।
জার্গ ডব্লু মিত্তাগ

কেবলমাত্র একটি নির্ভুলতা: প্রকারের সিস্টেমগুলি অন্তর্নিহিত বা স্পষ্ট নয়। এটি হ'ল টাইপ ইনফরমেশন সম্পর্কে, যা মূলত কোনও ভিন্ন (কখনও কখনও অনির্ধারিত) সিনট্যাক্স থেকে কোনও টাইপ সিস্টেমে বৈধ পদ তৈরি করার একটি উপায়।
এডুয়ার্ডো পেরেজা টোবস

উত্তম উত্তর, তবে এটি নামমাত্র বনাম কাঠামোগত টাইপিংয়ের বিষয়টি সম্বোধন করে না। একটি সম্পাদনা দুর্দান্ত হবে।
লাঞ্চমিট317

7
  • স্ট্যাটিক বনাম ডায়নামিক বর্ণনা দেয় যখন প্রকারগুলি পরীক্ষা করা হয় (কমপাইল সময়ে বা কার্যকর সময়ে কম বেশি)

  • নামমাত্র বনাম স্ট্রাকচারাল বর্ণনা দেয় যখন দুটি প্রকারকে একই বিবেচনা করা হয়।

(এবং বিভিন্ন প্রকরণ রয়েছে, কাঠামোগত টাইপিংয়ের রূপটি সর্বাধিক পরিচিত যা হাঁসের টাইপিং হিসাবে পরিচিত পুরো টাইপের পরিবর্তে কেবল ব্যবহৃতটিই বিবেচনা করে)।

চারটি সংমিশ্রণ (স্ট্যাটিক নামমাত্র, স্ট্যাটিক স্ট্রাকচারাল, গতিশীল নামমাত্র, গতিশীল স্ট্রাকচারাল) সম্ভব এবং ভাষা প্রায়শই নিখুঁতভাবে এক শ্রেণিতে হয় না তবে এমন দিক থাকে যা অন্যের হয়।

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

একটি গতিশীল টাইপ সিস্টেমগুলি প্রায়শই কাঠামোগত টাইপিং ব্যবহার করে এমন ভাষা, তবে নামমাত্র দিক হিসাবে সিএলওএস।


1

কাঠামোগত: প্রকারের সামঞ্জস্যতা প্রকার কাঠামোর উপর ভিত্তি করে, যেমন সিতে যদি 2 ভেরিয়েবলগুলি বিভিন্ন নামের সাথে একই ধরণের কাঠামোযুক্ত হয় তবে একই কাঠামো হয়, তবে তাদের প্রকারগুলি সামঞ্জস্যপূর্ণ।

সাধারণত এটি হয় না। স্ট্রাকচারাল টাইপিং এর অর্থ এটি Bএকটি সাব টাইপ যা Aএটির Aইন্টারফেসটি সন্তুষ্ট করতে পারে । এর অর্থ সাধারণত একই নামের সদস্য থাকা; স্মৃতিতে একই কাঠামো নয়।

এটি নমিনেটিভ টাইপিংয়ের চেয়ে পৃথক যেটির জন্য ঘোষণার উপরে নির্দিষ্ট ধরণের নির্দিষ্ট হওয়া দরকার।


1

ডায়নামিক এবং স্ট্যাটিক টাইপ সিস্টেমের মধ্যে পার্থক্যটির (আমি আসলে গ্রহণের ক্ষেত্রে) সবচেয়ে ভাল ব্যাখ্যাটি দেখেছি বব হার্পারের এই ব্লগ পোস্টটিতে:

এর মূল বিষয়টিকে সংক্ষেপে বলা যেতে পারে:

  • গতিশীল ভাষা হ'ল স্থায়ী ভাষা যা কেবল এক প্রকারের

1
লিঙ্কগুলি খারাপ হতে পারে; আপনার নিবন্ধটির সর্বাধিক প্রাসঙ্গিক বিটগুলি উদ্ধৃত করা উচিত যাতে তারা ব্লগ কাপুটতে যায় এমনকি তাদের উত্তরোত্তর জন্য সংরক্ষণ করা হয়।
ডোভাল

2
অবশ্যই। আমি মনে করি যে এক্ষেত্রে আমি যুক্ত হওয়া বাক্যটি যথেষ্ট :)
এডুয়ার্ডো পেরেজা টোবস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.