Pretty printer 지원 기술
5022 단어 Common Lispxpprettyprintertech
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)
List
의PUSH
와는 시작부터 다르게 Adjustable Array
의VECTOR-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
이 순환行数*要素数+オフセット
에 방문하면.XP
중queue
은 이렇게 실현되었다.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
는 차였고ID
는 THROW
가 되었다.잘못된 번호로 잘못된 종류를 표시하고 구식으로 하는 것에 놀랐지만 조금 재평가했다.
이 오류 ID가 테스트의 망라성에 작용했기 때문이다.
CONDITION
의 유형은 오류의 종류를 나타낼 때 테스트의 망라성에 기여하지 못한 것이 유감입니다.Conclusion.
흙비린내가 최적화되어 감개무량하다.
Reference
이 문제에 관하여(Pretty printer 지원 기술), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/hyotang666/articles/6305f6ad8aec6b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)