স্ট্যাটিক / ডায়নামিক বনাম স্ট্রং / দুর্বল


319

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



উত্তর:


423
  • স্ট্যাটিক / ডায়নামিক টাইপিং সম্পর্কে যখন টাইপ তথ্য (সময় সঙ্কলন বা রানটাইম এ যেকোনো) অর্জিত হয়

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

দেখুন উইকি পৃষ্ঠার আরো বিস্তারিত তথ্যের জন্য।


7
উইকিপিডিয়া সব উত্তর আছে। আমি কেন আগে থেকেই এটিকে হোঁচট খাচ্ছি না জানি না।
ড্যান রিভেল

31
এটি লজ্জার বিষয় যে অনেকেই জানেন না যে স্থিতিশীল / গতিশীলগুলি শক্তিশালী / দুর্বল ছাড়া অন্য কিছু ... এটি সত্যিই কিছু পক্ষপাত এবং আলোচনা বাঁচাতে পারে।
ডায়কাম

10
"টাইপ দুর্বলতা" এর বিভিন্ন ডিগ্রি রয়েছে। একটি দৃ strongly়-টাইপিত ভাষা স্ট্রিং থেকে সংখ্যায় রূপান্তর চেষ্টা করতে পারে। অন্যদিকে, HyperTalk (ক ভাষা আমি দশক আগে ব্যবহৃত) তাই স্বাস্থ্যহীন টাইপ করা হয়েছিল যে "12" + "34"সমান হবে "46", কিন্তু "12" + "34Q"সমান হবে "1234Q"[সৌভাগ্যবসত, এক লিখতে পারে "12" & "34"যদি এক সংযুক্তকরণের চেয়েছিলেন]। কৌতূহলজনকভাবে, ভেরিয়েবলগুলি ধারণ করে এমন সংখ্যাগুলি তাদের দ্বৈত-নির্ভুলতা ভাসমান হিসাবে সংরক্ষণ করে এবং এই জাতীয় ভেরিয়েবলগুলিতে গণিতটি স্ট্রিং মুং না করে ভাসমান-পয়েন্ট মান ব্যবহার করে, তবে ভেরিয়েবলটি স্ট্রিং বা সংখ্যা কিনা তা জিজ্ঞাসার কোনও উপায় ছিল না।
সুপারক্যাট

9
@ কিটলিস্ট আমি এই উত্তরটি দেখতে পাচ্ছি না যেখানে দৃ that় স্থির প্রতিশব্দ
পিট

4
(মোটামুটি) একক লাইন সংজ্ঞার জন্য ++।
জেমসফেক্স

211

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

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

দৃ strongly়ভাবে টাইপিত ভাষার প্রয়োগগুলি প্রায়শই সময়ের সাথে সাথে লুপসোলগুলি অর্জন করে, সাধারণত রান-টাইম সিস্টেমের অংশটি উচ্চ-স্তরের ভাষায় প্রয়োগ করা যায়। উদাহরণস্বরূপ, অবজেক্টিভ ক্যামেলের একটি ফাংশন Obj.magicরয়েছে যা কেবলমাত্র তার যুক্তি ফিরিয়ে দেওয়ার রানটাইম এফেক্ট দেয় তবে সংকলনের সময় এটি কোনও ধরণের মানকে অন্য যে কোনও একটিতে রূপান্তর করে। আমার প্রিয় উদাহরণটি মডুলা -3, যার ডিজাইনাররা তাদের টাইপ-কাস্টিং কনস্ট্রাক্ট বলে LOOPHOLE

এটি বলার পরে, আপনি "শক্তিশালী" এবং "দুর্বল" শব্দটি একইভাবে ব্যবহার করে কোনও দু'জনের উপর নির্ভর করতে পারবেন না। সুতরাং এগুলি এড়িয়ে চলুন।


31
(+1) "শক্তিশালী" এবং "দুর্বল" পদটি এড়াতে আপনার পরামর্শের জন্য।
নিকো

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

আমি যতদূর জানি, জাভাতেও এই ফাঁকগুলি রয়েছে, তবে এটি এখনও একটি দৃ strongly়-টাইপিত ভাষা হিসাবে বিবেচিত হয়, তাই আমার ধারণা এটি "শক্তিশালী" এবং "দুর্বল" পদগুলি এড়িয়ে যাওয়ার আপনার পরামর্শকে আরও ওজন দেয়।
ডাবলআর্ট

74

এটিকে সহজভাবে বলুন: একটি স্ট্যাটিকালি টাইপ করা ভাষায় টাইপটি স্থির থাকে , অর্থাত একবার আপনি কোনও ভেরিয়েবল সেট করে ফেললে আপনি এটি পরিবর্তন করতে পারবেন না। এটি কারণ টাইপিং ভেরিয়েবলের সাথে সম্পর্কিত মানটির পরিবর্তে সম্পর্কিত হয়।

জাভাতে উদাহরণস্বরূপ:

String str = "Hello";  //statically typed as string
str = 5;               //would throw an error since java is statically typed

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

পাইথনে উদাহরণস্বরূপ:

str = "Hello" # it is a string
str = 5       # now it is an integer; perfectly OK

অন্যদিকে, কোনও ভাষায় শক্তিশালী / দুর্বল টাইপগুলি অন্তর্নিহিত ধরণের রূপান্তরগুলির সাথে সম্পর্কিত (আংশিকভাবে @ ডারিওর উত্তর থেকে নেওয়া):

পাইথনে উদাহরণস্বরূপ:

str = 5 + "hello" 
# would throw an error since it does not want to cast one type to the other implicitly. 

যদিও পিএইচপিতে:

$str = 5 + "hello"; // equals 5 because "hello" is implicitly casted to 0 
// PHP is weakly typed, thus is a very forgiving language.

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


2
দুর্দান্ত উত্তর, এবং কংক্রিট উদাহরণ ব্যবহার করার জন্য।
জুলিয়ান এ।

3
এজন্য পিএইচপি খুব যত্ন সহকারে ব্যবহার করা দরকার।
আলী গাজানী

1
ভাষার উদাহরণগুলি সত্যই সহায়ক। অনেক প্রশংসিত.
জে মুলেন

আপনি যদি স্ট্রিং সহ নন-স্ট্রিংগুলি যোগ করতে পারেন এবং অটো-আনবক্সিং / বক্সিংয়ের কারণে জাভাটি কি এতটা দুর্বলভাবে টাইপ করা যায়?
স্টিফেন পল

1
@ স্টেফেনপল আপনি ঠিক বলেছেন আমার উত্তরটি সেভাবে বোঝা যেতে পারে এবং এটি এমন নয়। আমি সরলতার স্বার্থে কনকনেটেশন ব্যবহার করেছি, তবে প্রকৃতপক্ষে দৃ strong়-নেস / দুর্বলতা নিজেই ভেরিয়েবলের অন্তর্নিহিত ধরণের রূপান্তর সম্পর্কে।
মেহমেট

20

দুর্বল টাইপিং এর অর্থ হল যে কোনও বিষয়বস্তুর প্রকারের প্রেক্ষিতে পরিবর্তন হতে পারে। উদাহরণস্বরূপ দুর্বলভাবে টাইপ করা ভাষায় স্ট্রিং "123" আপনি যদি আরও একটি নম্বর যুক্ত করেন তবে এটি 123 নম্বর হিসাবে বিবেচিত হতে পারে। দুর্বল টাইপিং সহ ভাষার উদাহরণগুলি হ'ল ব্যাশ, আডাক এবং পিএইচপি।

অন্য ধরণের দুর্বলভাবে টাইপ করা ভাষা সি, যেখানে মেমরি ঠিকানার ডেটা কাস্টিংয়ের মাধ্যমে আলাদা ধরণের হিসাবে বিবেচনা করা যেতে পারে।

একটি দৃ strongly়ভাবে টাইপিত ভাষায় কোনও জিনিসের ধরণ বদলে যায় না - কোনও ইন্টি সর্বদা একটি ইন্ট থাকে এবং স্ট্রিং হিসাবে এটি ব্যবহার করার চেষ্টা করার ফলে একটি ত্রুটি হয়। উভয় জাভা এবং পাইথন দৃ strongly়ভাবে টাইপ করা হয়।

গতিশীল এবং স্ট্যাটিক টাইপিংয়ের মধ্যে পার্থক্য হ'ল ধরণের বিধি প্রয়োগ করা হয়। একটি স্ট্যাটিকালি টাইপ করা ভাষায় প্রতিটি ভেরিয়েবল এবং প্যারামিটারের প্রকার উত্সে ঘোষণা করতে হবে এবং সংকলনের সময় প্রয়োগ করা হবে। গতিশীলভাবে টাইপ করা ভাষায় প্রকারগুলি কেবল তখন রানটাইমে ব্যবহৃত হয় তা পরীক্ষা করা হয়। সুতরাং জাভা স্থিতিশীলভাবে টাইপ করা হয় এবং পাইথন গতিশীলভাবে টাইপ করা হয়।

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

একইভাবে সর্বাধিক দৃ .়ভাবে টাইপ করা ভাষাগুলি এখনও স্বয়ংক্রিয়ভাবে পূর্ণসংখ্যার এবং ভাসমানগুলির মধ্যে রূপান্তরিত হয় (এবং কিছু ভাষায় বিমণ্ডিত যথাযথ বিগআইন্টস)।


1
আমি এই বাক্যটির সাথে একমত হতে পারি না -। "একটি স্ট্যাটিকালি টাইপ করা ভাষায় প্রতিটি ভেরিয়েবল এবং প্যারামিটারের প্রকার উত্সে ঘোষণা করতে হবে" - এসএমএলে ভেরিয়েবলের প্রকারগুলি ঘোষণা করতে হবে না (তারা কখনই পরীক্ষিত হয়)। আসুন বলতে দিন যে ফাংশনটি fআর্গুমেন্ট নেয় x( fun f(x)) [** সুতরাং কোনও প্রকার ঘোষণা করা হয় না **] এবং ফাংশনটি বডি হয় x+1। কোনও প্রকারের সাথে ঘোষিত সংকলকটি সনাক্ত করতে পারবে না যে xএটি একটি অন্তর্নিহিত হতে হবে। - fun f x = x + 1; val f = fn : int -> int
ফিলিপ বার্টুজি

সি সম্পর্কিত, 5 + 'c' // OK
ingালাই

3
@ মেমমেট: সি-তে, অক্ষরের মানগুলি পূর্ণসংখ্যার ডোমেনে থাকে, সুতরাং সেই নির্দিষ্ট উদাহরণটি ধরণের সুরক্ষা লঙ্ঘন করে না। 'সি' 99 এর জন্য কেবল সিনট্যাকটিক চিনি C সি এর জন্য ডেডিকেটেড ক্যারেক্টার টাইপ নেই।
পিটার লেউরিন

পিটার লেউরিন: ঠিক আমার আরও ভাল উদাহরণ দেওয়া উচিত ছিল। দুর্ভাগ্যক্রমে, আমি সি স্পর্শ করি নি প্রায় 20 বছর হয়ে গেছে
মেহমেট

1
সি দুর্বলভাবে টাইপ করা ভাষা নয় । এটি কেবল যে সি এর তুলনায় জাভা, সি # ইত্যাদি আরও জোরালোভাবে টাইপ করা ভাষাগুলি এখানে আরও পড়ুন - en.wikedia.org/wiki/Strong_and_weak_typing যদি আপনি "দুর্বল" টাইপিত ভাষার সংজ্ঞাটি পরীক্ষা করেন তবে "দুর্বলভাবে" টাইপ করা ভাষাগুলি আপনি কি যে কোনও ধরণের রূপান্তর করতে পারেন, উদাহরণস্বরূপ কোনও ইন্টকে "স্পষ্টতই" রূপান্তরিত করা যায় বা স্ট্রিংয়ে কাস্ট করা যেতে পারে , এখন নিজেকে চিন্তা করুন যে এটি সিতে সম্ভব কিনা?
হাগড়াওয়াল

15

আজ এই বিষয়টি নিয়ে গবেষণা করে আমি এই দুর্দান্ত নিবন্ধটি জুড়ে এসেছি http://blogs.perl.org/users/ovid/2010/08/ কি-to-know-before-debating-type-systems.html এটি অনেকটা সাফ করেছে আমার জন্য জিনিস এবং আমি ভেবেছিলাম এটি উপরের দুর্দান্ত উত্তরগুলির মধ্যে কিছু যোগ করতে পারে।

শক্ত এবং দুর্বল টাইপিং:

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

স্ট্যাটিক এবং ডায়নামিক প্রকার

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

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

সুস্পষ্ট / অন্তর্ভুক্ত প্রকার:

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


8

স্কট এর প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রাগম্যাটিক্স , তৃতীয় সংস্করণ পৃষ্ঠা 291 থেকে, আমাদের কাছে রয়েছে

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

কয়েকটি উদাহরণ: অ্যাডা দৃ strongly়ভাবে টাইপ করা হয়েছে, এবং বেশিরভাগ অংশের জন্য স্ট্যাটিক্যালি টাইপ করা হয়েছে (নির্দিষ্ট সময়ে সুনির্দিষ্ট ধরণের সীমাবদ্ধতা অবশ্যই রান সময়ে পরীক্ষা করা উচিত)। একটি পাস্কাল বাস্তবায়ন সংকলন সময়ে তার প্রকারের বেশিরভাগ চেকিংও করতে পারে, যদিও ভাষাটি বেশ জোরালোভাবে টাইপ করা হয় না: অবিকৃত বৈকল্পিক রেকর্ডগুলি (ধারা 7.3.4 এ আলোচনা করা হবে) এর একমাত্র লুথোল। সি ৮৮ এর পূর্বসূরী উপভাষার চেয়ে উল্লেখযোগ্যভাবে বেশি টাইপ করা হয়েছে তবে তবুও পাস্কালের তুলনায় উল্লেখযোগ্যভাবে কম কম টাইপ করা হয়েছে। এর লুফোলগুলির মধ্যে ইউনিয়নগুলি রয়েছে, সাব্রোটিনগুলি প্যারামিটারগুলির পরিবর্তনশীল সংখ্যার সাথে এবং পয়েন্টার এবং অ্যারেগুলির আন্তঃব্যবহারযোগ্যতা (বিভাগ 7.7.1 তে আলোচনা করা যেতে পারে)। সি এর বাস্তবায়ন খুব কমই রান সময়ে কিছু পরীক্ষা করে।

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

সুতরাং সাধারণ ভাষায়, স্ট্যাটিক / ডায়নামিক টাইপিং টাইপ চেকিংয়ের সময়কে বোঝায়: স্ট্যাটিক টাইপিংয়ের জন্য সময় সংকলন করুন, এবং গতিশীল ভাষার জন্য সময় চালানোর সময় time তেমনি, শক্ত / দুর্বল টাইপিং বলতে বোঝায় যে কোনও ভাষা তার টাইপ সিস্টেম প্রয়োগে কতটা আগ্রাসী।

আমি স্কটের বর্ণনাটি একটি সুন্দর চিত্রতে অনুবাদ করার চেষ্টা করেছি, যা আমি নীচে পোস্ট করেছি।

স্ট্যাটিক / ডায়নামিক - শক্তিশালী / দুর্বল টাইপিং প্লেন


5

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

এখানে দুটি উদাহরণ:

  • কেউ কেউ বলেন যে হাস্কেল দৃ strongly়ভাবে টাইপ করেছেন, কারণ আপনাকে কোনও ধরণের রূপান্তর করার অনুমতি নেই ।

  • অন্যরা (যেমন দারিওর দৃষ্টিভঙ্গি) এমন একটি ভাষা বলেছেন যা উদ্দেশ্য করে স্ট্রিং থেকে সংখ্যায় রূপান্তর করতে দেয় দুর্বলভাবে টাইপ করা হয়, তবে অন্যরা একে একে কেবল হাঁসের টাইপিংও বলে থাকেন।

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


5

স্ট্যাটিকালি ভি / এস ডায়নামিকভাবে টাইপ করা ভাষা

  • স্ট্যাটিকালি টাইপ করা ভাষাগুলি হ'ল সংকলনের সময়ে টাইপ চেকিং করা হয়, সুতরাং এর অর্থ এইও হয় যে স্ট্যাটিকালি টাইপ করা ভাষায় প্রতিটি ভেরিয়েবলের একটি টাইপ থাকে এবং এটি অবশ্যই কোর্সের পরিবর্তে পরিবর্তন হয় না। এখন, বিপরীতে, গতিশীল টাইপ করা ভাষাগুলি সেইগুলি যা রানটাইমের সময় টাইপ চেকিং করা হয়, এবং সংকলনের সময় কোনও ধরণের চেকিং হয় না, তাই এর অর্থ এটিও হয় যে গতিশীলভাবে টাইপ করা ভাষাগুলিতে ভেরিয়েবলগুলির সাথে সম্পর্কিত কোনও প্রকার বা নাও থাকতে পারে , এবং যদি কোনও প্রকারের সাথে সম্পর্কিত হয় তবে এটি জেএসে "ভ্যার" এর মতো জেনেরিক টাইপ হতে পারে যা স্ট্রিং এবং সংখ্যা উভয়ের জন্যই ভাল।
    • “গতিশীল টাইপ-চেক করা ভাষার প্রয়োগগুলি প্রতিটি রানটাইম অবজেক্টকে সাধারণত টাইপ ট্যাগের সাথে যুক্ত করে (যেমন, কোনও প্রকারের রেফারেন্স) যার মধ্যে এটির তথ্য রয়েছে। এই রানটাইম ধরণের তথ্য (আরটিটিআই) গতিশীল প্রেরণ, দেরী বাইন্ডিং, ডাউন কাস্টিং, প্রতিবিম্ব এবং অনুরূপ বৈশিষ্ট্যগুলি প্রয়োগ করতেও ব্যবহৃত হতে পারে। "
  • এমনকি ভাষা যদি স্থিতিযুক্ত টাইপ করা থাকে, তবুও এটিতে কিছু গতিযুক্ত টাইপযুক্ত বৈশিষ্ট্য থাকতে পারে, যার মূল অর্থ দাঁড়ায় রানটাইমের সময়ও কিছু প্রকারের পরীক্ষা করা। এটি ধরণের কাস্টিংয়ে কার্যকর is
    • “বেশ কয়েকটি দরকারী এবং প্রচলিত প্রোগ্রামিং ভাষার বৈশিষ্ট্যগুলি স্ট্যাটিকালি চেক করা যায় না, যেমন ডাউন কাস্টিং। সুতরাং, অনেক ভাষায় স্থির এবং গতিশীল উভয় প্রকারের পরীক্ষা করা হবে; স্থিতিশীল প্রকারের পরীক্ষক এটি যা যা করতে পারে তা যাচাই করে এবং গতিশীল চেকগুলি বাকীটি যাচাই করে। "
  • “কিছু ভাষা এমন কোড লেখার অনুমতি দেয় যা টাইপ-নিরাপদ নয়। উদাহরণস্বরূপ, সি-তে প্রোগ্রামাররা অবাধে একই আকারের যে কোনও দুটি ধরণের মধ্যে মূল্য দিতে পারে। "
  • "স্থিতিশীল" টাইপযুক্ত ভাষার সুবিধা হ'ল:
    • যেহেতু বেশিরভাগ টাইপ চেকিং সংকলন সময়ে করা হয় তাই দোভাষী বা রানটাইম পুরো গতিতে প্রকারগুলি সম্পর্কে চিন্তা না করে চালাতে পারে।
    • এটি রানটাইম ব্যতিক্রমের কম সংখ্যক বা টাইপের সাথে সম্পর্কিত ত্রুটির দিকে পরিচালিত করে, কারণ বেশিরভাগ টাইপ চেকিং সংকলন সময়ে করা হয়।
  • "গতিশীল" টাইপযুক্ত ভাষার সুবিধা হ'ল:
    • তারা অত্যন্ত দ্রুত প্রোটোটাইপিংয়ে সহায়তা করতে পারে, যেহেতু ডেভেলপারদের টাইপ সিস্টেমটি বোঝার দরকার নেই যাতে দেব আলগাভাবে ভেরিয়েবলগুলি তৈরি করতে এবং চালাতে পারেন এবং এটি খুব দ্রুত প্রোটোটাইপিংয়ের দিকে পরিচালিত করে।
  • স্থিতিশীল এবং গতিশীল টাইপ করা ভাষার তালিকা :
    • স্ট্যাটিক্যালি:
      • জাভা
      • সি (সি একটি স্ট্যাটিকালি টাইপড ল্যাঙ্গুয়েজ তবে জাভার তুলনায় কম "দৃ strongly়ভাবে" টাইপ করা হয়েছে কারণ এটি আরও অন্তর্নিহিত রূপান্তরগুলিকে অনুমতি দেয়)
      • সি ++
      • সি শার্প
    • পরিবর্তনশীল:
      • PERL
      • পিএইচপি
      • পাইথন
      • জাভাস্ক্রিপ্ট
      • চুনি
  • প্রকার পরীক্ষা করা একটি গুরুত্বপূর্ণ সুরক্ষা বৈশিষ্ট্য। মনে করুন, কোনও ধরণের চেকিং নেই, এবং একটি পদ্ধতি "BankAccount" টাইপের কোনও অবজেক্ট গ্রহণ করে যার পদ্ধতিতে "ক্রেডিটঅ্যাকউন্ট (ব্যাংক অ্যাকাউন্ট একাউন্টস") নামে পরিচিত, এখন রানটাইমে যদি টাইপ চেকিং না থাকে তবে আমি আমার নিজস্ব একটি জিনিস পাস করতে পারি ক্লাস যার একই পদ্ধতি "ক্রেডিট অ্যাকাউন্টস্যাক্ট (ব্যাংক অ্যাকাউন্টসেটস ডেটেলস)" রয়েছে এবং এটি কার্যকর করা হবে, বিবেচনা করে আমরা অবজেক্ট ওরিয়েন্টেড ল্যাঙ্গুয়েজ সম্পর্কে কথা বলছি কারণ ওওপি "পলিমারফিজম" সমর্থন করে এবং এখানে আমরা যা আলোচনা করছি তা "পলিমারফিজম" ছাড়া আর কিছুই নয়। সুতরাং, মূলত কোনও অবজেক্ট ওরিয়েন্টেড ল্যাঙ্গুয়েজ (যার মূল অর্থ এটি "পলিমারফিজম" সমর্থন করে) যার শক্তিশালী চেক না থাকায় সুরক্ষা সমস্যা দেখা দিতে পারে।

দৃ v়ভাবে v / গুলি দুর্বলভাবে টাইপ করা ভাষা

  • দৃ typ়ভাবে টাইপ করা ভাষাগুলি হ'ল নির্ভুলতার ক্ষতি হলে যদি অন্তর্নিহিত রূপান্তরগুলি অনুমোদিত হয় না। উদাহরণস্বরূপ, জাভাতে, আপনি একটি "ইন্ট টু লং" কাস্ট করতে পারেন কারণ নির্ভুলতার কোনও ক্ষতি নেই তবে আপনি "স্পষ্টতই" "লং টু ইনট" কাস্ট করতে পারবেন না কারণ নির্ভুলতার ক্ষতি হতে পারে। বিপরীতে, দুর্বলভাবে টাইপ করা ভাষায়, নির্ভুলতা না থাকলেও নিখুঁত রূপান্তরগুলি অনুমোদিত।
  • আমি মনে করি গতিশীলভাবে টাইপ করা ভাষাটি একটি দৃ strongly়ভাবে টাইপিত ভাষাও হতে পারে যদি "রানটাইমের সময়" এটি অন্তর্নিহিত রূপান্তরগুলিতে মঞ্জুরি দেয় না যেখানে যথার্থতার ক্ষতি হয়।

আরও ভাল পড়া


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

@ আসিম ইয়াদভ "* আপনি যদি ইতিমধ্যে এমন কোনও প্রক্রিয়া ছাড়িয়ে গেছেন যা আপনাকে কোনও বস্তু পাস করতে বাধা দিতে পারে *" বলতে কী বোঝায়?
হাগারওয়াল

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

এর কোনও কার্য সম্পাদনের দিক নেই, আপনি এটি বহুবর্ষের প্রেক্ষাপট থেকে দেখতে হবে তবে আপনি এর সুরক্ষা দিকটি বুঝতে পারবেন, আমি এটি একই অনুচ্ছেদে উল্লেখ করেছি in
হাগারওয়াল

1

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

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

স্থিতিশীল এবং গতিশীল টাইপ করা ভাষার উপাদানসমূহ একত্রিত করা যেতে পারে। উদাহরণস্বরূপ, সি # স্ট্যাটিকাল এবং ডায়নামিকালি টাইপড ভেরিয়েবল উভয় সমর্থন করে এবং অবজেক্ট ওরিয়েন্টেড ল্যাঙ্গুয়েজগুলি সাধারণত হায়ারার্কি টাইপ ডাউন-কাস্টিং সমর্থন করে। স্ট্যাটিকালি টাইপ করা ভাষা সাধারণত টাইপ চেকিং বাইপাস করার বিভিন্ন উপায় সরবরাহ করে, উদাহরণস্বরূপ castালাই, প্রতিবিম্ব এবং গতিশীল প্রার্থনা ব্যবহার করে।

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

char *a = "123";
int b = (int)a;

সমতুল্য জাভা কোড একটি সংকলন ত্রুটি তৈরি করবে, যা সাধারণত পছন্দনীয়:

String a = "123"
int b = (int)a;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.