মডিউলার সংকলকটিতে কেউ কি পোটিয়র এবং গৌথিয়রের বহুবিধ ডিফেকশনালাইজেশন ব্যবহার করেছেন?


15

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

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

কেউ কি এই কাজটি করেছেন, এবং এই ধারণাটি ব্যবহার করে আমাকে কোনও সংকলকের দিকে নির্দেশ করেছেন? (খেলনা সংকলক ঠিক আছে, এবং আসলে পছন্দসই।)

উত্তর:


6

একটি পদ্ধতির দ্বারা বর্ণিত হয়

জর্জিওস ফোরটৌনিস এবং নিকোলাস এস পাপাস্পেরিও। 2013. একটি সংজ্ঞায়িত সংকলক পৃথক সংকলন সমর্থন। স্লট 2013।

যেমন @ বাগচে উল্লেখ করেছেন:

সমস্যার একটি ভিন্ন পদ্ধতির বিষয়টি বিবেচনা করে বিবেচনা করা হবে যে প্রতিটি মডিউল তার নিজস্ব "Defunctionalized ফাংশন" টাইপ এবং প্রেরক / হ্যান্ডলার সংজ্ঞায়িত করতে পারে।

এনআমি0<আমি<এনএন-আমি


4

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

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

নির্বাচিত ডিফিউশনিয়ালাইজেশনের জন্য প্রদত্ত মডিউল / প্রোগ্রামের অভ্যন্তরে "বেস কেস" ব্যবহার করার কথা আমি কল্পনা করতে পারি : আপনার রিফাইড ফাংশন টাইপের কোনও অতিরিক্ত কনস্ট্রাক্টর থাকবে যা কোনও ট্যাগ নয়, তবে সমস্ত 'a -> 'bফাংশন এম্বেড করে, যাতে কোনও ফাংশন প্যাক করে এই কনস্ট্রাক্টারে, এটিকে একটি রিফাইড ট্যাগ দেওয়ার পরিবর্তে, এর ডিফুনশনেজেশন আটকাতে পারে।

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

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

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