无法理解在sbcl中"row-major-ref"的定义。

3

这个定义来自于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))       
1个回答

5
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内部的专家,但我认为编译器将row-major-aref视为“基本”操作,不会被简化为其他Lisp函数调用,而是转换为机器码。


1
其中一种方法是所谓的Virtual Operations,它们为函数调用提供汇编实现,用于具有特定固定参数类型的调用。它们在compiler/<target>/中被发现,作为带有属性:translateDEFINE-VOP宏调用。该属性说明了它们实现的函数(针对某些参数类型)。 - Philipp Matthias Schäfer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接