প্রসঙ্গে সংবেদনশীল ব্যাকরণ এবং প্রকারগুলি


25

1) স্ট্যাটিক টাইপিং এবং ফর্মাল ব্যাকরণগুলির মধ্যে কী সম্পর্ক?

2) বিশেষত, কোনও লিনিয়ার বাউন্ডেড অটোমেটনের পক্ষে, একটি সি ++ বা এসএমএল প্রোগ্রামটি ভাল টাইপ করা হয়েছে কিনা তা পরীক্ষা করা সম্ভব হবে? নেস্টেড স্ট্যাক অটোমেটন?

3) আনুষ্ঠানিক ব্যাকরণ শর্তে স্থিতিশীল টাইপিং বিধি প্রকাশ করার প্রাকৃতিক উপায় আছে কি?

উত্তর:


20

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

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

fun delta x = (x, x)        (* this has type 'a -> ('a * 'a), so its return value
                               has a type double the size of its argument *)

fun f1 x = delta (delta x)  (* Now we use functions to iterate this process *)
fun f2 x = f1 (f1 x)        
fun f3 x = f2 (f2 x)        (* This function has a HUGE type *)

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

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

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

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


4

যতদূর আমি জানি যে প্রকারের নির্ভুলতা আকর্ষণীয় ক্ষেত্রে অস্বীকারযোগ্য হতে পারে তাই স্পষ্টতই আনুষ্ঠানিক ব্যাকরণগুলি আপনার মনে করতে পারে এমন প্রতিটি ধরণের সিস্টেম ক্যাপচার করতে পারে না।

আমি জানি যে প্রধান কম্পাইলার জেনারেটর বিধি জারি করে যে মৃত্যুদন্ড কার্যকর করা হচ্ছে যদি সম্পৃক্ত না থেকে একটি নিয়ম প্রতিরোধ জন্য নির্বিচারে predicates নির্ণয় অনুমতি trueযেমন { type(e1) == type(e2) } (expression e1) '+' (expression e2)। এই ধারণাটি সহজেই আনুষ্ঠানিকভাবে করা যেতে পারে; অনুমোদিত পূর্বাভাসের উপর যথাযথ বিধিনিষেধগুলি এলবিএ দ্বারা সিদ্ধান্ত গ্রহণযোগ্যতা পেতে পারে।

+ +1

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