Questions tagged «byte-compilation»

适用于Emacs中的Emacs Lisp编译器,该编译器将Lisp代码编译为字节代码,与未编译的Lisp代码相比,执行速度更快。字节编译器读取字节编译的代码。

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)我可以添加到其定义中的表格。通知用户此函数应仅被赋予偶数个参数的信息。 有没有办法告知字节编译器此限制? 如果不是,是否可以使用宏而不是函数?

1
禁止警告:分配给自由变量(和其他变量)
字节编译emacs lisp文件时,如何抑制“分配给自由变量”警告? 实际上,我最感兴趣的是在使用flycheck时将其抑制为特定缓冲区,但是我知道这只是传递给字节编译器。 获取所有可以抑制的警告/错误的列表也将是一件好事。 更新: 为了完整起见,请允许我澄清禁用编译器警告的原因很多(与语言无关)。一些示例:简化将旧代码转换为lint强制框架的过程,以便在实时上下文中运行草稿文件和配方,在解决较高优先级问题的同时消除噪声,或者因为编译器是错误的。

3
用词法绑定的let内部的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’ is not known to be defined. 在我看来,increase-count应该始终在let块末尾调用它之前定义它。不是这样吗?


1
带有defcustom的宏在字节编译时导致“符号值为变量为空”错误
在我的两个包中,我有一个宏,其中的主体依赖于defcustom形式定义的变量。 从Melpa安装软件包时,字节编译以以下结尾: 错误:符号的变量值无效:my-defcustom-variable 然后,通过在缓冲区中打开文件来手动字节编译文件即可。 我尝试使用autoloadCookie,但仍然具有相同的行为。 我在这里错过了重要的事情。

2
elisp文件的字节编译版本
我同时拥有elisp文件.el的字节编译版本(.elc)。我不小心删除了.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是在externa中定义的;库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. 我用-*- lexical-binding: …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.