我對inlining declamations做了一些粗略的閱讀,並在relevant CLHS pages上閱讀,但不能輕易看到明確的答案。是否可以「內聯」一個「方法」?
當foo
使用defmethod
而不是defun
(後者明確是一個覆蓋的情況)聲明(declaim (inline foo))
是否合理?如果foo
是class
的reader
函數?這種內聯的效果在性能方面是否顯着?它是否以某種方式特定於實現?
對於在嚴格限制條件下的簡單方法,可能有必要重新編寫defun
以實現特定性能,但這有時是困難的或不可能的。有沒有一種通用的優化策略可以使Common Lisp方法在不重寫函數的情況下運行?
請參閱https://github.com/guicho271828/inlined-generic-function – coredump
@coredump - 據此,看起來情況是「內聯泛型函數/方法通常會導致可忽略的性能增益,並且可以得到改進在優化的情況下,代價是使用外部庫,額外的元類聲明以及未優化情況下的性能較差「。它可以從'quicklisp'作爲'內聯泛函函數'使用,所以探索是很經濟的。你知道它是否也觸及'reader' /'accessor'的情況嗎?並且,想要將其作爲答案發布? – Inaimathi
請注意,Common Lisp程序不會調用單個方法,而是調用通用函數。 –