在https://www.cliki.net/Naming+conventions页面中我读到:
foo的低级、快速、危险函数,或Lisp系统特定实现
能否有人再次翻译并举例说明这些上下文是什么意思?
foo的低级、快速、危险函数,或Lisp系统特定实现
能否有人再次翻译并举例说明这些上下文是什么意思?
请看此函数:
(defun add (x y)
(+ x y))
这个函数是一个通用加法函数。它支持整数、浮点数、复数和比率作为参数 - 这些都是Lisp中定义的数值类型。
然而,如果你有:
(defun add (x y)
(declare (fixnum x y) (optimize speed (safety 0) (debug 0)))
(the fixnum (+ x y)))
这告诉编译器优化适合装入汇编寄存器的fixnum
值的函数。当您使用编译成汇编的实现时,这会产生非常高效的代码,您可以使用(disassemble (compile 'add))
进行检查。例如,在Allegro CL中:
cl-user(10): (disassemble 'add)
;; disassembly of #<Function add>
;; formals: x y
;; code start: #x10008ae4740:
0: 48 01 f7 addq rdi,rsi
3: f8 clc
4: 4c 8b 74 24 10 movq r14,[rsp+16]
9: c3 ret
%
的函数是某些功能通用接口,甚至可以检查其参数。然后,它会调用底层实现。%
的同一函数可能会以高效的方式实现功能,甚至以平台特定的方式实现。%%
前缀。%
命名约定的情况。