প্রয়োগের ধরন অনুমান


94

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

সুতরাং আমি নিজের নিজস্ব একটি কার্যকরী শৈলীর ভাষা তৈরি শুরু করতে চলেছি এবং টাইপ ইনফারেন্সটি আমি প্রয়োগ করতে চাই এমন একটি বিষয়। আমি বুঝতে পারি যে এটি একটি বড় বিষয়, এবং আমি এমন কিছু তৈরি করার চেষ্টা করছি না যা আগে কখনও করা হয়নি, কেবলমাত্র বেসিক ইনফারেন্সিং ...

কী পড়তে হবে তাতে কোন পয়েন্টার এতে আমাকে সাহায্য করবে? অধিকতর তাত্ত্বিক বিভাগের তত্ত্ব / প্রকার তত্ত্বের পাঠ্যের বিপরীতে আরও কিছু বাস্তববাদী / ব্যবহারিক কিছু। যদি ডেটা স্ট্রাকচার / অ্যালগোরিদম সহ কোনও বাস্তবায়ন আলোচনার পাঠ্য থাকে তবে তা কেবল সুন্দর।


4
ঠিক আমি যে প্রশ্নটি খুঁজছিলাম, তার দুর্দান্ত কিছু উত্তর সহ!
পল হোলিংসওয়ার্থ

উত্তর:


90

প্রকারের ক্রমবর্ধমান অসুবিধার জন্য, নিম্নলিখিত ধরণের অনুমিতি বোঝার জন্য আমি নিম্নলিখিত সংস্থানগুলিকে সহায়ক বলে মনে করেছি:

  1. নিখরচায় উপলভ্য বই পিএলআই এর অধ্যায় 30 (প্রকারের অনুক্রমের) , প্রোগ্রামিং ভাষা: অ্যাপ্লিকেশন এবং ব্যাখ্যার , একীকরণ-ভিত্তিক প্রকারের স্কেচগুলি ket
  2. গ্রীষ্মকালীন কোর্সটি বিমূর্ত মূল্য হিসাবে ধরণী ব্যাখ্যা হ্যাশেলকে একটি রূপক হিসাবে ব্যবহার করে মার্জিত মূল্যায়নকারী, প্রকারের চেকার, টাইপ পুনর্গঠনকারী এবং ইনসারেন্টার উপস্থাপন করে।
  3. ইওপিএল বইয়ের অধ্যায় ((প্রকার) , প্রোগ্রামিং ভাষার প্রয়োজনীয়তা
  4. টিএপিএল , প্রকার এবং প্রোগ্রামিং ভাষা এবং বইটির সংশ্লিষ্ট ওসিএএমএল বাস্তবায়ন পুনরায় এবং ফুলরেকন এর 22 তম অধ্যায় (টাইপ পুনঃনির্মাণ) ।
  5. নতুন বই ডিসিপিএল এর 13 তম (টাইপ পুনর্গঠন) , প্রোগ্রামিং ভাষাগুলিতে নকশা ধারণা
  6. একাডেমিক কাগজপত্র নির্বাচন
  7. বন্ধ কম্পাইলার এর TypeInference টাইপ অনুমান, যা ভাল যে Hindler মিলনার পদ্ধতির গতিশীল ভাষায় উপযুক্ত হয় ডেটা-প্রবাহ বিশ্লেষণ পদ্ধতির একটি উদাহরণ।

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

আমি এমএলে এই দুটি অ্যাক্সেসযোগ্য হোমওয়ার্কের প্রস্তাব দিচ্ছি, যা আপনি উভয়ই এক দিনেরও কম সময়ে সম্পূর্ণ করতে পারেন:

  1. পিসিএফ ইন্টারপ্রেটার ( একটি সমাধান ) গরম করার জন্য।
  2. হ্যান্ডলি -মিলনার ধরণের অনুক্রমের জন্য অ্যালগরিদম ডাব্লু বাস্তবায়নের জন্য পিসিএফ প্রকারের অনুকরণ ( একটি সমাধান )।

এই অ্যাসাইনমেন্টগুলি আরও উন্নত কোর্স থেকে:

  1. মিনিএমএল বাস্তবায়ন করা হচ্ছে

  2. পলিমারফিক, অস্তিত্বশীল, পুনরাবৃত্তির প্রকারগুলি (পিডিএফ)

  3. দ্বি-নির্দেশমূলক টাইপচেকিং (পিডিএফ)

  4. সাব টাইপিং এবং অবজেক্টস (পিডিএফ)


4
এটি কি কেবল আমি, বা পিএলআইয়ের বিবরণটি মূলত ভুল / অসম্পূর্ণ? বক্তৃতা এতে আরও কিছু যুক্ত করে, তবে এখনও এটি কাজ করার পক্ষে যথেষ্ট মনে হয় না।
রি মিয়াসাকা

আমি পিএলআই বইয়ের 2012 সংস্করণেও অ্যালগরিদম পেতে পারি না। সীমাবদ্ধতার তালিকার কোনও বিকল্প নেই। পরিবর্তে, আমি পিএলএআই বইয়ের 2003-7 সংস্করণে ইনফারেন্স অ্যালগরিদম টাইপটি প্রয়োগ করেছি, এটি আরও ভাল কাজ করছে বলে মনে হয় এবং লে-পলিমারফিজমেও ভাল স্কেল করে।
হাইকেল

29

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

http://www.plai.org/

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

বিনা ভাষার জন্য let, আপনি প্রতিস্থাপনের দ্বারা উপরের সীমাবদ্ধতাগুলি অন্ধভাবে সমাধান করতে পারেন। উদাহরণ স্বরূপ:

(if (= 1 2) 
    1 
    2)

এখানে, আমরা বলতে পারি যে if স্টেটমেন্টের শর্তটি অবশ্যই বুলিয়ান হতে হবে, এবং if স্টেটমেন্টের ধরণটি এর thenএবং elseধারাগুলির ধরণের অনুরূপ । যেহেতু আমরা প্রতিস্থাপনের মাধ্যমে জানি 1এবং 2সংখ্যা, তাই আমরা জানি যে ifবিবৃতিটি একটি সংখ্যা।

যেখানে জিনিসগুলি অদ্ভুত হয়ে যায়, এবং যা আমি কিছু সময়ের জন্য বুঝতে পারি না, তা হ'ল:

(let ((id (lambda (x) x)))
    (id id))

এখানে, আমরা idএমন একটি ফাংশনকে আবদ্ধ করেছি যা আপনি যা যা পেরেছেন তা ফিরিয়ে দেয়, অন্যথায় পরিচয় ফাংশন হিসাবে known সমস্যাটি হ'ল ফাংশনের প্যারামিটারের xপ্রতিটি ব্যবহারের ক্ষেত্রে আলাদা id। দ্বিতীয়টি idহ'ল টাইপের একটি ফাংশন a -> a, যেখানে aকিছু হতে পারে। প্রথম টাইপ হয় (a -> a) -> (a -> a)। এটি লেট-পলিমারফিজম হিসাবে পরিচিত। কীটি কোনও নির্দিষ্ট ক্রমে সীমাবদ্ধতাগুলি সমাধান করা: প্রথমে সংজ্ঞাটির সংজ্ঞা সীমাবদ্ধ করুন id। এই হবে a -> a। তারপরে নতুন, প্রকারের পৃথক অনুলিপি idপ্রতিটি জায়গার সীমাবদ্ধতার পরিবর্তে প্রতিস্থাপন করা যেতে পারে id, উদাহরণস্বরূপ a2 -> a2এবং a3 -> a3

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

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

http://www.cs.uu.nl/research/techreps/repo/CS-2002/2002-031.pdf

অন্যান্য অন্যান্য কাগজপত্রগুলির মধ্যে অনেকগুলি খুব ভাল:

http://people.cs.uu.nl/bastiaan/papers.html

আমি আশা করি যে এটি কিছুটা দুর্বল পৃথিবী পরিষ্কার করতে সহায়তা করে।


7

ক্রিয়ামূলক ভাষার জন্য হিন্ডি মিলনার ছাড়াও, গতিশীল ভাষার জন্য অনুকরণ টাইপ করার জন্য আরেকটি জনপ্রিয় পদ্ধতি abstract interpretation

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

পাইসোনার 2 পাইথনের জন্য বিমূর্ত ব্যাখ্যার মার্জিত বাস্তবায়ন। এটি গুগল পাইথন প্রকল্পগুলি বিশ্লেষণ করতে ব্যবহার করে। মূলত এটি visitor patternপ্রাসঙ্গিক এএসটি নোডে মূল্যায়ন কল প্রেরণের জন্য ব্যবহার করে। ভিজিটর ফাংশনটি transform গ্রহণ করে contextযার মধ্যে বর্তমান নোডকে মূল্যায়ন করা হবে এবং বর্তমান নোডের ধরণটি প্রদান করে।



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