2010-08-06 7 views
4

Elisp 벡터에 대한 질문이 있습니다. 정수 및 문자가 실제로 벡터 내부 또는 참조 (포인터)를 통해 (효율적으로) 저장됩니까? 벡터는 예를 들어, 임의의 객체를 저장할 수 :elisp 벡터 및 문자/정수

(setq v (make-vector 10 nil)) 
(aset v 0 "Hello World") 

을이 경우는 벡터 셀에 0이 문자열에 "Hello World"에 대한 참조 (포인터)를 유지하는 것이 명백하다. 그러나 정수/문자는 어떻습니까?

(aset v 1 ?X) 

실제로 문자 X는 벡터 셀 1에 저장되어 있습니까?

답변

6

C 레벨에서 이맥스 lisp 객체는 태그 비트와 값 비트를 포함하는 단어 크기의 객체입니다. 태그 비트는 값 비트의 해석 방법을 결정합니다. 포인터로 (또는 무엇으로), 또는 정수 또는 문자와 같은 직접 상수로 해석됩니다. 이것은 고수준 언어에 대한 비교적 일반적인 구현 기술입니다.

벡터 (일반) 벡터는 이러한 개체의 배열이므로 정수 또는 문자 벡터의 간접 참조가 없습니다. 문자열과 비트 벡터는 각각 문자 나 부울을 저장할 수있는 대신에보다 컴팩트 한 표현을 제공합니다.

표현의 세부 사항 (얼마나 많은 태그 비트가 있는지, 얼마나 큰 정수가 갈 수 있는지 등등)는 Emacs의 버전과 컴파일 타임 설정에 달려있다. 마법이 발생하는 소스 파일은 src/lisp.h입니다.