Common lisp 无法理解“的定义”;行主参考号“;在sbcl中

Common lisp 无法理解“的定义”;行主参考号“;在sbcl中,common-lisp,sbcl,Common Lisp,Sbcl,该定义来自sbcl的src/code/array.lisp。它看起来像一个无限循环?我找不到任何线索。有什么提示吗?谢谢大家! (defun row-major-aref (array index) | #!+sb-doc | "Return th

该定义来自sbcl的src/code/array.lisp。它看起来像一个无限循环?我找不到任何线索。有什么提示吗?谢谢大家!

(defun row-major-aref (array index)                                                  |
  #!+sb-doc                                                                          |
  "Return the element of array corressponding to the row-major index. This is        |
   SETF'able."                                                                       |
  (declare (optimize (safety 1)))                                                    |
  (row-major-aref array index))       

src/compiler/array-tran.lisp
中,您还可以找到以下代码:

(deftransform row-major-aref ((array index))
  `(hairy-data-vector-ref array
                          (%check-bound array (array-total-size array) index)))

我不是SBCL内部结构方面的专家,但我假设编译器将
行主aref
视为“基本”操作,该操作不会简化为其他Lisp函数调用,而是转换为机器代码。

src/compiler/array trans.Lisp
中,您还可以找到以下代码:

(deftransform row-major-aref ((array index))
  `(hairy-data-vector-ref array
                          (%check-bound array (array-total-size array) index)))

我不是SBCL内部结构方面的专家,但我假设编译器将
行主aref
视为“基本”操作,该操作不会简化为其他Lisp函数调用,而是转换为机器代码。

其中一种方法是所谓的VirtualLoperations,它为函数调用提供汇编程序实现,用于具有某些固定参数类型的调用。它们可以在编译器//中找到,作为
DEFINE-VOP
宏调用,属性为
:translate
。此属性表示它们实现了哪些函数(对于某些参数类型)。其中一种方法称为VirtualOPerations,它为函数调用提供汇编程序实现,函数调用用于具有某些固定参数类型的调用。它们可以在编译器//中找到,作为
DEFINE-VOP
宏调用,属性为
:translate
。此属性说明它们实现的函数(对于某些参数类型)。