คำถามติดแท็ก byte-compilation

4
ฉันสามารถหลีกเลี่ยงไฟล์ elisp ที่ล้าสมัยแล้วได้หรือไม่?
บางครั้งเมื่อฉันเริ่ม Emacs ฉันได้รับข้อความเช่น ซอร์สไฟล์ `/home/USER/.emacs.d/elpa/....el 'ใหม่กว่าไฟล์ที่คอมไพล์ด้วยไบต์ นอกจากนี้บางครั้งฉันแก้ไขแพ็คเกจที่ฉันกำลังพัฒนาและลืมคอมไพล์ใหม่ เมื่อฉันพยายามโหลดไฟล์ใหม่ฉันต้องใช้เวลาสักครู่กว่าจะรู้ว่า Emacs ยังคงใช้ไฟล์ที่คอมไพล์เก่าอยู่ มีวิธีที่ฉันสามารถบอกให้ Emacs หลีกเลี่ยงไฟล์ที่คอมไพล์ด้วยไบต์ที่เก่ากว่าไฟล์ต้นฉบับที่เกี่ยวข้องหรือไม่?

2
ฟังก์ชั่นหรือมาโครสามารถระบุคำเตือนของคอมไพเลอร์ไบต์ได้หรือไม่?
ฉันกำลังเขียนฟังก์ชั่นซึ่งโดยหลักการแล้วจะมีจำนวนของข้อโต้แย้งโดยพลการ อย่างไรก็ตามในทางปฏิบัติก็ควรเท่านั้นที่เคยได้รับการผ่าน แม้จำนวนของการขัดแย้งและจะก่อให้เกิดผลที่ไม่พึงประสงค์อย่างอื่น นี่คือตัวอย่างจำลองสำหรับบริบท: (defun my-caller (&rest args) (while args (call-other-function (pop args) (pop args)))) เมื่อไฟล์ elisp ถูกคอมไพล์ด้วยไบต์คอมไพเลอร์ไบต์จะส่งคำเตือนเมื่อเห็นฟังก์ชันที่ถูกเรียกใช้ด้วยจำนวนอาร์กิวเมนต์ที่ไม่ถูกต้อง เห็นได้ชัดว่ามันจะไม่มีทางเกิดขึ้นmy-callerเพราะมันถูกกำหนดให้ใช้หมายเลขใด ๆ ถึงกระนั้นก็อาจจะมีคุณสมบัติสัญลักษณ์ที่ฉันสามารถตั้งค่าหรือ(declare)รูปแบบที่ฉันสามารถเพิ่มความหมายของมัน สิ่งที่ต้องแจ้งให้ผู้ใช้ทราบว่าฟังก์ชั่นนี้ควรได้รับจำนวนอาร์กิวเมนต์ที่เท่ากัน มีวิธีแจ้ง byte-compiler ของข้อ จำกัด นี้หรือไม่? ถ้าไม่ใช่มันเป็นไปได้ไหมที่มีแมโครแทนที่จะใช้ฟังก์ชั่น

1
ไม่แสดงคำเตือน: การมอบหมายให้กับตัวแปรอิสระ (และอื่น ๆ )
ฉันจะระงับคำเตือน "การมอบหมายให้กับตัวแปรอิสระ" ได้อย่างไรเมื่อไบต์รวบรวมไฟล์ lisp emacs? จริงๆแล้วฉันสนใจที่จะระงับมันสำหรับบัฟเฟอร์เฉพาะเมื่อใช้ flycheck แต่ฉันเข้าใจว่านี่เป็นเพียงการส่งผ่านไปยังคอมไพเลอร์ไบต์ นอกจากนี้ยังเป็นการดีที่จะได้รับรายการคำเตือน / ข้อผิดพลาดทั้งหมดที่สามารถระงับได้ UPDATE : เพื่อความสมบูรณ์ขอให้ฉันชี้แจงว่ามีเหตุผล (ภาษาที่ไม่เชื่อเรื่องพระเจ้า) มากมายที่จะปิดการใช้งานคำเตือนของคอมไพเลอร์ ตัวอย่าง: เพื่อลดความยุ่งยากในการเปลี่ยนรหัสดั้งเดิมให้เป็นเฟรมเวิร์กที่บังคับใช้ผ้าสำลีเพื่อลบไฟล์และสูตรอาหารให้ทำงานภายในบริบทสดเพื่อลบเสียงรบกวนขณะแก้ไขปัญหาที่มีลำดับความสำคัญสูงกว่าหรือเพราะคอมไพเลอร์ผิด

3
Defun ภายในให้กับคำศัพท์ผูกพันให้เตือนไบต์รวบรวม "ฟังก์ชั่นไม่เป็นที่รู้จักที่จะกำหนด"
ฉันต้องการได้รับผลกระทบของตัวแปรคงที่โดยใช้defunด้านในของletกับการผูกศัพท์เพื่อสร้างการปิด อย่างไรก็ตามเมื่อทำการคอมไพล์ไฟล์ฉันได้รับคำเตือน ฉันกำลังทำสิ่งผิดปกติหรือไม่ถ้าไม่มีวิธีระงับคำเตือนนี้หรือไม่? ฉันสร้าง MCVE แล้ว: ;; -*- lexical-binding: t -*- (let ((count 0)) (defun increase-count () (interactive) (setq count (1+ count)) (message "Count is: %d" count)) ;; The warning happens here. (increase-count)) รหัสทำงานได้ตามที่คาดไว้: ฟังก์ชันจะincrease-countพิมพ์ "Count is: n" โดยที่ n เพิ่มขึ้นทุกครั้งที่เรียกใช้ อย่างไรก็ตามเมื่อคอมไพล์ไฟล์นี้ฉันได้รับคำเตือนต่อไปนี้: In end of data: mcve.el:11:1:Warning: the function ‘increase-count’ …

2
แมโครถูกขยายเมื่อรวบรวมไฟล์หรือไม่?
ฉันมีมาโครที่ต้องขยายในทุก ๆ อินสแตนซ์ของการใช้งานคอมไพล์เวลา มีวิธีที่ฉันสามารถระบุให้เป็นเช่นนั้นโดยไม่ต้องผ่าน codebase และตัดสายแต่ละอย่างด้วยeval-when-compileหรือไม่

1
มาโครที่มี defcustom ทำให้เกิดข้อผิดพลาด“ ค่าของสัญลักษณ์ในฐานะตัวแปรถือเป็นโมฆะ” เมื่อรวบรวมไบต์
ในสองแพคเกจของฉันฉันมีแมโครที่ร่างกายขึ้นอยู่กับตัวแปรที่กำหนดในdefcustomรูปแบบ เมื่อติดตั้งแพ็คเกจจาก Melpa การรวบรวมไบต์จะสิ้นสุดด้วย: ข้อผิดพลาด: ค่าของสัญลักษณ์ในฐานะตัวแปรถือเป็นโมฆะ: my-defcustom-variable จากนั้นคอมไพล์ไฟล์ด้วยตนเองโดยการเปิดไฟล์ในบัฟเฟอร์ทำงาน ฉันลองใช้autoloadคุกกี้ แต่ยังคงมีพฤติกรรมเหมือนเดิม ฉันพลาดสิ่งสำคัญที่นี่

2
เวอร์ชันที่คอมไพล์ด้วยไฟล์ elisp
ฉันมีทั้ง.elไฟล์รวบรวมและเวอร์ชันไบต์ ( .elc) ของ elisp ฉันลบ.elไฟล์โดยไม่ตั้งใจ ฉันสามารถดึง.elไฟล์จาก.elcเวอร์ชันได้หรือไม่ เป็น.elcไฟล์ที่ไม่มี.elไฟล์ทำงานหรือไม่?

1
การจัดการกับ“ คำเตือน: การกำหนดให้กับตัวแปรอิสระ” เมื่อไลบรารีบางอย่างอาจหายไปจากการออกแบบ
การรวบรวมไบต์ของโหมดของฉัน: (defun dict-setup-expansions () "Add `dict-mode' specific expansions." (set (make-local-variable 'er/try-expand-list) (list #'dict-mark-article))) ให้คำเตือน: Warning: assignment to free variable `er/try-expand-list' นี่เป็นสถานการณ์ปกติเพราะer/try-expand-listมีการกำหนดไว้ในภายนอก ห้องสมุดexpand-regionซึ่งอยู่ที่http://elpa.gnu.org โหมดของฉันลงทะเบียนส่วนขยายไปยังexpand-regionไลบรารี แต่มันก็โอเคที่จะใช้โหมดของฉันโดยไม่มีexpand-regionโหมด ฉันคิดว่าวิธีที่เหมาะสมในการจัดการกับคำเตือนคือการเพิ่มการประกาศ: (defvar er/try-expand-list) defvar เอกสารพูดว่า: The `defvar' form also declares the variable as "special", so that it is always dynamically bound even if `lexical-binding' is t. …

2
`คำเตือน (bytecomp) 'ค่อนข้างคลุมเครือ - ฉันจะขอข้อมูลเพิ่มเติมได้อีกไหม
เมื่อฉันเริ่ม emacs ฉันจะได้รับคำเตือนการรวบรวมไบต์จำนวนหนึ่งในหน้าต่างที่ปรากฏขึ้น: Warning (bytecomp): `interactive-p' is an obsolete function (as of 23.2); use `called-interactively-p' instead. [7 times] Warning (bytecomp): Use `with-current-buffer' rather than save-excursion+set-buffer ฉันจะได้รับ emacs เพื่อบอกตำแหน่งให้ฉันได้ไหม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.