นักพัฒนาเสนอเพิ่มการรองรับสัญกรณ์วิทยาศาสตร์ให้กับตัวแยกวิเคราะห์จำนวนเต็ม ชุมชนถกเถียงเรื่องความเข้ากันได้แบบย้อนหลัง

ทีมชุมชน BigGo
นักพัฒนาเสนอเพิ่มการรองรับสัญกรณ์วิทยาศาสตร์ให้กับตัวแยกวิเคราะห์จำนวนเต็ม ชุมชนถกเถียงเรื่องความเข้ากันได้แบบย้อนหลัง

นักพัฒนาซอฟต์แวร์คนหนึ่งได้จุดประกายการถกเถียงที่น่าสนใจในชุมชนโปรแกรมเมอร์ด้วยการเสนอให้ฟังก์ชันแยกวิเคราะห์จำนวนเต็มในไลบรารีมาตรฐานรองรับสัญกรณ์วิทยาศาสตร์ เช่น 1E9 เพื่อแสดงจำนวนขนาดใหญ่อย่างหนึ่งพันล้าน ข้อเสนอนี้มีเป้าหมายเพื่อให้ผู้ใช้สามารถป้อนจำนวนกลมขนาดใหญ่ได้ง่ายขึ้นโดยไม่ต้องนับศูนย์

ข้อเสนอหลักและแรงจูงใจ

ข้อเสนอนี้มุ่งเน้นไปที่การปรับเปลี่ยนฟังก์ชันแยกวิเคราะห์สตริงเป็นจำนวนเต็มให้รองรับสัญกรณ์ E สำหรับจำนวนทศนิยม แทนที่จะปฏิเสธข้อมูลนำเข้าอย่าง 1E3 หรือ 5E6 ตัวแยกวิเคราะห์เหล่านี้จะแปลงเป็นค่าจำนวนเต็มที่เทียบเท่า (1000 และ 5000000 ตามลำดับ) นักพัฒนาโต้แย้งว่าสิ่งนี้จะแก้ปัญหาการใช้งานทั่วไปที่ผู้คนมีปัญหาในการนับศูนย์เมื่อป้อนจำนวนขนาดใหญ่ ทำให้ไม่ชัดเจนว่า 10000000 หรือ 1000000000 แสดงถึงหนึ่งพันล้าน

ข้อเสนอนี้รวมถึงข้อจำกัดทางเทคนิคเฉพาะ: จำกัดแมนทิสซาให้เป็นตัวเลขเดี่ยว (1-9) และจำกัดเลขชี้กำลังให้อยู่ในช่วงที่พอดีกับประเภทจำนวนเต็มมาตรฐาน สำหรับจำนวนเต็มที่มีเครื่องหมาย 32 บิต นี่หมายความว่าจะรับค่าสูงสุดถึง 2E9 ในขณะที่ปฏิเสธสิ่งใดที่จะทำให้เกิดการล้น

รูปแบบ E Notation ที่เสนอ

  • Mantissa: หลักเดียว (1-9)
  • Exponent: 0 ถึงช่วงสูงสุดที่ปลอดภัยสำหรับประเภท integer
  • ตัวอย่าง: "1E9" = 1,000,000,000
  • ขีดจำกัดช่วงสำหรับ 32-bit signed: สูงสุด "2E9"

ชุมชนต่อต้านปรัชญาของตัวแยกวิเคราะห์

ชุมชนโปรแกรมเมอร์ได้แสดงความกังวลหลายประการเกี่ยวกับการเปลี่ยนแปลงพฤติกรรมของตัวแยกวิเคราะห์ที่มีมาแต่เดิม ข้อโต้แย้งหลักมุ่งเน้นไปที่วัตถุประสงค์พื้นฐานของฟังก์ชันแยกวิเคราะห์ นักวิจารณ์โต้แย้งว่าตัวแยกวิเคราะห์ควรทำหน้าที่เป็นฟังก์ชันผกผันที่แม่นยำของฟังก์ชันการจัดรูปแบบสตริง - หากฟังก์ชันจำนวนเต็มเป็นสตริงไม่ส่งออกสัญกรณ์วิทยาศาสตร์ ตัวแยกวิเคราะห์ที่สอดคล้องกันก็ไม่ควรรับมัน

งานของตัวแยกวิเคราะห์คือการทำสิ่งที่ตรงข้ามกับการแปลงเป็นสตริงให้แม่นยำที่สุด แหล่งสตริงนั้นไม่ใช่แค่มนุษย์ที่พิมพ์บนแป้นพิมพ์เสมอไป

มุมมองนี้ถือว่ารูปแบบข้อมูลนำเข้าที่ไม่คาดคิดเป็นข้อผิดพลาดที่อาจเกิดขึ้นซึ่งควรจับได้แทนที่จะยอมรับอย่างเงียบ ๆ นักพัฒนาบางคนกังวลว่าการทำให้ตัวแยกวิเคราะห์ยอมรับได้มากขึ้นอาจปกปิดการเสียหายของข้อมูลหรือข้อผิดพลาดในการเขียนโปรแกรม

ความท้าทายในการนำไปใช้ทางเทคนิค

ปัญหาทางเทคนิคหลายประการทำให้ข้อเสนอนี้ซับซ้อน ข้อจำกัดแมนทิสซาตัวเลขเดี่ยวดูเหมือนจะไม่มีเหตุผลสำหรับนักพัฒนาหลายคน ซึ่งตั้งคำถามว่าทำไม 243E9 ไม่ควรถูกต้องหาก 1E9 ยอมรับได้ อย่างไรก็ตาม ผู้เสนอเดิมอธิบายว่าข้อจำกัดนี้ทำให้การตรวจสอบช่วงเรียบง่ายและรักษาประสิทธิภาพของตัวแยกวิเคราะห์

ความกังวลอีกประการหนึ่งเกี่ยวข้องกับความขัดแย้งที่อาจเกิดขึ้นกับการแยกวิเคราะห์เลขฐานสิบหก ซึ่ง 'E' ทำหน้าที่เป็นตัวเลขแทนที่จะเป็นเครื่องหมายเลขชี้กำลัง แม้ว่าผู้เสนอจะโต้แย้งว่าสิ่งนี้ไม่ควรส่งผลต่อตัวแยกวิเคราะห์เฉพาะทศนิยม การอภิปรายนี้เน้นให้เห็นว่าการเพิ่มไวยากรณ์ใหม่สามารถสร้างความคลุมเครือในสถานการณ์การแยกวิเคราะห์หลายรูปแบบได้อย่างไร

ตัวอย่างความยืดหยุ่นของ Parser ปัจจุบัน

  • รูปแบบที่ยอมรับ: "-0", "0000", "01", "+123"
  • Float parsers: "1000", "1E3", "10E2", "0.1E4", "1000.0"
  • ถูกปฏิเสธโดย integer parsers: สัญลักษณ์ทางวิทยาศาสตร์, จุดทศนิยม

ทางเลือกอื่นและบริบทที่กว้างขึ้น

แทนที่จะปรับเปลี่ยนฟังก์ชันไลบรารีมาตรฐาน สมาชิกชุมชนบางคนแนะนำให้นำฟังก์ชันแยกวิเคราะห์แบบกำหนดเองมาใช้สำหรับกรณีการใช้งานเฉพาะ พวกเขาชี้ให้เห็นว่าภาษาโปรแกรมส่วนใหญ่ทำให้การสร้างตัวแยกวิเคราะห์เฉพาะทางบนพื้นฐานของตัวที่มีอยู่เป็นเรื่องค่อนข้างตรงไปตรงมา

การถกเถียงนี้ยังสัมผัสกับการออกแบบส่วนติดต่อผู้ใช้ โดยบางคนแนะนำว่าการตรวจสอบข้อมูลนำเข้าและการจัดรูปแบบควรเกิดขึ้นในระดับแอปพลิเคชันแทนที่จะอยู่ในฟังก์ชันแยกวิเคราะห์ระดับต่ำ แนวทางนี้จะช่วยให้แอปพลิเคชันรับสัญกรณ์วิทยาศาสตร์ในขณะที่รักษาพฤติกรรมตัวแยกวิเคราะห์ที่เข้มงวดสำหรับโค้ดระดับระบบ

บทสรุป

แม้ว่าข้อเสนอนี้จะแก้ไขปัญหาการใช้งานที่แท้จริง แต่ก็เน้นให้เห็นความตึงเครียดระหว่างการทำให้ซอฟต์แวร์เป็นมิตรกับผู้ใช้มากขึ้นและการรักษาพฤติกรรมระบบที่คาดเดาได้ การอภิปรายเผยให้เห็นว่าการเปลี่ยนแปลงที่ดูเหมือนง่าย ๆ ต่อเครื่องมือโปรแกรมพื้นฐานสามารถมีผลกระทบที่กว้างไกลต่อความน่าเชื่อถือของซอฟต์แวร์และความเข้ากันได้ ว่าการรองรับสัญกรณ์วิทยาศาสตร์จะหาทางเข้าสู่ตัวแยกวิเคราะห์จำนวนเต็มมาตรฐานหรือไม่ยังคงต้องติดตาม แต่การถกเถียงนี้ได้ให้ความกระจ่างแก่หลักการสำคัญเกี่ยวกับการออกแบบตัวแยกวิเคราะห์และความเข้ากันได้แบบย้อนหลังอย่างแน่นอน

อ้างอิง: Dear string-to-integer parsers...