(declare (type (simple-array bit) arr))
제거는 SBCL을 이용하여 3 배 이상 증가하여 시간을 실행한다. 반면에 :type
을 통해 defclass
매크로에 제공된 유형 정보는 성능에 영향을 미치지 않는 것으로 보입니다.
(defclass class-1() ((arr :type (simple-array bit))))
(defun sample (inst)
(declare (type class-1 inst))
(let ((arr (slot-value inst 'arr)))
(declare (type (simple-array bit) arr)) ;; 3x running time without
(map-into arr #'(lambda (dummy) (if (< (random 1.0) 0.5) 0 1)) arr)))
(let ((inst (make-instance 'class-1)))
(setf (slot-value inst 'arr) (make-array 10000 :element-type 'bit))
(loop for i from 1 to 10000 do (sample inst)))
나는
arr
슬롯
simple-array bit
내가 그것을 사용할 때마다를 선언하지 않고 동일한 성능 이점을 가질 수있는 방법
? 후자는 특히 (내가 아는 한) let
또는 그와 비슷한 방법으로 바인딩을 도입해야하기 때문에 특히 성가시다. 나는 내가 그것을 필요로하는 곳에 (slot-value inst 'arr)
을 쓸 수 없다.
독자를 사용하는 것이 좋았지 만 직접적으로는 효과가 없었습니다. 그러나 클래스와 함수 이름을 사용하는 독자는 다음과 같습니다.'(declaim (ftype (function) (c)) (단순 배열 비트)) c-arr))'. 이것을 적절하게 사용하면': type'도'(declare (type class-1 inst))'뿐만 아니라 생략 될 수 있습니다. –
아마'(declaim (ftype (c) (단순 배열 비트) 함수) (c-arr))''이어야합니다. 둘 다 작동하는 것처럼 보입니다. 이유는 확실하지 않습니다. 이전에 그 양식을 사용하지 않았습니다. –