Pretty printer 지원 기술

Common Lisp는 언어 사양Pretty Printer에 포함됩니다.Pretty Printer는 매우 대략적인 코드 형식이다.
Common Lisp는 언어 사양에 코드 형식이 포함된 세계에서 매우 드문 언어(?)입니다.

XP.


Common Lisp는 이름과 같이 이미 존재하는 여러 개의 Lisp 처리 시스템 사이에서 코드를 이동적으로 쓸 수 있도록 만들어진 통일된 정의이다.
그 전에 각 처리 시스템은 모두 자신의 Pretty Printer를 가지고 있었지만 이것들은 모두 처리 시스템 내부의 것이기 때문에 사용자에게 개방되지 않았다.
이에 따라 확장 가능Pretty Printer에 대한 건의XP를 제시했다.
(eXtensible Printer의 약기일 수 있지만 자세한 내용은 알 수 없습니다.)
이번에는 XP의 코드가 발굴github에 공개가 됐어요.되어 흥미를 중심으로 포크로 넘어뜨리다되었다.
결과 최적화 등 흥미로운 발견이 많았다고 기술했다.

Adjustable vector.


Common Lisp는 지원Adjustable Array 언어입니다.Adjustable Array는 가변 길이 배열입니다.VECTOR-PUSH-EXTEND를 사용하여 요소를 추가합니다.
* (defvar aa (make-array 1 :adjustable t :fill-pointer 0))
AA

* aa
#()

* (vector-push-extend :a aa)
0

* aa
#(:A)
ListPUSH와는 시작부터 다르게 Adjustable ArrayVECTOR-PUSH-EXTEND에 원소를 첨가한다.
* (vector-push-extend :b aa)
1

* aa
#(:A :B)
위에서 보듯이 원소가 꽉 차면 처리 시스템은 뒤에서 길이를 적당히 연장한다.
변수AA의 제약Adjustable Array은 처음에는 길이1에 의해 정의되었는데, 지금은 길이가 2로 확장되었다.
매우 편리하지만 균형으로 계산량의 증가를 열거할 수 있다.XP 최적화를 위해 모방Adjustable Array의 배열 조작을 실시했다.POSITION,FILL 등 각종 서열 함수부터 AREF 등 배열 조작 함수까지 Adjustable의 배열에 비해 일반적인 배열 방식은 처리 처리 처리 처리 시스템을 더욱 신속하게 처리할 수 있다.
확장 정책은 HASH-TABLE과 비슷하며 최대 길이를 초과한 후 일정 길이를 집중적으로 확보한 후 새로운 배열을 참조합니다.
단점은 요소를 추가할 때 길이 검사 코드를 미리 써야 한다는 것이다.
어디서 검사할지 컨트롤할 수 있다는 장점이 있다.
만약 어떤 함수가 여러 번 수조를 입력 처리한다면, 최종적으로 필요한 길이를 확정하고, 처음에 한 번만 검사하면 충분하다.
이런 세밀한 통제는 자동화가 없기 때문에 할 수 있는 것이다.

Vector queue.


이해하기 편리하도록 RGB 비트맵 이미지의 예를 들어 보세요.
수조에 RGB가 함유되어 있어 각 값RGB을 구성원 변수color의 대상으로 삼으면 원가가 매우 높다.
제작 대상(조합/new/합금)은 비교적 높은 조작이기 때문이다.
따라서 2차원 배열로 각 줄은 color로 간주된다.
이렇게 되면 color 제작 대상이 필요 없어요.
그룹의 인덱스를 통해 각각 RGB 값에 직접 접근합니다.
앞에서 보듯이 XP는 일차 가변 길이의 배열을 가지고 있다.
따라서 XP에서 2차원 방식이 아니라 1차원 방식으로 관리된다.
일차원 배열과 RGBRGBRGB...가 병렬되어 있다고 생각하세요.
color이 순환行数*要素数+オフセット에 방문하면.XPqueue은 이렇게 실현되었다.

Object pooling.


위에서 말한 바와 같이 창설 대상은 매우 비싸다.
따라서 XP 제작된 대상을 버리지 않고 연못에 재사용하도록 설계했다.XP-STRUCTURE의 대상과circularity 검사에 사용된STREAM이 전송되었습니다.

Layered function.

HASH-TABLE에도 기재된 바와 같이 Adjustable Vector에서inner-loop(순환 내부에서 같은 결과를 반복적으로 계산하는 계산)은 철저히 피하도록 설계되었다.
최하층의 함수는 범위 검사를 하지 않는 위험한 것으로 가능한 한 상층에서 한 번 검사를 하면 완성할 수 있는 디자인이다.

Identified error.

XP는 Common Lisp가 현재 형태로 바뀌기 전에 작성되었습니다.
XP,EXTENDED-LOOP,CLOS는 Common Lisp에 포함되기 전에 쓴 것이다.
아주 재미있는 것은 잘못된 처리다.
현재 오류는 그 종류에 따라 정의된 CONDITION-SYSTEM 의 정식이다.
그러나 CONDITION에서 모든 오류XP는 차였고IDTHROW가 되었다.
잘못된 번호로 잘못된 종류를 표시하고 구식으로 하는 것에 놀랐지만 조금 재평가했다.
이 오류 ID가 테스트의 망라성에 작용했기 때문이다.CONDITION의 유형은 오류의 종류를 나타낼 때 테스트의 망라성에 기여하지 못한 것이 유감입니다.

Conclusion.


흙비린내가 최적화되어 감개무량하다.

좋은 웹페이지 즐겨찾기