মঞ্চস্থ কার্যগুলি কী (ধারণাগত)?


24

সাম্প্রতিক একটি সিএসিএম নিবন্ধে [1], লেখকরা মঞ্চযুক্ত ক্রিয়াকলাপের জন্য একটি বাস্তবায়ন উপস্থাপন করেছেন । তারা শব্দটি এমনভাবে ব্যবহার করেন যেন এটি সুপরিচিত ছিল এবং উল্লেখগুলির কোনওটিরই সুস্পষ্ট প্রবর্তনের মতো মনে হয় না।

তারা একটি সংক্ষিপ্ত বিবরণ দেয় (জোর আমার এবং রেফারেন্স নম্বর পরিবর্তন করা হয়েছে; এটি আসল 22)

প্রোগ্রাম জেনারেশনের প্রসঙ্গে, তাহা এবং শিয়ার্ড প্রতিষ্ঠিত মাল্টিস্টেজ প্রোগ্রামিং (এমএসপি, সংক্ষেপে মঞ্চ) [২] প্রোগ্রামারগুলিকে একটি স্পষ্টরূপে কোনও প্রোগ্রাম এক্সপ্রেশন মূল্যায়ণকে পরবর্তী পর্যায়ে স্পষ্টভাবে বিলম্বিত করতে দেয় (এইভাবে, একটি অভিব্যক্তি মঞ্চায়িত করে)। বর্তমান পর্যায়ে কার্যকরভাবে একটি কোড জেনারেটর হিসাবে কাজ করে যা পরবর্তী পর্যায়ে প্রোগ্রামটি রচনা করে (এবং সম্ভবত কার্যকর করে)।

তবে, তাহা এবং শিয়ার্ড লিখেছেন (জোর আমার):

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

তারা পুরানো কাজের বেশ কয়েকটি উল্লেখের পরিবর্তে অভিযোগ করে যে মঞ্চ কার্যকর হয়, যা ধারণা দেয় যে ধারণাটি আরও পুরানো। তারা পদটির জন্য কোনও রেফারেন্স দেয় না।

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

সুতরাং, মঞ্চায়ন যথাক্রমে কি এই প্রসঙ্গে মঞ্চের ব্যাখ্যা? শব্দটি কোথা থেকে এসেছে?


  1. লাইটওয়েট মডিউলার স্টেজিং: রানটাইম কোড জেনারেশন এবং টি। রম্প্ফ এবং এম। ওডারস্কির দ্বারা সংকলিত ডিএসএলগুলির একটি প্র্যাকমেটিক অ্যাপ্রোচ (2012)
  2. ডাব্লু। তাহা এবং টি। শিয়ার্ড দ্বারা সুস্পষ্ট টীকা সহ মেটাএমএল এবং মাল্টি-স্টেজপ্রোগ্র্যামিং (2000)

আপনি দুটি বিবৃতি মধ্যে কোন বৈপরীত্য দেখতে পান? আমার কাছে তাদের দেখতে দেখতে আলাদা আলাদা জোর দিয়ে তারা একই জিনিস নিয়ে কথা বলছে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

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

জুলিয়া প্রোগ্রামিং ল্যাঙ্গুয়েজ বাস্তবায়ন এবং মেটাপোগ্র্যামিং ডকুমেন্টেশনগুলি @generated functions: julia.readthedocs.org/en/latest/manual/metaprogramming/…
সালচিপাপ

উত্তর:


21

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

আপনার যদি দুটি আর্গুমেন্টের একটি ফাংশন তবে আপনি একটি যুক্তি জানেন, বলুন , তবে আপনি প্রথম যুক্তির জ্ঞান ব্যবহার করে সরাসরি ফাংশনের কিছু গণনা সম্পাদন করতে পারেন। তারপরে আপনি যা রেখে গেছেন তা হ'ল একটি ফাংশন যার গণনা কেবলমাত্র দ্বিতীয়, অজানা, যুক্তির উপর নির্ভর করে।φ(মি,এন)মিφমি(এন)

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

মঞ্চযুক্ত গণনার ধারণা হ'ল প্রথমে the ফাংশনটি সম্পর্কে চিন্তা করা । একে "মঞ্চযুক্ত" ফাংশন বলা হয় কারণ এটি একাধিক পর্যায়ে কাজ করে। একবার আমরা এটিকে প্রথম আর্গুমেন্ট দিলে, এটি বিশেষায়িত ফাংশনের জন্য কোডটি তৈরি করে । এটি "প্রথম পর্যায়"। দ্বিতীয় পর্যায়ে, দ্বিতীয় যুক্তিটি প্রদান করা হয় যা বাকী কাজ করে।φ'মিφমিφমি

সুতরাং, আংশিক মূল্যায়নের কাজটি হল একটি সাধারণ ফাংশন for জন্য একটি পর্যায়যুক্ত ফাংশন রূপান্তর করা । শেরলিস ধারণা করেছিলেন যে এই রূপান্তরটি পূর্ববর্তী আংশিক মূল্যায়ন পদ্ধতির চেয়ে আরও সাধারণ প্রক্রিয়া দ্বারা করা যেতে পারে। "মঞ্চযুক্ত গণনা" বিষয়টি এখন এই জাতীয় সমস্যাগুলির সাথে সম্পর্কিত:φφ'

  • মঞ্চস্থ কার্যগুলি কীভাবে সংজ্ঞায়িত করবেন?
  • মঞ্চযুক্ত কার্যকারিতা সংজ্ঞায়নের জন্য কোন প্রোগ্রামিং ভাষা এবং প্রকারের সিস্টেমগুলি ব্যবহার করা উচিত?
  • এ জাতীয় ভাষার শব্দার্থক শব্দ কী?
  • আমরা কীভাবে মঞ্চস্থ ক্রিয়াকলাপগুলির সুসংহততা এবং সঠিকতা নিশ্চিত করতে পারি?
  • কোন কৌশল স্বয়ংক্রিয়ভাবে বা আধা-স্বয়ংক্রিয়ভাবে মঞ্চযুক্ত ফাংশনগুলি গঠনের জন্য দরকারী?
  • আমরা কীভাবে এই জাতীয় কৌশলগুলির যথার্থতা প্রমাণ করব?

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


φ'φ'

সুতরাং আপনার আংশিক মূল্যায়ন বলতে যা বোঝায় তা হল বহু-পর্যায়ের প্রোগ্রামিংয়ের উপর বিমূর্ততা, অর্থ আংশিক meaningভাল বহু-পর্যায়ের প্রোগ্রামিংকে বোঝায় না তবে বহু-পর্যায়ের প্রোগ্রামিং আংশিকভাবে বোঝায়। ফাংশনাল ভাষায় কারি করানো অগত্যা একাধিক পর্যায় এবং রানটাইম সময়ে কোড উত্পন্ন করার জন্য জড়িত না, তাই আংশিক বিবর্তন এক বা একাধিক পর্যায়ে করা যায়?
অস্বীকার 631

1
বেপারটা এমন না. একটি আংশিক মূল্যায়নকারী একটি সাধারণ প্রোগ্রামকে 2-পর্যায়ের প্রোগ্রামে সংকলন করে এবং তারপরে প্রথম পর্যায়ে চলে। মঞ্চস্থ প্রোগ্রামিংয়ে আপনি বহু মাল্টি প্রোগ্রাম নিজেই লেখেন।
উদয় রেড্ডি

9

যদিও অন্যান্য উত্তরগুলি প্রযুক্তিগতভাবে সঠিক, তবে আমি মনে করি না যে তারা কম্পিউটার বিজ্ঞানীরা মঞ্চায়িত কার্যে কেন আগ্রহী সে সম্পর্কে তারা সঠিক ধারণা দেয়।

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

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

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

সংকলকগণ প্রযুক্তিগতভাবে স্টেজার তবে এটি লক্ষ্যটি বাদ দেয়। আধুনিক মঞ্চের লক্ষ্য হ'ল বিল্ডিং প্রোগ্রামগুলি যা প্রোগ্রামগুলি তৈরি করে সর্বাধিকতর পুনরায় ব্যবহার এবং প্রোগ্রামের নির্মাণকে যেখানে সম্ভব সম্ভব স্বয়ংক্রিয়ভাবে তৈরি করার অনুমতি দেয়। যদি কোনও প্রোগ্রামের এক দিনের কার্যকরী প্রয়োজনীয়তাগুলি প্রোগ্রাম হয় তবে তা দুর্দান্ত হবে।

জার্নেক্কি এবং আইজেনেক্কারের "জেনারেটর প্রোগ্রামিং" দেখুন (আইএসবিএন -13: 978-0201309775)।


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

এই ডিএসএল দৃষ্টিকোণটি মঞ্চায়নকে এক স্তরের (প্রোগ্রামের ভিতরে একটি ডিএসএল সংকলক) সীমাবদ্ধ মনে করে, তাই না?
রাফেল

1
@ রাফেল: এটি আপনার দৃষ্টিভঙ্গির উপর নির্ভর করে। স্পষ্টতই, ধারণাটি যখন উত্স -> এক্সিকিউটেবল অনুবাদ হিসাবে কেবল দেখা হয় তখন কোনও গণনার শক্তি যোগ করে না। আমরা কেবল ডিএস ভাষার জন্য একটি সংকলক তৈরি করতে পেরেছিলাম। এটির শক্তিটি কোথা থেকে আসে তা পুনরাবৃত্তি হয়। ভবিষ্যতে প্রকল্পগুলি দ্বারা ব্যবহৃত এবং প্রসারিত লাইব্রেরিগুলি তৈরি করার সময়, প্রাকৃতিক স্তরগুলি গ্রন্থাগারের সীমানার অভ্যন্তরে উপস্থিত হয়। আপনার কাছে এমন একটি লাইব্রেরি থাকতে পারে যা পুরো সিরিয়ালাইজেশনের জন্য উত্সের বৈশিষ্ট্যগুলিকে উত্সে রূপান্তরিত করে এবং তারপরে অন্য পাঠাগার যা ট্রান্সপোর্ট স্তরটি কিছু প্রেরণের জন্য নির্মিত হয় ...
ex0du5

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

5

প্রশ্নের উত্তর [1] এর জন্য প্রযুক্তিগত দৃষ্টিকোণে উত্তরটি দেওয়া হয়েছে। বিবেচনাধীন সমস্যাটি হ'ল সাধারণ এবং নির্দিষ্ট কোডের মধ্যে উত্তেজনার ক্ষেত্র:

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

অবশ্যই আমরা এই উত্তেজনা সমাধান করতে চাই, এটি সাধারণ কোড এবং নির্দিষ্ট প্রয়োগ বাস্তবায়ন:

আমরা প্রশ্নটি জিজ্ঞাসা করতে পারি: কোডটি কি এমন লেখা সম্ভব যে এটি সাধারণ-উদ্দেশ্য হ'ল তবে তারপরে মৃত্যুদণ্ড কার্যকর হওয়ার সময় এটি স্বয়ংক্রিয়ভাবে নিজেকে পরিস্থিতিটিতে বিশেষীকরণ করে?

এটি (সাধারণ) প্রোগ্রামগুলি রাখার ধারণাকে উত্থিত করেছে (পুনরায়) নির্দিষ্ট পরিস্থিতিতে থাকার জন্য রানটাইমে নিজেকে লিখতে:

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

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

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

এটি হ'ল "মঞ্চায়ন" উপযুক্ত ফাংশন / কোড দেখার একটি উপায় যা গণনা / সম্পাদনের সময়গুলি সনাক্ত করে যা পূর্ববর্তী পর্যায়ের ফলাফলগুলি জানার মাধ্যমে সরল করা যায়। প্রশ্নের প্রথম উদ্ধৃতি হিসাবে "বিলম্ব" গননা সঠিকভাবে পর্যায় পৃথক করতে প্রয়োজনীয় পার্শ্ব প্রতিক্রিয়া হতে পারে, তবে এটি বিন্দু নয়।

রোম্প্ফ এবং ওডারস্কি একটি দ্রুত উদাহরণ হিসাবে দ্রুত ফুরিয়ার রূপান্তর উল্লেখ করেছেন যা শিক্ষামূলক হতে পারে।


  1. শিয়াল এবং হেজহগ: পিটার লি দ্বারা প্রযুক্তিগত দৃষ্টিকোণ (2012)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.