1P by neo 1달전 | ★ favorite | 댓글 1개
  • Git 자동 수정 기능이 너무 빠른 이유

    • Git의 자동 수정 기능은 잘못 입력된 명령어를 실행하기 전에 0.1초를 기다림.
    • 이는 인간의 눈이 깜빡이는 시간과 비슷하여, 반응하기 어려운 시간임.
    • 이 기능은 Git 유지 관리자가 제안한 시간 단위의 오해와 잘못된 설정에서 비롯됨.
  • 이 기능은 어떻게 설계되었는가?

    • 기본적으로 Git은 잘못된 명령어를 실행하지 않음.
    • 비슷한 명령어를 제시하고 종료하는 것이 기본 동작임.
    • 2008년, Johannes Schindelin이 비슷한 명령어를 찾아 실행하는 패치를 도입함.
    • Alex Riesen이 help.autocorrect 설정을 통해 이를 구성 가능하게 함.
    • help.autocorrect1로 설정하면 0.1초 후에 명령어를 실행함.
  • 적절한 설정 값은 무엇인가?

    • 10으로 설정하면 1초 동안 기다림.
    • 문서에 따르면 설정 가능한 값은 다음과 같음:
      • 0: 제안된 명령어를 보여줌.
      • 양수: 지정된 0.1초 후에 명령어 실행.
      • immediate: 즉시 명령어 실행.
      • prompt: 제안된 명령어를 보여주고 실행 여부를 묻는 프롬프트 표시.
      • never: 제안된 명령어를 실행하거나 보여주지 않음.
    • prompt 설정이 가장 합리적일 수 있음.
  • Git은 어떻게 추측하는가?

    • Git은 단순한 수정된 Levenshtein 거리 알고리듬을 사용하여 명령어를 추측함.
    • 특정 거리 이상이면 추측하지 않음.
    • 예를 들어, git bassrebase로 추측되지만 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도 유사한 실수를 포함함
  • autocorrect를 3초로 설정했을 때, 위험한 행동과 안전한 행동을 구분하지 못하고 잘못 입력된 명령어로 셸 기록이 오염됨

    • 1년 후 비활성화 결정을 내림
  • 명령어를 잘못 입력했을 때, 즉시 ctrl-C를 눌러 100ms 타임아웃 전에 취소할 수 있음

  • deciseconds는 비표준 단위임. 밀리초나 초로 지연 시간을 지정하는 것이 더 일반적임

  • 반응 시간은 자극 유형에 따라 다름. 청각이 시각보다 빠르고, 촉각이 가장 빠름 (90 - 180 ms)