저는 실시간 그래픽 실험에 common-lisp을 사용하고 있으며 지금까지는 훌륭했습니다. 속도와 cffi와의 쉬운 호환성에 대한 필자의 요구 사항은 '입력 된'배열을 사용한다는 것을 의미합니다. 정말 추악하게 느껴지는 코드 영역 중 하나는 제 행렬 및 벡터 수학 함수의 일반 버전입니다. CLOS 내가 같은 일을하고 배열의 길이에 전문 어차피 같이벡터 및 행렬에 관한 전문
(defun v+ (vec-a vec-b)
(%v+ vec-a vec-b (length a) (length b)))
(defmethod %v+ (va vb (la (eql 3)) (lb (eql 3)))
***CODE HERE***)
이 작동하지만 바로을 느끼지 않는다. 다양한 CL 구현에 대한 확장을 보았고 MOP의 약속에 대해 들었습니다.
필자는 일부 CL 구현에서 기능이 중단 될 것을 두려워했지만이 부분을 벗어났습니다. 최근에는 Closer-to-Mop project을 보았습니다.
핵심 질문 : MOP는 길이를 전문으로하는보다 효율적인 방법을 제공합니까? 내가 집중해야 할 영역/기술이 있습니까?
왜 GF가 디스패치를하지 않을 때 CLOS를 사용 하시겠습니까? –
죄송합니다. v +는 defmethod가 아닌 defun이어야합니다. 그 외에는 당신의 질문을 이해할 수 없다고 생각합니다. % v +는 내가 Menschenkindlein에 대해 언급 한 바와 같이 다양한 길이의 벡터를 처리하기 위해 일반적으로 사용됩니다. 권장 사항은 SO 질문에서 왔습니다. http://stackoverflow.com/questions/11996360/common-lisp-generic-function-specializing-on-array-length . 이 질문에 대한 유일한 이유는 MOP가 주어진 길이의 배열을 전문으로 허용하는지 여부를 찾는 것입니다. 어쩌면 필자는 질문의 배경 부분을 제거하지 않으면 안되며, 유스 케이스의 예일 뿐이다. – Baggers
CLOS 및 MOP를 사용하여 세 가지 벡터 유형에 대한 함수를 작성하는 것은 거의 의미가 없습니다. 당신은 '속도'에 대해 언급 했으므로 인라인 될 수있는 함수를 사용합니다. 이 물건을 쓰는 짧은 방법이 필요하다면 그 매크로를 쓸 것입니다 ... –