`বিশুদ্ধকপি` ফাংশনটি কীসের জন্য প্রয়োজন?


23

আমি ব্রাউজ compile.elকরছি এবং আমি এই নির্মাণ লক্ষ্য করেছি :

(defcustom compile-command (purecopy "make -k ")) 

purecopyডক্স রাজ্য:

শুদ্ধকপি source সি উত্স কোডে একটি অন্তর্নির্মিত ফাংশন।

(খাঁটি কপি ওবিজে)

খাঁটি স্টোরেজে অবজেক্ট ওবিজেটির একটি অনুলিপি তৈরি করুন। পুনরাবৃত্তভাবে ভেক্টর এবং কনস সেলগুলির সামগ্রীগুলি অনুলিপি করে। প্রতীকগুলি অনুলিপি করে না। পাঠ্য বৈশিষ্ট্য ব্যতীত স্ট্রিংগুলি অনুলিপি করে।

সুতরাং আমি মনে করি আমি বুঝতে পারি যে এটি কেন প্রয়োজন হতে পারে যদি এটির আশা করা compile-commandহত যে কোনও জটিল তালিকা রয়েছে যা পরবর্তী কোনও তারিখে পরিবর্তনের প্রয়োজন হতে পারে। তবে এটি কেবল একটি সরল স্ট্রিং, সুতরাং কেন purecopyপ্রয়োজনীয়? আরও সাধারণত, যখন purecopyপ্রয়োজন হয়?

উত্তর:


31

purecopy ব্যবহারকারীর কনফিগারেশন বা তৃতীয় পক্ষের লাইব্রেরিতে কখনও প্রয়োজন হয় না । প্রকৃতপক্ষে, যখন কোনও সাধারণ ইম্যাক্স উদাহরণ থেকে কল করা হয় তখন এটি কোনও বিকল্প নেইখাঁটি স্টোরেজ থেকে :

ইমাকগুলি নির্মিত এবং ডাম্প করা হচ্ছে এই ব্যতীত এই ফাংশনটি কোনও বিকল্প নেই ; এটিকে সাধারণত প্রিললোডড লিস্প ফাইলগুলিতে ডাকা হয়।

কিছু পটভূমি তথ্য অনুসরণ করা হয়।

খাঁটি স্টোরেজ

ইমাক্সের একটি দ্বি-স্তরের বিল্ড প্রক্রিয়া রয়েছে। এটি প্রথমে একটি সরল বাইনারি তৈরি করে এবং তারপরে এই বাইনারি চালায়, অন্তর্নির্মিত গ্রন্থাগারগুলির একটি নির্বাচিত সেট লোড করে এবং তারপরে প্রক্রিয়াটির একটি মেমরি চিত্র ফেলে দেয় এবং emacsএই ডাম্প থেকে আসল বাইনারি তৈরি করে ।

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

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

তবে প্রি-লোডেড লাইব্রেরিগুলির জন্য মেমরি চিত্র তৈরি এবং ডাম্প করার সময়, এই লাইব্রেরিগুলি purecopyখাঁটি স্টোরেজগুলিতে বরাদ্দকরণের জন্য নির্দিষ্ট বিষয়গুলিকে "চিহ্নিত" করতে ব্যবহার করতে পারে , সাধারণত যেভাবে Emacs এর পুরো জীবনকালের জন্য প্রয়োজনীয় বস্তু ব্যবহৃত হয়।

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

বিশুদ্ধ সঞ্চয়ের এই ধারণা আরো কারণেই পরিবর্তন হয় .elকিছু বিল্ট-ইন লাইব্রেরি (বিশেষতঃ ফাইল startup.el, subr.elএ গিয়ে Emacs আসলে লোড এরকম লাইব্রেরীর উৎস ফাইলগুলি:, এবং অন্যান্য) কোনো প্রভাব নেই। পরিবর্তে, এটির বাইনারিটিতে তাদের বাইট কোডটি রয়েছে এবং এটি একটি বিশেষ মেমরি অঞ্চল থেকে লোড করে।

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