GN⁺: Git Autocorrect가 포뮬러 원 드라이버에게 너무 빠른 이유
(blog.gitbutler.com)-
Git 자동 수정 기능이 너무 빠른 이유
- Git의 자동 수정 기능은 잘못 입력된 명령어를 실행하기 전에 0.1초를 기다림.
- 이는 인간의 눈이 깜빡이는 시간과 비슷하여, 반응하기 어려운 시간임.
- 이 기능은 Git 유지 관리자가 제안한 시간 단위의 오해와 잘못된 설정에서 비롯됨.
-
이 기능은 어떻게 설계되었는가?
- 기본적으로 Git은 잘못된 명령어를 실행하지 않음.
- 비슷한 명령어를 제시하고 종료하는 것이 기본 동작임.
- 2008년, Johannes Schindelin이 비슷한 명령어를 찾아 실행하는 패치를 도입함.
- Alex Riesen이
help.autocorrect
설정을 통해 이를 구성 가능하게 함. -
help.autocorrect
를1
로 설정하면 0.1초 후에 명령어를 실행함.
-
적절한 설정 값은 무엇인가?
-
10
으로 설정하면 1초 동안 기다림. - 문서에 따르면 설정 가능한 값은 다음과 같음:
-
0
: 제안된 명령어를 보여줌. - 양수: 지정된 0.1초 후에 명령어 실행.
-
immediate
: 즉시 명령어 실행. -
prompt
: 제안된 명령어를 보여주고 실행 여부를 묻는 프롬프트 표시. -
never
: 제안된 명령어를 실행하거나 보여주지 않음.
-
-
prompt
설정이 가장 합리적일 수 있음.
-
-
Git은 어떻게 추측하는가?
- Git은 단순한 수정된 Levenshtein 거리 알고리듬을 사용하여 명령어를 추측함.
- 특정 거리 이상이면 추측하지 않음.
- 예를 들어,
git bass
는rebase
로 추측되지만bassa
는 추측되지 않음.
-
나의 작은 수정
-
1
값을 "즉시"로 해석하도록 작은 패치를 작성함. - Git 유지 관리자는 모든 불리언 문자열 값을 올바르게 해석하도록 요청함.
- 이 패치가 적용되면, 미래의 Git 버전에서는 더 이상 반응 속도를 시험하지 않을 것임.
-
Hacker News 의견
-
Hal Finney가 70년대에 Mattel Intellivision 시스템을 위해 BASIC 인터프리터를 작성할 때, 오류 메시지를 "EH?"로 줄였던 일화가 재미있음
-
설정 이름이 명확하지 않아 문제가 발생함.
help.autocorrect_enabled
와 같은 명확한 이름이 필요했음- 설정 이름에 단위가 포함되어야 함. 예를 들어,
int timeout
대신int timeout_msec
로 명명해야 함
- 설정 이름에 단위가 포함되어야 함. 예를 들어,
-
잘못된 설계로 보임. 기존 설정 값을 재해석하여 변경하는 것은 피해야 함
-
help.autocorrect
의 설정 인수가 비표준 단위로 측정되는 것은 좋지 않음. 불리언과 소수로 설정하는 것이 바람직함
-
-
"creeping featurism"의 좋은 예시임. 불필요한 복잡성을 초래함
-
deciseconds 단위 사용이 논의되지 않았음. xmobar도 비슷한 문제를 겪고 있음
- 작은 숫자가 밀리초가 아닌 초로 오인될 수 있음
-
help.autocorrect
설정을 1로 설정하면 100ms 대기 후 계속 진행됨. 새로운 설정을 추가했어야 함- MySQL의
innodb_flush_log_at_trx_commit
도 유사한 실수를 포함함
- MySQL의
-
autocorrect를 3초로 설정했을 때, 위험한 행동과 안전한 행동을 구분하지 못하고 잘못 입력된 명령어로 셸 기록이 오염됨
- 1년 후 비활성화 결정을 내림
-
명령어를 잘못 입력했을 때, 즉시 ctrl-C를 눌러 100ms 타임아웃 전에 취소할 수 있음
-
deciseconds는 비표준 단위임. 밀리초나 초로 지연 시간을 지정하는 것이 더 일반적임
-
반응 시간은 자극 유형에 따라 다름. 청각이 시각보다 빠르고, 촉각이 가장 빠름 (90 - 180 ms)