ইমাসে নতুন পরামর্শ পদ্ধতির ব্যবহারিক সুবিধা 24.4


53

ইমাস 24.4 একটি নতুন পরামর্শ সিস্টেম নিয়ে আসে। NEWSফাইল বলেছেন:

** নতুন প্যাকেজ nadvice.elহালকা ওজন পরামর্শ সুবিধা দেয়। এটি স্তরযুক্ত:

*** add-function/ remove-function, যা প্রক্রিয়া ফিল্টার বা <foo>-functionহুকের মতো কোনও ফাংশন বহনকারী স্থানে কোড যুক্ত / সরানোর জন্য ব্যবহার করা যেতে পারে ।

*** advice-add/ advice-removeএকটি নামকৃত ক্রিয়াকলাপে পরামর্শের একটি অংশ যুক্ত / সরিয়ে ফেলতে, অনেকটা পছন্দ defadviceকরে।

প্রশ্ন: এই নতুন প্যাকেজের ব্যবহারিক সুবিধা এবং এর কী কী প্রভাব রয়েছে?

আমি নিম্নলিখিত বিষয়গুলিতে সম্বোধন করতে আগ্রহী:

  • আমি যদি কেবল ইমাসকে কাস্টমাইজ করতে পরামর্শ ব্যবহার করি (অ্যাড-অন প্যাকেজগুলি লেখার বিপরীতে), তবে আমার কি নতুন সিস্টেমে স্যুইচ করা দরকার? এটি কি কোনও সময়ে পুরানো ব্যবস্থাটি প্রতিস্থাপন করবে?

  • আমি যে নতুন সিস্টেমটি সম্পাদন করতে পারি না তার সাথে ঠিক কী করতে পারি defadvice?

  • "কোনও ক্রিয়াকলাপ বহনকারী স্থানে কোড যুক্ত / সরান" সক্ষম হওয়ার তাৎপর্য কী?

উত্তর:


57

নতুন পরামর্শ পদ্ধতিতে নিম্নলিখিত সুবিধা রয়েছে:

  • add-function: এটি ব্র্যান্ড নতুন কার্যকারিতা যা কেবল ডিফ্যাডভাইসের অংশ ছিল না। এটা তোলে মধ্যে সংকর এক ধরনের add-hookএবং defadvice। ভবিষ্যতে আরও foo-functionভেরিয়েবল (মাধ্যমে পরিবর্তিত add-function) এবং কম foo-functions(এর মাধ্যমে সংশোধিত add-hook) আশা করুন। এই কার্যকারিতাটি নতুন পরামর্শ ব্যবস্থা বাস্তবায়নের মূল প্রেরণা ছিল, এটি একটি বাগ রিপোর্ট দ্বারা ট্রিগার করা হয়েছিল যাতে বিভিন্ন প্যাকেজের মধ্যে একটি প্রক্রিয়া-ফিল্টার কীভাবে "ভাগ" করা যায় asking

  • বাস্তবায়নের সরলতা: একবার add-functionপ্রয়োগ করা হয়েছিল, advice-addকার্যকারিতা বাস্তবায়নে কেবল 8 কেবি লাগবে যা পরামর্শ.el এর 100KB এর সমস্ত কার্যকারিতা আনবে।

  • নকশার সরলতা: ডিফাডভাইসের বিভিন্ন ধারণা রয়েছে যা সাধারণত সঠিকভাবে এবং / অথবা খুব কমই ব্যবহার করা বোঝা শক্ত। যেমন "সক্ষমকরণ" এবং "সক্রিয়করণ" পরামর্শের মধ্যে পার্থক্য। বা "প্রাক" এবং / বা "সংকলিত" এর অর্থ। হ্যান্ডলিংয়ের ক্ষেত্রেও বিভ্রান্তি রয়েছে ad-do-it, যেমন এটি কলটির পরিবর্তে পরিবর্তনশীল-রেফারেন্সের মতো দেখায় বা (setq ad-return-value ...)কেবল মানটি ফিরিয়ে দেওয়ার পরিবর্তে আপনার স্পষ্টভাবে প্রয়োজন to

  • ডিফাডভাইস বিভিন্ন সমস্যার কবলে পড়ে ম্যাক্রোএক্সপেনশন এবং সংকলন: একটি পরামর্শের মূল অংশটি "কোড" হিসাবে প্রকাশিত হয় না (যা সংকলক এবং ম্যাক্রো এক্সপেন্ডার দেখেন) তবে "ডেটা" হিসাবে প্রকাশিত হয় যা পরে অভিব্যক্তি তৈরির জন্য একত্রিত হয়। সুতরাং ম্যাক্রোকক্স্পেনশনটি দেরিতে ঘটে (যা আপনি পছন্দ মতো জিনিস ব্যবহার করলে বিস্মিত হতে পারে (eval-when-compile (require 'foo))) এবং লেজিকাল-স্কোপিং সঠিকভাবে সংরক্ষণ করা শক্ত।

আপনার নতুন সিস্টেমে স্যুইচ করা দরকার কিনা তা নিয়ে: ভবিষ্যতের কোনও সময় পুরানো ডিফ্যাডভাইসটি থেকে মুক্তি পাওয়ার আমার ইচ্ছা আছে তবে আমি মনে করি এই ভবিষ্যতটি তুলনামূলকভাবে দূরের (এবং এটি প্রথমে সরে যেতে হবে lisp/obsolete, তারপরে পরে টু জিএনইউ ইএলপিএ)।


1
পুরানো পরামর্শ সিস্টেম দ্বারা প্রদত্ত একই যুক্তি-সংশোধন কার্যকারিতা nadvice.el এ যুক্ত করার পরিকল্পনা কি রয়েছে?
অ্যারন মিলার

না, এটি বেশিরভাগই nadvice.el এর পরিপ্রেক্ষিতে কোনও ধারণা দেয় না যেখানে পরামর্শের কাজগুলি পুরানো সাধারণ ফাংশন। তবে একই প্রভাব পেতে আপনি :aroundপরামর্শ ( :filter-argsবা :filter-resultপরামর্শ) ব্যবহার করতে পারেন ।
স্টেফান

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

@ অ্যারোনমিলার: দয়া করে এটিকে একটি পৃথক এসএক্স প্রশ্ন করুন, যাতে এটি এসএক্স মন্তব্যের কৃত্রিম সীমা ছাড়াই আলোচনা করা যায়।
স্টিফান

সম্পন্ন হয়েছে, emacs.stackexchange.com/q/19233/2162 এ । আমি আপনার অনুসরণ নিম্নলিখিত প্রশংসা করি। (আপনি নিজের উত্তরে উল্লিখিত বাগ প্রতিবেদনটি দেখতেও আগ্রহী হব, তবে গুগল বা মেলিং তালিকার সংরক্ষণাগার অনুসন্ধানের মাধ্যমে এটি সন্ধান করতে সক্ষম হইনি। আপনি কি এটির লিঙ্ক করতে চান?)
অ্যারন মিলার

9

সাধারণ ক্রিয়াকলাপ হওয়ার পরামর্শের স্পষ্ট সুবিধাগুলির মধ্যে একটি হ'ল আপনি কোনও সংজ্ঞাটি সাথে ঘুরে দেখতে পারেন find-function

বর্তমানে, কোনও (নতুন ধাঁচের) পরামর্শযুক্ত ফাংশনের জন্য সহায়তা দেখার সময়, এটি পরামর্শের ক্রিয়াকলাপের জন্য সহায়তাটির একটি লিঙ্ক সরবরাহ করে এবং সেখান থেকে উত্সের একটি লিঙ্ক (ফাংশন সহায়তার জন্য যথারীতি) সরবরাহ করে।

পুরাতন সিস্টেমটি ইনস্টিনে ডক্ট্রিংয়ের পরামর্শ দিয়েছিল, তবে কোডটি দেখার কোনও উপায় ছিল না (আমি সাধারণত অবলম্বন করি rgrep)।

(ব্যক্তিগতভাবে আমি সাহায্যটি প্রদর্শন করার জন্য পুরানো এবং নতুন পদ্ধতির সংমিশ্রণ দেখতে চাই, যেহেতু আমি ইনলাইন ডাস্ট্রিংটি পছন্দ করি তবে আমি নিশ্চিত যে এটি সম্ভবত সম্ভব possible


2
হ্যাঁ, এটি খুব খারাপ যে নতুন পরামর্শ সিস্টেম আপনাকে আর বিদ্যমান ডক স্ট্রিংয়ের মতো করতে defadviceদেয় না। দেখুন এই টিপে, Emacs বাগ রিপোর্ট । এটি ঘাটতি।
টানা

8

ফাইল শিরোনাম থেকে:

;;; Commentary:

;; This package lets you add behavior (which we call "piece of advice") to
;; existing functions, like the old `advice.el' package, but with much fewer
;; bells and whistles.

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

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



হ্যাঁ. নতুনটি আলাদা, আরও কিছু নয়। এবং হ্যাঁ, সেখানে প্রচুর ব্যবহার defadviceরয়েছে (এবং এখনও অবিরত থাকবে)।
ড্র হয়েছে

0

একটি জিনিস আমি এখানে উল্লেখ করতে দেখিনি - যদিও কিছু উপায়ে এটি "নতুন" পরামর্শ পদ্ধতির সহজ পদ্ধতির (আরও ভাল মডুলারালিটি এবং "আঠালো") কারণে অন্যান্য উত্তরগুলিতে উল্লেখ করা হয়েছে - এটি হ'ল: ন্যাডভাইস পরামর্শ যুক্ত করা, একত্রিত করা, অপসারণ, পুনরায় অর্ডার করা ইত্যাদি অনেক সহজ

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

আইওডাব্লু, আপনি যেমন নিজের অনুসন্ধানের প্যাটার্নটিকে ক্রমবর্ধমানভাবে পরিবর্তন করেন, তেমনি আপনি একাধিক ফিল্টার ব্যবহার করে আপনার অনুসন্ধানকে পরিমার্জন করতে পারেন।

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

শুধুমাত্র আছে এক পরিবর্তনশীল, isearch-filter-predicate, তাই পরিবর্তন ফিল্টারিং সত্যিই পরিবর্তন মানে একক ফিল্টার সম্পৃক্ত, যা ফাংশন রচনা, predicates মিশ্রন, সংকীর্ণ প্রসারিত, বা অন্যথায় অনুসন্ধান পরিমার্জন করার জন্য পরিমাণ।

তবে ঠিক এটিই ন্যাডভাইস ভাল। সংক্ষেপে, ন্যাডভাইস ফাংশনগুলির সংমিশ্রনের জন্য এতটাই সহজ যে এটি অনুসন্ধান ফিল্টারিংকে ইন্টারেক্টিভভাবে পরিমার্জন করা সহজ করে তুলতে পারে । (এ সম্পর্কে আরও তথ্যের জন্য ডায়নামিক আইসার্ক ফিল্টারিং দেখুন ))

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