জিনিসটি হ'ল, ফাংশন এনকোডিংয়ের ক্ষেত্রে খুব বেশি কিছু নেই। এখানে মূল বিকল্পগুলি:
টার্ম রাইটিং: আপনি ফাংশনগুলিকে তাদের বিমূর্ত সিনট্যাক্স ট্রি (বা এর কিছু এনকোডিং হিসাবে সংরক্ষণ করেন। ।
বন্ধ: আপনার কোনও ক্রিয়াকলাপ উপস্থাপনের কিছু উপায় রয়েছে, সম্ভবত একটি সিনট্যাক্স ট্রি, সম্ভবত মেশিন কোড code এবং এই ফাংশনগুলিতে, আপনি আপনার যুক্তিগুলি কোনওভাবে রেফারেন্স দ্বারা উল্লেখ করেন। এটি পয়েন্টার-অফসেট হতে পারে, এটি একটি পূর্ণসংখ্যা বা ডি ব্রুইজন সূচক হতে পারে, এটি একটি নাম হতে পারে। তারপরে আপনি একটি ফাংশনটিকে ক্লোজার হিসাবে উপস্থাপন করেন : ফাংশনটির সমস্ত ফ্রি ভেরিয়েবলগুলি সহ একটি ডেটা স্ট্রাকচারের সাথে যুক্ত "ফাংশন" নির্দেশাবলী "(গাছ, কোড ইত্যাদি)। যখন কোনও ফাংশন আসলে প্রয়োগ করা হয়, এটি কোনওরকমভাবে কীভাবে তার উপাত্তের কাঠামোতে, পরিবেশ, পয়েন্টার গাণিতিক ইত্যাদি ব্যবহার করে ফ্রি ভেরিয়েবলগুলি সন্ধান করতে হয় তা জানে knows
আমি নিশ্চিত যে অন্যান্য বিকল্প রয়েছে, তবে এগুলিই মূল বিষয়গুলি এবং আমার সন্দেহ হয় যে প্রায় প্রতিটি বিকল্পই মৌলিক বন্ধকরণ কাঠামোর বৈকল্পিক বা অনুকূলকরণ হবে।
সুতরাং, পারফরম্যান্সের ক্ষেত্রে, ক্লোজারগুলি প্রায় সার্বজনীনভাবে টার্ম রাইটিংয়ের চেয়ে ভাল সম্পাদন করে। তারতম্যগুলির মধ্যে কোনটি ভাল? এটি আপনার ভাষা এবং আর্কিটেকচারের উপর অত্যন্ত নির্ভর করে তবে আমি সন্দেহ করি যে "ফ্রি ওয়ার্সযুক্ত স্ট্রাক্ট সহ মেশিন কোড" সবচেয়ে দক্ষ। এতে ফাংশনটির প্রয়োজনীয় সমস্ত কিছুই রয়েছে (নির্দেশাবলী এবং মান) এবং এর চেয়ে বেশি কিছুই নেই এবং কলিংয়ের ফলে বড় মেয়াদী ট্র্যাভারসাল করা শেষ হয় না।
আমি বর্তমান এনকোডিং অ্যালগরিদম জনপ্রিয় ফাংশনাল ভাষা (হাস্কেল, এমএল) উভয় ব্যবহারে আগ্রহী in
আমি কোনও বিশেষজ্ঞ নই, তবে আমি 99% বেশিরভাগ এমএল স্বাদগুলি সম্ভবত বর্ণিত কিছু অপ্টিমাইজেশান সত্ত্বেও আমি বর্ণিত ক্লোজারগুলির কিছু প্রকরণ ব্যবহার করি। দেখুন এই দৃষ্টিকোণ (সম্ভবত তারিখ আউট) একটি জন্য।
অলস মূল্যায়নের কারণে হাস্কেল কিছুটা জটিল জটিল কাজ করে: এটি স্পাইনলেস ট্যাগলেস গ্রাফ পুনর্নির্মাণ ব্যবহার করে ।
এবং অর্জন করা যায় এমন সবচেয়ে দক্ষ একটিতেও।
সবচেয়ে দক্ষ কি? এমন কোনও বাস্তবায়ন নেই যা সমস্ত ইনপুট জুড়ে সর্বাধিক দক্ষ হবে, সুতরাং আপনি কার্যকরভাবে কার্যকরভাবে বাস্তবায়ন পান তবে প্রতিটি পৃথক পরিস্থিতিতে উন্নত হবে। সুতরাং সর্বাধিক বা স্বল্প দক্ষতার কোনও নির্দিষ্ট র্যাঙ্কিং নেই।
এখানে কোন যাদু নেই। কোনও ফাংশন সংরক্ষণ করার জন্য, আপনাকে এর নিখরচায় মানগুলি কোনওভাবে সংরক্ষণ করতে হবে , অন্যথায় আপনি নিজেই ফাংশনটির চেয়ে কম তথ্য এনকোড করছেন। আংশিক মূল্যায়নের সাহায্যে আপনি কয়েকটি মুক্ত মূল্যবোধকে অপ্টিমাইজ করতে পারেন তবে এটি কার্য সম্পাদনের পক্ষে ঝুঁকিপূর্ণ এবং এটি সর্বদা বন্ধ হয়ে যায় তা নিশ্চিত করার জন্য আপনাকে সতর্কতা অবলম্বন করতে হবে।
এবং, সম্ভবত আপনি স্থানের দক্ষতা অর্জন করতে কিছু ধরণের সংক্ষেপণ, বা চতুর অ্যালগরিদম ব্যবহার করতে পারেন। তবে তারপরে আপনি স্থানের জন্য ট্রেডিংয়ের সময়, অথবা আপনি এমন পরিস্থিতিতে রয়েছেন যেখানে আপনি কিছু ক্ষেত্রে অপ্টিমাইজ করেছেন এবং অন্যদের জন্য ধীর হয়ে গেছেন।
আপনি সাধারণ ক্ষেত্রে উপযুক্ত হতে পারেন, তবে সাধারণ ক্ষেত্রে যা হয় তা ভাষা, অ্যাপ্লিকেশনের ক্ষেত্র ইত্যাদির উপর পরিবর্তন করতে পারে a একটি ভিডিও গেমের জন্য কোডের ধরণের ধরণের সংখ্যা (ক্র্যাঞ্চিং, বৃহত ইনপুট সহ টাইট লুপগুলি) সম্ভবত এর চেয়ে আলাদা সংকলক (গাছের ট্র্যাভারসাল, ওয়ার্কলিস্ট, ইত্যাদি) এর জন্য কী দ্রুত।
বোনাস পয়েন্ট: এমন কোনও এনকোডিং রয়েছে যে মানচিত্রের ক্রিয়াকলাপটি দেশীয় পূর্ণসংখ্যার (সি তে সংক্ষিপ্ত, আন্ত ইত্যাদি) তে এনকোড করা পূর্ণসংখ্যা। এটা কি সম্ভব?
না, এটি সম্ভব নয়। সমস্যাটি হ'ল ল্যাম্বদা ক্যালকুলাস আপনাকে শর্তাদির অন্তর্ভুক্ত করতে দেয় না। কোনও ফাংশন যখন চার্চ-অঙ্কের মতো একই ধরণের যুক্তি নিয়ে থাকে তখন সেই সংখ্যার সঠিক সংজ্ঞা পরীক্ষা না করেই তাকে কল করতে সক্ষম হওয়া প্রয়োজন। চার্চের এনকোডিংগুলির সাথে এটিই হল: আপনি কেবল তাদের সাথে যা করতে পারেন তা হ'ল তাদের কল করুন এবং আপনি এটির সাথে দরকারী সমস্ত কিছু সিমুলেট করতে পারেন, তবে কোনও ব্যয় ছাড়াই নয়।
আরও গুরুত্বপূর্ণ, প্রতিটি সম্ভাব্য বাইনারি এনকোডিংটি পূর্ণসংখ্যাগুলি দখল করে। সুতরাং যদি ল্যাম্বডাসকে তাদের পূর্ণসংখ্যা হিসাবে উপস্থাপন করা হয় তবে আপনার চার্চবিহীন-লম্বা লম্বডাসকে উপস্থাপন করার উপায় নেই! বা, আপনি একটি ল্যাম্বদা একটি সংখ্যা বা না তা বোঝানোর জন্য একটি পতাকা প্রবর্তন করতেন, তবে তারপরে আপনার যে কোনও দক্ষতা চান সেটি সম্ভবত উইন্ডোটি চলে গেছে।
সম্পাদনা: এটি লেখার পর থেকে, আমি উচ্চ-অর্ডার ফাংশনগুলি বাস্তবায়নের জন্য তৃতীয় বিকল্প সম্পর্কে সচেতন হয়েছি: ডিফানশনালাইজেশন । এখানে প্রতিটি ফাংশন কল একটি বড় switch
বিবৃতিতে রূপান্তরিত করে, ফাংশন হিসাবে কোন ল্যাম্বডা বিমূর্ততা দেওয়া হয়েছিল তার উপর নির্ভর করে। এখানে ট্রেডঅফ হ'ল এটি একটি সম্পূর্ণ প্রোগ্রাম রূপান্তর: আপনি আলাদাভাবে অংশগুলি সংকলন করতে পারবেন না এবং এইভাবে একসাথে লিঙ্ক করতে পারবেন না, কারণ আপনার আগে সময়ের আগে ল্যাম্বডা বিমূর্তির সম্পূর্ণ সেট থাকা দরকার।