1 điểm bởi GN⁺ 2025-01-20 | 1 bình luận | Chia sẻ qua WhatsApp
  • Vì sao tính năng tự động sửa của Git lại quá nhanh

    • Tính năng tự động sửa của Git chờ 0,1 giây trước khi thực thi một lệnh bị gõ sai.
    • Khoảng thời gian này tương đương với một cái chớp mắt của con người, nên rất khó để phản ứng.
    • Tính năng này bắt nguồn từ sự hiểu nhầm về đơn vị thời gian do người bảo trì Git đề xuất và một cấu hình sai.
  • Tính năng này được thiết kế như thế nào?

    • Theo mặc định, Git không thực thi lệnh bị gõ sai.
    • Hành vi mặc định là gợi ý các lệnh tương tự rồi thoát.
    • Năm 2008, Johannes Schindelin đã đưa vào một bản vá để tìm và thực thi lệnh tương tự.
    • Alex Riesen đã thêm khả năng cấu hình tính năng này thông qua thiết lập help.autocorrect.
    • Đặt help.autocorrect thành 1 sẽ khiến lệnh được thực thi sau 0,1 giây.
  • Giá trị cấu hình phù hợp là gì?

    • Đặt thành 10 sẽ chờ trong 1 giây.
    • Theo tài liệu, các giá trị có thể cấu hình như sau:
      • 0: hiển thị lệnh được gợi ý.
      • số dương: thực thi lệnh sau khoảng thời gian 0,1 giây đã chỉ định.
      • immediate: thực thi lệnh ngay lập tức.
      • prompt: hiển thị lệnh được gợi ý và hiện lời nhắc hỏi có thực thi hay không.
      • never: không thực thi hoặc hiển thị lệnh được gợi ý.
    • Thiết lập prompt có thể là lựa chọn hợp lý nhất.
  • Git đoán như thế nào?

    • Git sử dụng một thuật toán khoảng cách Levenshtein đã được chỉnh sửa đơn giản để đoán lệnh.
    • Nếu vượt quá một ngưỡng khoảng cách nhất định, Git sẽ không đoán.
    • Ví dụ, git bass có thể được đoán thành rebase, nhưng bassa thì không.
  • Bản sửa nhỏ của tôi

    • Tác giả đã viết một bản vá nhỏ để diễn giải giá trị 1 là "ngay lập tức".
    • Người bảo trì Git yêu cầu diễn giải đúng tất cả các giá trị chuỗi boolean.
    • Khi bản vá này được áp dụng, các phiên bản Git trong tương lai sẽ không còn kiểm tra tốc độ phản xạ của bạn nữa.

1 bình luận

 
GN⁺ 2025-01-20
Ý kiến Hacker News
  • Giai thoại Hal Finney khi viết trình thông dịch BASIC cho hệ thống Mattel Intellivision vào thập niên 70 đã rút gọn thông báo lỗi thành "EH?" khá thú vị

  • Vấn đề phát sinh vì tên thiết lập không rõ ràng. Đáng lẽ cần một tên rõ nghĩa như help.autocorrect_enabled

    • Tên thiết lập nên bao gồm đơn vị. Ví dụ, nên đặt là int timeout_msec thay vì int timeout
  • Có vẻ là một thiết kế sai. Nên tránh việc diễn giải lại giá trị thiết lập hiện có để thay đổi hành vi

    • Việc đối số cấu hình của help.autocorrect được đo bằng đơn vị không tiêu chuẩn là không ổn. Tốt hơn nên cấu hình bằng boolean và số thập phân
  • Đây là một ví dụ điển hình của "creeping featurism". Nó gây ra sự phức tạp không cần thiết

  • Việc dùng đơn vị decisecond không được bàn tới. xmobar cũng gặp vấn đề tương tự

    • Những con số nhỏ có thể bị hiểu nhầm là giây thay vì mili giây
  • Nếu đặt help.autocorrect thành 1, nó sẽ tiếp tục sau khi chờ 100ms. Đáng lẽ nên thêm một thiết lập mới

    • innodb_flush_log_at_trx_commit của MySQL cũng có một sai lầm tương tự
  • Khi đặt autocorrect thành 3 giây, nó không phân biệt được hành động nguy hiểm và hành động an toàn, đồng thời làm bẩn lịch sử shell bằng các lệnh gõ sai

    • Sau 1 năm thì quyết định vô hiệu hóa
  • Khi gõ sai lệnh, có thể nhấn ctrl-C ngay lập tức để hủy trước khi timeout 100ms kết thúc

  • Decisecond là đơn vị không tiêu chuẩn. Chỉ định độ trễ bằng mili giây hoặc giây là phổ biến hơn

  • Thời gian phản ứng khác nhau tùy loại kích thích. Thính giác nhanh hơn thị giác, và xúc giác là nhanh nhất (90 - 180 ms)