স্থির বিশ্লেষণের জন্য কি ধরণের বিকল্প রয়েছে?


18

একটি প্রোগ্রামিং ভাষায় স্ট্যাটিক টাইপিং সংকলন সময়ে নির্দিষ্ট গ্যারান্টি প্রয়োগের জন্য সহায়ক হতে পারে- তবে কি এই কাজের জন্য কেবল একমাত্র হাতিয়ার? আক্রমণকারীদের নির্দিষ্ট করার অন্যান্য উপায় আছে?

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

একজন সংশ্লিষ্ট জিনিস আমি ভাবছিলাম যদি স্ট্যাটিক বিশ্লেষণ করতে কোনো অ-ঘোষণামূলক উপায় আছে (ধরনের, ঘোষণামূলক হয় অধিকাংশ অংশ জন্য )।

উত্তর:


24

স্ট্যাটিক টাইপ সিস্টেমগুলি এক ধরণের স্থির বিশ্লেষণ, তবে এমন অনেকগুলি স্থির বিশ্লেষণ রয়েছে যা সাধারণত টাইপ সিস্টেমে এনকোড থাকে না। উদাহরণ স্বরূপ:

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

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

  • বিমূর্ত ব্যাখ্যার রক্ষণশীলভাবে কোনও প্রোগ্রামের প্রভাবগুলিকে মডেল করে, সাধারণত এমনভাবে বিশ্লেষণটি সমাপ্ত করার গ্যারান্টিযুক্ত — টাইপ চেকারগুলি একইভাবে বিমূর্ত ব্যাখ্যাকারীদের প্রয়োগ করা যেতে পারে।

  • পৃথকীকরণ যুক্তি হ'ল একটি প্রোগ্রাম যুক্তি (উদাহরণস্বরূপ ইনফার বিশ্লেষক হিসাবে ব্যবহৃত হয়) যা প্রোগ্রামের রাজ্যগুলি সম্পর্কে যুক্তিযুক্ত এবং নাল পয়েন্টার ডি रेফেরেন্স , অবৈধ রাজ্যগুলি এবং সংস্থানসমূহের ফাঁসের মতো বিষয়গুলি সনাক্ত করতে ব্যবহৃত হতে পারে।

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

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

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

$x = get_value();
if ($x !== null) {
    $x->method();    // Typechecks because $x is known to be non-null.
} else {
    $x->method();    // Does not typecheck.
}

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

(++) : (a : Type) -> (m n : Nat) -> Vec a m -> Vec a n -> Vec a (m + n)

এখানে, ++দুটি ধরণের অপারেন্ড লাগবে Vec a mএবং Vec a n, উপাদান টাইপ aএবং দৈর্ঘ্য সহ যথাক্রমে ভেক্টর mএবং nযথাক্রমে, যা প্রাকৃতিক সংখ্যা ( Nat)। এটি একই উপাদানের প্রকারের দৈর্ঘ্য সহ একটি ভেক্টরকে ফেরত দেয় m + n। এবং এই ফাংশনটি এই সীমাবদ্ধতাটিকে বিমূর্তভাবে প্রমাণ করে, নির্দিষ্ট মানগুলি না জেনে mএবং n, সুতরাং ভেক্টরের দৈর্ঘ্য গতিশীল হতে পারে।


টাইপ সিস্টেম কি? আমি বুঝতে পারি যে আমি আসলে জানি না। উইকিপিডিয়ায় সংজ্ঞা বিজ্ঞপ্তি হল: en.wikipedia.org/wiki/Type_system
ম্যাক্স Heiber

1
@mheiber: একটি স্ট্যাটিক টাইপ সিস্টেম কেবল একটি স্ট্যাটিক বিশ্লেষণ যে আরোপ ধরনের (যেমন, int, int -> int, forall a. a -> a) পদ (যেমন, 0, (+ 1), \x -> x)। অন্যান্য বিশ্লেষণগুলি বিভিন্ন ধরণের ডেটা প্রকারের সাথে সম্পর্কিত নয়, উদাহরণস্বরূপ, পার্শ্ব প্রতিক্রিয়া ( pure, io), দৃশ্যমানতা ( public, private), বা রাষ্ট্র ( open, closed) হিসাবে চিহ্নিত করতে পারে। অনুশীলনে, এই বৈশিষ্ট্যগুলির মধ্যে অনেকগুলি একই রূপায়ণে টাইপ চেকিং / ইনফারেন্স হিসাবে পরীক্ষা করা যায়, তাই পার্থক্যটি সম্পূর্ণ পরিষ্কার নয় clear
জন পুরী

4

@ জোনপুর্ডির উত্তরটি আরও ভাল তবে আমি আরও কয়েকটি উদাহরণ যুক্ত করতে চাই:

সুস্পষ্ট:

  • বাক্য গঠন পরীক্ষা করা

  • linting

অ সুস্পষ্ট:

  • মরিচা প্রোগ্রামারকে "বাইন্ডিংগুলি" পরিবর্তনীয় কিনা তা নির্দিষ্ট করতে সক্ষম করে এবং এই সীমাবদ্ধতাগুলি প্রয়োগ করে।

  • এটি সম্পর্কিতভাবে সম্পর্কিত: কিছু ভাষাগুলি সংকলনের সময় কিছু কোড চালিত করতে সক্ষম করে, যার অর্থ অনেকগুলি জিনিস যা অন্যথায় রানটাইম ত্রুটিযুক্ত তা সংকলনের সময় ধরা যেতে পারে। কিছু উদাহরণ হ'ল ম্যাক্রোস এবং নিম ভাষার পদ্ধতিগুলি compileTimeপ্রাগমের সাথে চিহ্নিত ।

  • লজিক প্রোগ্রামিং মূলত বক্তব্য সরবরাহ করে একটি প্রোগ্রাম তৈরি করে চলেছে।

আধা-স্থির টাইপিং:

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

1

প্রকার বিশ্লেষণের অর্থ খুব একটা নয়।

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


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