Emacs कई एल-फाइलों के साथ तुरंत शुरू करने का प्रबंधन कैसे करता है?


11

जैसा कि हर Emacs'er को पता होगा, मैं वर्तमान में अपने व्यापक डॉट-एमएसीएस कॉन्फ़िगरेशन से पीड़ित हूं। मेरे सभी पैकेज कंटेनरों के भीतर हैं use-package, और मैंने अपने सभी-फाइल्स को बायटेकम्पॉइंट किया है .el। उसके साथ भी, Emacs 6.4 सेकंड में शुरू होता है, और फिर बाकी पैकेज (उनमें से लगभग 40) लोड करता है।

मैं लंबे स्टार्टअप समय को हल करने के अन्य तरीकों के बारे में सोच रहा था, फिर मैंने कुछ देखा। डिफ़ॉल्ट Emacs (उपयोगकर्ता कॉन्फ़िगरेशन के बिना) कई .elपुस्तकालयों का उपयोग करता है, जो हर Emacs के साथ शामिल होते हैं। वे अंदर स्थित हैं \shares\emacs\version number\lisp\

यहां तक ​​कि कई लिस्प फ़ाइलों के साथ, यह एक सेकंड में आरंभ करने का प्रबंधन करता है। जब मैं कई पैकेजों की फाइलों का निरीक्षण कर रहा था जो डिफ़ॉल्ट Emacs के साथ शामिल हैं, तो मुझे कुछ भी असाधारण नहीं मिला जो यह बता सके कि Emacs एक सेकंड के भीतर शुरू करने का प्रबंधन क्यों करते हैं। कोई मुझे बता सकता है कि Emacs कैसे प्रबंधित करता है, यहां तक ​​कि हजारों .el-फाइल्स के साथ भी ?


1
क्या आप :defer tअपनी use-packageघोषणाओं में जहां भी संभव हो उपयोग करते हैं?
चंद्रोदय

7
Emacs में कई कोर लाइब्रेरी प्री-लोडेड हैं , Emacs को बनाते समय उपयोग किए जाने वाले डंप मैकेनिज्म के माध्यम से , जो बहुत सारी चीजों को अविश्वसनीय रूप से जल्दी से लोड करने का भ्रम देता है। देखें C-h i g (elisp) Building Emacsकि क्या आप उस बारे में जानने में रुचि रखते हैं।
फोल्स

2
@ एफिल्स: यह बहुत अच्छा होगा यदि आप अपनी टिप्पणी को एक उत्तर में विस्तारित कर सकते हैं, ऐसा लगता है कि डंप तंत्र का उल्लेख अभी तक एमएसीएस-एसई पर बिल्कुल भी नहीं किया गया है।
पेपरिका

और मेरा 76 है ..
Leu_Grady

लाल शिमला मिर्च: हो गया ..
फिल्स

जवाबों:


9

क्या कोई मुझे बता सकता है कि Emacs कैसे प्रबंधित करता है, यहां तक ​​कि हजारों .el-files के साथ भी?

Emacs "प्रबंधित करता है" जो कि स्टार्टअप पर लोड नहीं करता है, जिससे कोर एप्लिकेशन का लोड नहीं होता है। यह बदले में उपयोगकर्ता को तेजी से कीबोर्ड नियंत्रण वापस करने के प्रभाव के रूप में होता है।

लेकिन इसे कब लोड किया जाता है? उस फ़ंक्शन, मोड, या सुविधा के पहले उपयोग पर।

क्या यह धीमा नहीं है? हाँ, पहले उपयोग पर। वह व्यापार-बंद है। क्या आप emacs स्टार्टअप समय पर या पहले उपयोग में धीमा करना चाहते हैं।

क्या यह ध्यान देने योग्य है? स्टार्टअप के समय में लोड होने में अधिक समय लगता है क्योंकि अन्य मुख्य पुस्तकालय भी लोड होते हैं। लेकिन पहले इस्तेमाल पर यह तेजी से लगता है कि केवल सबसेट फीचर लोड किया गया है।

फिर कोई स्टार्टअप पर भार क्यों उठाएगा? क्योंकि कुछ लोग स्टार्टअप पर अक्सर उपयोग किए जाने वाले पुस्तकालयों को लोड करने के लिए इंतजार नहीं करते हैं, इसलिए एक बार लोड किए जाने के बाद सभी ऑपरेशन तड़क-भड़क वाले प्रदर्शन करते हैं।

मैं कैसे चुन सकता हूं? जैसा कि ड्रू और अन्य लोगों ने इस बहुत ही सवाल के जवाब में कहा है, आप ऑटोलैड और इसी तरह की चालों को नियंत्रित करने के लिए उपयोग कर सकते हैं। लेकिन सबसे महत्वपूर्ण विचार आपका उपयोग पैटर्न होना चाहिए। यदि आप vi जैसे इमैक का उपयोग करते हैं, तो लगातार खोलना और बंद करना, हाँ स्टार्टअप समय स्पष्ट रूप से स्पष्ट हो जाता है। लेकिन दूसरी ओर, यदि आप हर समय चलने वाले एमएसीएस का उपयोग करते हैं, तो 1 सेकंड या 1 मिनट का स्टार्टअप समय ध्यान देने योग्य या महत्वपूर्ण नहीं होगा।

ध्यान दें कि आप परीक्षण, चल रहा है, या अन्यथा वीआईएसी जैसे emacs का उपयोग करते हुए तत्काल स्टार्टअप के लिए बैच मोड या Zile का उपयोग कर सकते हैं ।

मेरी प्राथमिकता स्टार्टअप पर लोड करना है ताकि कोई भी त्रुटि सामने आए। जब मैं अनगिनत बफ़र, मोड, और कंपाइल स्टेट्स को सक्रिय करता हूं, तो ट्रम्प द्वारा प्रबंधित कई कामों के दौरान, किसी भी लोड त्रुटियों से निपटने के लिए नहीं करना पसंद करता हूं। ऐसी स्थितियों में ऑटोलॉग त्रुटियों को डीबग करना बहुत सुखद नहीं है।


10

जब आप शुरू करते हैं तो कई शामिल लाइब्रेरी लोड नहीं होती हैं।

कुछ कमांड आदि ऑटोलॉइड हैं , जिसका अर्थ है कि Emacs उन्हें पहचानता है और उन्हें लोड करना जानता है। जब आप एक आदेश का उपयोग करने की कोशिश करते हैं जो कि ऑटोलेडेड है, तो Emacs उस लाइब्रेरी को लोड करता है जो इसे परिभाषित करता है, अगर यह अभी तक लोड नहीं हुआ है।

आप अपने स्वयं के ऑटोलॉड्स बना सकते हैं, चाहे आपके स्वयं के आदेशों या पुस्तकालयों में आपके द्वारा लिखे गए आदेशों के लिए। Elisp पुस्तिका, नोड देखें AutoLoad


जैसा कि आलसी-लोडिंग के रूप में जाना जाता है, मुझे लगता है? क्या कोई उदाहरण है कि कैसे आलसी-लोडिंग हासिल की जाती है, जिसे केवल तभी लोड किया जाएगा जब इसे कहा जाता है?
रेनेफ्रॉगर

निश्चित नहीं कि तुम क्या पूछ रहे हो। हाँ, आप इसे आलसी लोडिंग कह सकते हैं। एलीस्प मैनुअल में उदाहरण और स्पष्टीकरण हैं। ;;;###autoloadअपने पुस्तकालय में एक कमांड की परिभाषा से ठीक पहले ऑटोलैड कुकी को जोड़ना ( ) इसे ऑटोलॉड परिभाषा देने का एक तरीका है, यह सुनिश्चित करता है कि जब कोई इसे आमंत्रित करता है तो इसकी लाइब्रेरी लोड हो जाएगी।
आकर्षित

... लेकिन उन ऑटोलैड कुकीज़ को कैसे संसाधित किया जाए, यह समझने के लिए उस मैनुअल लिंक को पढ़ें। पैकेज प्रबंधक उन्हें सभी ELPA पैकेजों के लिए संभालता है। अन्यथा आप (autoload...)उन्हें रजिस्टर करने के लिए सीधे अपनी इनिट फ़ाइल में कॉल करेंगे।
फोल्स

आपके दोनों जवाबों के लिए धन्यवाद, इससे बहुत कुछ पता लगाने में मदद मिली!
रेनेफ्रॉगर

9

अन्य उत्तरों के अलावा (जो यह बताता है कि अधिकांश पुस्तकालय वास्तव में केवल मांग पर ही लोड होते हैं), निष्पादन योग्य के भीतर कई कोर योग्य पुस्तकालयों के पूर्व-लोडिंग का मामला भी emacsहै, जो इसे लोड करने का भ्रम प्रदान करता है बहुत सारी चीजें अविश्वसनीय रूप से जल्दी से।

यह एक तथाकथित "नंगे" Emacs का संस्करण चला द्वारा हासिल की है (जो वास्तव में संकलित किया गया है, और जो है ठीक प्रकार से कार्य है, लेकिन केवल elisp दुभाषिया और अन्य मुख्य सी में लिखे कार्यक्षमता शामिल हैं), और लोड करने के लिए है कि कह रहा पहले से लोड किए जाने वाले सभी संभावित पुस्तकालयों को अंत में emacsउन पुस्तकालयों के साथ वास्तविक बाइनरी को "डंपिंग" करने से पहले करना चाहिए ।

यह तंत्र विस्तृत मैनुअल में विस्तृत है:
C-hig (elisp) Building Emacs RET

यदि आपने खुद को Emacs संकलित किया है तो आप इस प्रक्रिया के साथ प्रयोग कर सकते हैं, और अंतिम निष्पादन योग्य वैकल्पिक संस्करणों को डंप भी कर सकते हैं यदि आप चाहें (आमतौर पर अनुशंसित नहीं हैं, लेकिन सुविधा है)।

संकलित temacsबाइनरी को srcनिर्देशिका में पाया जा सकता है , और आप प्रत्येक संस्करण को चलाकर प्रारंभ समय में अंतर की तुलना कर सकते हैं:

$ time ./temacs -l loadup --batch
$ time ./emacs --batch

मेरे सिस्टम पर पूर्व में ~ 4 सेकंड लगते हैं (जिस दौरान 111 लाईब्रेरीज़ लोड होती हैं), जबकि बाद में ~ 0.02 सेकंड लगते हैं।


इस बिंदु को बनाने के लिए बहुत अच्छा @phils।
Emacs यूजर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.