1 คะแนน โดย GN⁺ 2025-01-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ทำไมฟีเจอร์แก้ไขอัตโนมัติของ 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 เวอร์ชันในอนาคตจะไม่ทดสอบความเร็วในการตอบสนองของคุณอีกต่อไป

1 ความคิดเห็น

 
GN⁺ 2025-01-20
ความคิดเห็นบน Hacker News
  • เกร็ดเล่าว่าเมื่อ Hal Finney เขียน BASIC interpreter สำหรับระบบ Mattel Intellivision ในยุค 70 เขาเคยย่อข้อความแสดงข้อผิดพลาดเหลือแค่ "EH?" ซึ่งน่าสนใจดี

  • ปัญหาเกิดจากชื่อการตั้งค่าที่ไม่ชัดเจน ควรใช้ชื่อที่ชัดเจนอย่าง help.autocorrect_enabled

    • ชื่อการตั้งค่าควรมีหน่วยรวมอยู่ด้วย เช่น ควรตั้งชื่อเป็น int timeout_msec แทน int timeout
  • ดูเหมือนเป็นการออกแบบที่ผิดพลาด ควรหลีกเลี่ยงการเปลี่ยนความหมายของค่าการตั้งค่าที่มีอยู่เดิม

    • การที่อาร์กิวเมนต์การตั้งค่าของ help.autocorrect ถูกวัดด้วยหน่วยที่ไม่เป็นมาตรฐานนั้นไม่ดีนัก ควรตั้งค่าเป็นแบบบูลีนและทศนิยมจะเหมาะสมกว่า
  • เป็นตัวอย่างที่ดีของ "creeping featurism" ซึ่งก่อให้เกิดความซับซ้อนที่ไม่จำเป็น

  • ไม่มีการพูดถึงการใช้หน่วย deciseconds ทั้งที่ xmobar ก็เจอปัญหาคล้ายกัน

    • ตัวเลขขนาดเล็กอาจถูกเข้าใจผิดว่าเป็นวินาทีแทนที่จะเป็นมิลลิวินาที
  • ถ้าตั้งค่า help.autocorrect เป็น 1 ระบบจะรอ 100ms แล้วทำต่อ ควรเพิ่มการตั้งค่าใหม่ขึ้นมาแทน

    • innodb_flush_log_at_trx_commit ของ MySQL ก็มีความผิดพลาดลักษณะคล้ายกัน
  • เมื่อตั้ง autocorrect เป็น 3 วินาที มันแยกไม่ออกระหว่างพฤติกรรมที่เสี่ยงกับพฤติกรรมที่ปลอดภัย และทำให้ประวัติ shell ปนเปื้อนด้วยคำสั่งที่พิมพ์ผิด

    • หลังจาก 1 ปีจึงตัดสินใจปิดการใช้งาน
  • เมื่อพิมพ์คำสั่งผิด สามารถกด ctrl-C ได้ทันทีเพื่อยกเลิกก่อนหมดเวลา 100ms

  • deciseconds เป็นหน่วยที่ไม่เป็นมาตรฐาน การระบุเวลาหน่วงเป็นมิลลิวินาทีหรือวินาทีเป็นเรื่องที่พบได้ทั่วไปกว่า

  • เวลาในการตอบสนองแตกต่างกันตามประเภทของสิ่งเร้า การได้ยินเร็วกว่าการมองเห็น และการสัมผัสเร็วที่สุด (90 - 180 ms)