왜 (포인트-분)이 1보다 훨씬 인기가 있습니까?


16

Emacs Git 저장소에서 모든 Emacs Lisp 파일을 검색하여 (goto-char (point-min))3621 회 (goto-char 1)발생하고 31 회 발생했습니다. 개인적으로, 나는 많은 것을 (point-min)보지만 아무도 보지 1못합니다. 많은 경우에도 지역이 좁아지지 않았 음을 100 % 확신합니다. 그래서 내 질문은 : 좁은 버퍼에서도 (point-min)여전히 선호 1됩니까?

내가 추측 1보다 더 빨리 없습니다 (point-min)때문에, 그것이 얼마나 약간 더 이잖아요 1일정 동안은 (point-min)함수 호출이다. 또한 1 자 대 11 자 1보다 훨씬 짧습니다 (point-min).


2
"지역이 좁아지지 않았다고 100 % 확신 하는가? 예를 들자면 확대 직후에 의미가있는 것 같습니까? 정말"많은 사례 "입니까?
Omar

1
난 항상 ... 0 버퍼의 시작을 생각
오마이 마지드에게

답변:


28

버퍼가 좁아지지 않았다는 것을 어떻게 알 수 있습니까?

함수를 호출하기 직전에 확장하지 않으면 확신 할 수 없습니다. 또한 "훌륭한 소프트웨어"는 종종 "저자가 상상 한 적이없는 방식으로 사용되는"것으로 정의되므로 항상 코드를 비정상적으로 사용할 수 있도록 준비해야합니다.

코드 가독성

당신이 글을 쓸 때 (goto-char 1), 6 개월 후에 당신을 포함하여 코드를 읽는 사람은 귀중한 brainpower 사고를 할 것입니다

  • "버퍼가 좁혀지지 않았다는 것을 어떻게 알 수 있습니까?" 과
  • "첫번째 문자는 0 또는 1입니까?"

기본적으로, 당신이 (widen)직전이 아니라면 버퍼가 좁아지지 않았다고 확신하는 이유를 설명해야합니다.

비용은 사소하다

코드를 프로파일 링하고 달리 발견하지 않는 한 여기에 드는 비용이 사소한 것으로 가정합니다. ELisp이 수행하는 다른 모든 것 (네트워크, 디스크 액세스, 심지어 문자열 일치)과 비교할 때 (point-min)의미있는 비용이 들지 않습니다 ( 더 저렴할 수도 있습니다 ( Stefan의 답변 참조)).


2
+1, 특히 예상치 못한 방식으로 가능한 사용을 강조하고 다른 상황에서 재사용 할 수 있도록 강조합니다. 사용하는 함수 point-min는 일반적으로 사용하는 함수 보다 일반적입니다. 일반적으로 1영역이 좁아 졌는지 여부에 관계없이 작동합니다.
Drew

19

외관에도 불구하고 sds의 답변 (완전히 동의 함)을 보완하는 (point-min)것이 1. 실행 속도 측면에서 내 테스트에는 측정 가능한 차이가 없지만 크기 측면에서 볼 수 있습니다.

ELISP> (byte-compile '(lambda () (goto-char (point-min))))
#[nil "eb\207" [] 1]

ELISP> (byte-compile '(lambda () (goto-char 1)))
#[nil "\300b\207" [1] 1]

ELISP> 

그 때문이다 point-min자체 바이트 코드를 가지고 있으며, 따라서 인코딩되고 다른 함수 호출에 비해 매우 효율적으로 실행된다.

물론, point-min내가 사용해야하는 또 다른 이유 는 역사적 선택이 1실수 라고 생각 하기 때문입니다 (버퍼는 0부터 시작해야 함).


1
당신이주는 이유는 바이트 코드 point-min가 약간 작기 때문입니까? 꽤 귀찮은 이유처럼 보입니다. 왜 그 점을 중요시합니까? 아니면 당신의 대답은 실제로 주석으로 의미되었습니다. 하나가 다른 것보다 성능이 우수하거나 1더 작은 바이트 코드 를 생성 한다는 가정을 수정하기 위해 ?
Drew
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.