কোনও টাইপ সিস্টেমের সুরক্ষা সুবিধা কী কী?


47

ইন javascript: দ্য গুড যন্ত্রাংশ ডগলাস Crockford দ্বারা, তিনি তার উত্তরাধিকার অধ্যায়ে উল্লেখ,

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

সুতরাং প্রথমত, সুরক্ষা আসলে কি? ডেটা দুর্নীতি, বা হ্যাকার, বা সিস্টেমের ত্রুটি ইত্যাদির বিরুদ্ধে সুরক্ষা?

কোনও টাইপ সিস্টেমের সুরক্ষা সুবিধা কী কী? এমন কোনও সিস্টেমকে কী আলাদা করে তোলে যা এটি এই সুরক্ষা সুবিধাগুলি সরবরাহ করতে দেয়?


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

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

4
@ বেনজামিন গ্রুয়েনবাউম আপনার বর্ণনাটি যা ইতিমধ্যে ওক্যামেলের মতো ভাষায় স্থিরভাবে বিদ্যমান। একে স্ট্রাকচারাল টাইপিং বলা হয়, এটি আসলে বেশ পুরানো, নামমাত্র টাইপিং আরও নতুন।
jozefg

2
@ বেঞ্জামিন গ্রুয়েনবাউম: ... কি !? এটি স্ট্যাটিক্যালি টাইপ করা ভাষায় স্পষ্টতই অনস্বীকার্য নয় , অন্যথায় languages ​​ভাষাগুলির জন্য একটি সংকলক লেখা অসম্ভব হবে।
ব্লুরাজা - ড্যানি পিফ্লুঘিওফ্ট

6
@BenjaminGruenbaum: আপনার মন্তব্য মূল্যবান, এবং যে কাগজ আকর্ষণীয়, কিন্তু এটি আপনার দাবি করেন যে, "এটি সাধারণত খুব জাভা মত স্ট্যাটিক ভাষায় undecidable" -এর, যেহেতু এটি প্রমান করে যে এটা ধরে না হয় C # নির্ধার্য, এবং পাতা প্রশ্ন খুলুন এটি জাভাতে অনস্বীকার্য কিনা of (এবং যাইহোক, আইএমই, যখন কোনও স্ট্যাটিকালি-টাইপযুক্ত ভাষার সংকলক সিদ্ধান্ত নিতে পারে না যে কোনও কিছু ভাল-টাইপ করা হয়েছে, তখন এটি এটি প্রত্যাখ্যান করে (বা এটি সংকলন করতে ব্যর্থ হয়), তাই অনির্বাচিততা টাইপের- একটি গর্তের পরিবর্তে বিরক্তি is সুরক্ষা।)
রুখ

উত্তর:


82

প্রকার সিস্টেম ত্রুটিগুলি রোধ করে

টাইপ সিস্টেমগুলি অবৈধ প্রোগ্রামগুলি সরিয়ে দেয়। নিম্নলিখিত পাইথন কোডটি বিবেচনা করুন।

 a = 'foo'
 b = True
 c = a / b

পাইথনে, এই প্রোগ্রামটি ব্যর্থ হয়; এটি একটি ব্যতিক্রম নিক্ষেপ। জাভা, সি #, হাস্কেলের মতো ভাষায় , যাই হোক না কেন, এটি কোনও আইনী প্রোগ্রামও নয়। আপনি সম্পূর্ণরূপে এই ত্রুটিগুলি এড়িয়ে যান কারণ ইনপুট প্রোগ্রামগুলির সেটগুলিতে কেবল এটি সম্ভব নয়।

একইভাবে, একটি আরও ভাল টাইপ সিস্টেম আরও ত্রুটিগুলি বিধি নিষেধ করে। যদি আমরা সুপার অ্যাডভান্সড টাইপ সিস্টেমে উঠে যাই তবে আমরা এ জাতীয় জিনিস বলতে পারি:

 Definition divide x (y : {x : integer | x /= 0}) = x / y

এখন টাইপ সিস্টেমটি গ্যারান্টি দেয় যে কোনও বিভাজন দ্বারা 0 টি ত্রুটি নেই।

কি ধরণের ত্রুটি

কী ত্রুটি টাইপ সিস্টেমগুলি প্রতিরোধ করতে পারে তার একটি সংক্ষিপ্ত তালিকা এখানে

  1. সীমার বাইরে ত্রুটি
  2. এসকিউএল ইনজেকশন
  3. সাধারণকরণ 2, সুরক্ষার অনেকগুলি সমস্যা ( পার্লের জন্য কী ধরণের চেক করা দরকার )
  4. অনুক্রমের ত্রুটিগুলি (আরআরকে কল করতে ভুলে যাওয়া)
  5. মানগুলির একটি উপসেট ব্যবহার করতে বাধ্য করা (উদাহরণস্বরূপ, শুধুমাত্র 0 এর চেয়ে বড় পূর্ণসংখ্যা)
  6. নেফেরিয়াস বিড়ালছানা (হ্যাঁ, এটি একটি রসিকতা ছিল)
  7. ক্ষতি-নির্ভুলতা ত্রুটি
  8. সফ্টওয়্যার লেনদেনের মেমরি (এসটিএম) ত্রুটি (এটির জন্য বিশুদ্ধতা প্রয়োজন, যার জন্য প্রকারেরও প্রয়োজন)
  9. সাধারণকরণ 8, পার্শ্ব প্রতিক্রিয়াগুলি নিয়ন্ত্রণ করে
  10. ডেটা কাঠামোর উপর আক্রমণকারীরা (একটি বাইনারি গাছ সুষম?)
  11. একটি ব্যতিক্রম ভুলে যাওয়া বা ভুলটি নিক্ষেপ করা

এবং মনে রাখবেন, এটি সংকলনের সময়ও রয়েছে। টাইপ ত্রুটিগুলি কেবল পরীক্ষা করার জন্য 100% কোড কভারেজ দিয়ে পরীক্ষা লেখার দরকার নেই, সংকলকটি কেবল এটি আপনার জন্য করে :)

কেস স্টাডি: টাইপড ল্যাম্বদা ক্যালকুলাস

ঠিক আছে, আসুন সব ধরণের সিস্টেমের মধ্যে সহজতম পরীক্ষা করা যাক, কেবল টাইপ করা ল্যাম্বদা ক্যালকুলাস

মূলত দুটি প্রকার রয়েছে,

Type = Unit | Type -> Type

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

এ সম্পর্কে চিন্তা করুন, আমরা গ্যারান্টির জন্য টাইপ সিস্টেমগুলি ব্যবহার করতে পারি যে আমাদের প্রোগ্রামটি চিরতরে লুপ করে না, বরং দুর্দান্ত?

গতিশীল প্রকারের মধ্যে দ্বীপ

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

তাই ডায়নামিক ধরণের কিছু নির্দিষ্ট প্রোগ্রামকে বাতিল করে দেয় না, বরং ব্যতিক্রম ছোঁড়ার মতো সুনির্দিষ্ট-সংজ্ঞায়িত ক্রিয়ায় ত্রুটিযুক্ত প্রোগ্রামগুলিকে রুট করে।

TLDR

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


25
প্রচুর পরীক্ষা লেখার সমতুল্য হিসাবে সংকলনের জন্য +1।
ড্যান নীলি

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

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

5
@ ডোনালফেলো একারম্যান ফাংশনটি আদিম পুনরাবৃত্তিমূলক নয়, যদিও এটি মোট গণনীয় ফাংশন।
তাইমন

4
@ সাকুন্ডিম ঠিক বলেছেন, আগদার মতো ভাষাগুলি .চ্ছিক সার্বিকতা যাচাইয়ের অনুমতি দেয় এবং বিরল ক্ষেত্রে যেখানে আপনি স্বেচ্ছাচারিত পুনরাবৃত্তি চান আপনি খুব সুন্দরভাবে জিজ্ঞাসা করতে পারেন, এটি বেশ চতুর সিস্টেম।
jozefg

17

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

একটি টাইপসেফ সিস্টেমে, বিভিন্ন ইউনিটে প্রকাশিত দুটি দৈর্ঘ্য যুক্ত করা একটি ত্রুটি হতে পারে বা একটি স্বয়ংক্রিয় castালাই ঘটায়।


15

একটি টাইপ সিস্টেম আপনাকে সহজ কোডিং ত্রুটিগুলি এড়াতে সহায়তা করে বা সংকলকটি আপনার জন্য সেই ত্রুটিগুলি ধরতে দেয়।

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

if (someRareCondition)
     a = 1
else
     a = {1, 2, 3}

// 10 lines below
k = a.length

যদিও একটি দৃ strongly়-টাইপিত ভাষা আপনাকে স্পষ্টভাবে বলতে বাধ্য করে যে aএটি একটি অ্যারে এবং আপনাকে কোনও পূর্ণসংখ্যা বরাদ্দ করতে দেবে না। এইভাবে, কোনও সুযোগ aনেই length- এমনকি বিরল ক্ষেত্রেও won't


5
এবং ওয়েবস্টোরম জাভাস্ক্রিপ্টের মতো আইডিইয়ের একটি চৌকস রেখাযুক্ত অংশটি "a নম্বরের দৈর্ঘ্যের সম্ভাব্য অপরিবর্তিত রেফারেন্স" বলতে পারে। এটি একটি সুস্পষ্ট টাইপ সিস্টেম থাকার দ্বারা আমাদের দেওয়া হয় না।
বেনিয়ামিন গ্রুইনবাউম

4
১. স্ট্যাটিকালি দৃ strongly়ভাবে নয় ২. @ বেনজামিন গ্রুয়েনবাউম হ্যাঁ, তবে এটি ব্যাকগ্রাউন্ডে অ্যাসাইনমেন্টের গ্রাফ তাড়া করে করা হয়েছে, এটি কোনও মিনি দোভাষী হিসাবে জিনিসগুলি কোথায় চলছে তা বের করার চেষ্টা করুন think প্রকার আপনাকে এটিকে বিনামূল্যে দেয় তার চেয়ে অনেক বেশি শক্ত
jozefg

6
@ বেঞ্জামিন গ্রুয়েনবাউম: দৃ strong় / দুর্বল দ্বারা অন্তর্নিহিত / স্পষ্টতাকে বিভ্রান্ত করবেন না। উদাহরণস্বরূপ, হাস্কেলের একটি অবিশ্বাস্যরূপে শক্তিশালী টাইপ সিস্টেম রয়েছে যা বেশিরভাগ অন্যান্য ভাষাকে লজ্জাজনক করে তোলে, তবে কিছু ভাষা নকশার সিদ্ধান্তের কারণে এটি প্রায় সম্পূর্ণ সর্বজনীন প্রকারের অনুক্রমের পক্ষেও সক্ষম, এটি মূলত স্পষ্টত টাইপিংয়ের সমর্থনের জন্য একটি দৃ strongly়ভাবে অন্তর্নিহিত টাইপড ভাষা তৈরি করে (যা আপনি ব্যবহার করা উচিত, টাইপ inferencer শুধুমাত্র কি আপনি লিখেছিলেন, থেকে অনুমান করতে পারবেন না কারণ না আপনি কি বোঝানো!)
Phoshi

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

1
@ বেনজামিন গ্রুয়েনবাউম: আহ, যথেষ্ট যথেষ্ট। তবুও, এমন কেস থাকবে যেখানে কোনও জেএস স্ট্যাটিক বিশ্লেষক একই ধরণের টাইপেক পরীক্ষা করতে পারবেন না জোরালোভাবে টাইপ করা একটি ভাষা সরবরাহ করবে, সাধারণ ক্ষেত্রে এটি সমাধান করা প্রয়োজন থামানো সমস্যা সমাধানের জন্য। কাছাকাছি -100% প্রকারের অনুমান অর্জনের জন্য হাস্কেলকে বেশ কয়েকটি নকশার সিদ্ধান্ত নিতে হয়েছিল এবং সি # / স্কালা সমস্ত কিছু আবিষ্কার করতে পারে না। অবশ্যই, এই ক্ষেত্রেগুলিতে কিছু যায় আসে না কারণ আপনি কেবল স্পষ্টভাবে প্রকারগুলি নির্দিষ্ট করতে পারেন - জাভাস্ক্রিপ্টে, এর অর্থ এমনকি সেরা স্ট্যাটিক বিশ্লেষক আপনার কোডটি আর পরীক্ষা করতে পারবেন না।
ফোশি

5

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

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

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

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


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

@ ম্যাটফেনউইক আপনার কী মনে হয় ডায়নামিক টাইপের প্রাথমিক উপকারগুলি?
গ্লেনপিটারসন

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

4

ভূমিকা

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

সুরক্ষা - স্থির প্রকারের পরীক্ষা করা

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

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

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

কার্য সম্পাদনের দক্ষতা এবং গতির জন্য স্ট্যাটিকালি-টাইপ করা ভাষা ব্যবহারের একটি সুবিধা রয়েছে। মৃত্যুর সময় প্রকারগুলি নির্ধারণ না করে রানটাইম উপকার করে।

সুরক্ষা - রানটাইম টাইপ চেকিং

উদাহরণস্বরূপ, এরলং হ'ল এক প্রকারের ঘোষণামূলক, গতিশীলভাবে টাইপ করা চেক ভাষা যা ভার্চুয়াল মেশিনে চলে। এরলং কোড বাইট সংকলন করা যায়। এরলং সম্ভবত সবচেয়ে গুরুত্বপূর্ণ মিশন-সমালোচনামূলক, ফল্ট সহনশীল ভাষা হিসাবে বিবেচিত বলে মনে করা হয় এবং জানা গেছে যে এরলংয়ের নয়টি 9 এর নির্ভরযোগ্যতা রয়েছে (99.9999999% বা প্রতি বছর 31.5 ম্যাসেকের বেশি নয়)।

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


2
আমি "দৃ strongly়ভাবে টাইপ করা" আপত্তি জানাই। আপনি স্ট্যাটিকালি টাইপ করা মানে।
দৃ

@ জোজেফগ ভাল পয়েন্ট পোস্টটি সংশোধন করব।
অসিমল্যাবস

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

3
@ জোজেফগ: আমি সর্বদা ভেবেছিলাম যে দৃ strongly়ভাবে টাইপ করা মানে প্রতিটি মানের একটি নির্দিষ্ট প্রকার (যেমন পূর্ণসংখ্যা, স্ট্রিং ইত্যাদি) থাকে তবে দুর্বলভাবে টাইপ করা মানে একটি মানকে অন্য ধরণের মানকে জোর করা যায়, যদি এটি সুবিধাজনক বলে মনে করা হয় তাই। উদাহরণস্বরূপ, পাইথনে (দৃ strongly়ভাবে টাইপ করা), 1 + "1"একটি ব্যতিক্রম ছুঁড়ে দেয়, যেখানে পিএইচপি (দুর্বলভাবে টাইপ করা) 1 + "1"উত্পাদন করে 2(স্ট্রিংটি "1"স্বয়ংক্রিয়ভাবে পূর্ণসংখ্যায় রূপান্তরিত হয় 1)।
জর্জিও

1
যেমন জর্জিও যেমন সংজ্ঞা সহ জাভা জোরালোভাবে টাইপ করা হয় না। তবে অনেক ক্ষেত্রেই দাবি করা হয়। এই শব্দগুলির ঠিক কোনও অর্থ নেই is জোজেফগের মত "শক্তিশালী / দুর্বল টাইপড" এর মতো "আমি এই ভাষা পছন্দ করি / পছন্দ করি না" হিসাবে আরও সঠিক সংজ্ঞা রয়েছে।
ইসাইলিজা

1

একটি টাইপ সিস্টেমের সুরক্ষা সুবিধাগুলি হারিয়ে যায়।

সুতরাং প্রথমত, সুরক্ষা আসলে কি? ডেটা দুর্নীতি, বা হ্যাকার, বা সিস্টেমের ত্রুটি ইত্যাদির বিরুদ্ধে সুরক্ষা?

কোনও টাইপ সিস্টেমের সুরক্ষা সুবিধা কী কী? এমন কোনও সিস্টেমকে কী আলাদা করে তোলে যা এটি এই সুরক্ষা সুবিধাগুলি সরবরাহ করতে দেয়?

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

যে ধরণের স্পেসিফিকেশন টাইপ হিসাবে এনকোড করতে পারে তা ভাষার উপর নির্ভর করে বা আরও সরাসরি ভাষার টাইপ সিস্টেমের শক্তির উপর।

সুনির্দিষ্ট মৌলিক ধরণের স্পেসিফিকেশন হ'ল ফাংশনগুলির ইনপুট / আউটপুট আচরণ সম্পর্কে এবং একটি ফাংশন বডিটির অভ্যন্তরের বৈধতার গ্যারান্টি। একটি ফাংশন শিরোনাম বিবেচনা করুন

f : (Int,Int) -> String

একটি ভাল টাইপ সিস্টেম নিশ্চিত করে যে চ কেবলমাত্র এমন অবজেক্টগুলিতে প্রয়োগ করা হয়েছে যা মূল্যায়ন করার সময় একটি জুড়ি ইন্ট তৈরি করবে এবং গ্যারান্টি দেয় যে চ সবসময় একটি স্ট্রিং তৈরি করবে।

কোনও ভাষায় কিছু বিবৃতি, যদি-তবে-এর ব্লকগুলি থাকে তবে ইনপুট / আউটপুট আচরণ থাকে না; এখানে টাইপ সিস্টেম গ্যারান্টি দেয় যে ব্লকের প্রতিটি ঘোষণা বা বিবৃতি বৈধ; এটি সঠিক ধরণের অবজেক্টগুলিতে অপারেশন প্রযোজ্য। এই গ্যারান্টিগুলি সামঞ্জস্যপূর্ণ।

এছাড়াও, এটি এক ধরণের মেমরির সুরক্ষা শর্ত দেয়। আপনি যে উদ্ধৃতিটির সাথে কথা বলছেন তা কাস্টিং সম্পর্কে। কিছু ক্ষেত্রে, ing৪-বিট ইন্টে 32-বিট ইন্ট কাস্টিংয়ের মতো likeালাই ঠিক আছে। তবে, সাধারণত, এটি টাইপ সিস্টেমটি ক্র্যাশ করে।

বিবেচনা

Foo x = new Foo(3,4,5,6);
f((Int)x,(Int)x);

Ingালাইয়ের কারণে, x একটি ইন্টারে রূপান্তরিত হয়, তাই প্রযুক্তিগতভাবে উপরেরটি পরীক্ষা করে টাইপ করে; তবে এটি টাইপচেকিংয়ের উদ্দেশ্যকে পরাস্ত করে।

একটি জিনিস যা একটি ভিন্ন এবং আরও ভাল টাইপ সিস্টেম তৈরি করতে পারে তা হ'ল কাস্ট (A) x কে বাতিল করতে হবে যেখানে কেস বি টাইপের আগে x থাকে, যদি না বি এর সাব-টাইপ (বা সাবোবজেক্ট) হয় এ এর ​​সুরক্ষায় পূর্ণসংখ্যার ওভারফ্লো / আন্ডারফ্লো আক্রমণগুলির সম্ভাবনা সরাতে।

সারাংশ

কোনও প্রকারের সিস্টেমটি কোনও প্রকারের নির্দিষ্টকরণের সাথে মেলে তা প্রমাণ করার একটি প্রকার সিস্টেম। কোনও টাইপ সিস্টেমটি যে সুবিধা দিতে পারে তা ব্যবহৃত টাইপ সিস্টেমের শক্তির উপর নির্ভর করে।


1

এক প্রকার সিস্টেম কেন্দ্রগুলির জন্য এখনও একটি উল্লেখ করা হয়নি যা অনেকগুলি প্রোগ্রামের লেখার চেয়ে বেশি পড়েন এবং অনেক ক্ষেত্রে একটি টাইপ সিস্টেম অনেকগুলি তথ্যকে এমনভাবে নির্দিষ্ট করতে দেয় যা সংক্ষিপ্ত এবং সহজেই হতে পারে কোড পড়ে কেউ হজম করে। প্যারামিটারের ধরণের বর্ণনামূলক মন্তব্যের স্থান না নিলে, বেশিরভাগ লোকেরা এটি পড়তে আরও দ্রুত খুঁজে পাবেন: "int দূরত্ব;" অথবাDistance As Int32"দূরত্ব অবশ্যই একটি সম্পূর্ণ সংখ্যা হতে হবে +/- 2147483647" পড়ার চেয়ে; ভগ্নাংশগুলি পাস করা অসঙ্গতিপূর্ণ ফলাফল পেতে পারে "" আরও, প্যারামিটারের ধরনগুলি কোনও এপিআইয়ের একটি নির্দিষ্ট বাস্তবায়ন যা করতে হয় তার তুলনায় ব্যবধান হ্রাস করতে পারে, কলাররা নির্ভর করতে পারে কি তার উপর নির্ভর করে example উদাহরণস্বরূপ, যদি কোনও এআইপি-র কোনও জাভাস্ক্রিপ্ট প্রয়োগ ব্যবহার করে তবে একটি উপায় যার সাংখ্যিক ফর্ম কোনো স্ট্রিং নিগৃহীত হবে তার পরামিতি, এটা অস্পষ্ট হতে পারে কলারের এধরনের আচরণ উপর নির্ভর করার অনুমতি দেওয়া হয়, অথবা যদি এপিআই শক্তি ঠিকঠাক অন্যান্য বাস্তবায়নের যদি প্রদত্ত স্ট্রিং কিনা। একটি পদ্ধতি যার প্যারামিটার হিসাবে উল্লেখ করা হয় রয়ে Doubleহায় এটি পরিষ্কার করুন যে কোনও স্ট্রিংয়ের মানগুলি অবশ্যই কল করার আগে কলার দ্বারা জোর করে নেওয়া উচিত; ওভারলোডের সাথে এমন একটি পদ্ধতি রয়েছে যা গ্রহণ করে Doubleএবং অন্যটি গ্রহণ করেString এটি কিছুটা স্পষ্ট করে তুলবে যে স্ট্রিং ধারণকারী কলকারীদের তাদের পাস করার অনুমতি দেওয়া হবে।


0

সুতরাং প্রথমত, সুরক্ষা আসলে কি? ডেটা দুর্নীতি, বা হ্যাকার, বা সিস্টেমের ত্রুটি ইত্যাদির বিরুদ্ধে সুরক্ষা?

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

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

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

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

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