- ในอดีต สภาพแวดล้อมการพัฒนา Ada เคยมีประสบการณ์แก้ปัญหาการจัดรูปแบบโค้ดไว้แล้ว
- นักพัฒนาไม่ได้ทำงานกับโค้ดในรูป ข้อความซอร์สโค้ด โดยตรง แต่ใช้รูปแบบตัวแทนกลาง DIANA (IR) และแต่ละคนสามารถดูโค้ดด้วยการตั้งค่า pretty-printing ตามที่ตนต้องการ
- แม้ในปัจจุบันก็ยังมี ความไม่มีประสิทธิภาพและข้อถกเถียง ที่เกิดซ้ำจาก linter หรือกฎการฟอร์แมต
- ในเวลานั้น เวิร์กสเตชัน Rational R1000 มอบสภาพแวดล้อมและความสามารถด้านการพัฒนาที่ล้ำสมัย
- บทความเสนอไอเดียให้ย้อนดูแนวทางเมื่อหนึ่งรุ่นก่อนในปัญหาการจัดรูปแบบโค้ด เพื่อ เปลี่ยนแปลงแนวปฏิบัติการพัฒนาในปัจจุบัน
ข้อถกเถียงเรื่องการจัดรูปแบบโค้ด – คำตอบจากทศวรรษ 1980
- ผู้เขียนกล่าวถึงประสบการณ์กับ Mr. Paige ครูวิทยาการคอมพิวเตอร์ที่เคยมีส่วนร่วมกับงานคอมไพเลอร์ Ada ตั้งแต่สมัยผู้เขียนเรียนมัธยม
- ในปี 2016 เมื่อผู้เขียนบ่นถึงความไม่สะดวกในการตั้งค่าเครื่องมือ linter และถามว่า “ทำไมเรายังต้องเจอปัญหาแบบนี้อยู่” ก็ได้รับฟังว่าปัญหานี้เคยถูกแก้ไปแล้วตั้งแต่กว่า 40 ปีก่อน
การมาของ Ada และ DIANA
- แทนที่จะเก็บ ซอร์สโค้ดแบบข้อความ นักพัฒนา Ada ใช้รูปแบบตัวแทนกลางชื่อ DIANA (Descriptive Intermediate Attributed Notation for Ada)
- นักพัฒนาแต่ละคนสามารถเปิดดูซอร์สด้วย การตั้งค่า pretty-printing ของตัวเองได้ตามต้องการ
- ไม่มีข้อถกเถียงเรื่องการฟอร์แมตหรือปัญหา linter และในเอดิเตอร์ยังสามารถแก้ไขต้นไม้ของโปรแกรมได้โดยตรง (คล้ายกับ projectional editing ในปัจจุบัน)
Rational R1000 – สภาพแวดล้อมการพัฒนาผู้บุกเบิก
- เวิร์กสเตชัน Rational R1000 มีฟีเจอร์ขั้นสูงในตัวมากมาย เช่น incremental compilation, static analysis, version control, และ debugging
- ระบบนี้ถูกใช้ในโครงการซอฟต์แวร์สำคัญของภาครัฐ เช่น DoD รวมถึงสถานีอวกาศนานาชาติ (ISS) และเครื่องบินขับไล่ F-22 อีกทั้งยังมีส่วนต่อการกำเนิดของ UML
- ตามคำกล่าวของ Grady Booch นั้น R1000 เป็นเครื่องที่ทำงานบน DIANA โดยไม่เก็บซอร์สโค้ด และใช้เพียงการ pretty-print ต้นไม้ DIANA เท่านั้น
ข้อดีของการพัฒนาบนฐาน DIANA
- ไม่จำเป็นต้องมีข้อถกเถียงเรื่องการฟอร์แมต การตั้งค่า linter หรือการทำให้สภาพแวดล้อมเอดิเตอร์เป็นแบบเดียวกัน
- การเร่งความเร็วด้วยฮาร์ดแวร์ทำให้เกิดประสบการณ์การพัฒนาที่ล้ำหน้า เช่น incremental compilation, การรีแฟกเตอร์ที่ทำได้ง่าย, และการรวมงานที่รวดเร็ว
- สิ่งนี้ส่งผลสำคัญต่อประสิทธิภาพการพัฒนาและการทำงานกับระบบขนาดใหญ่
สิ่งที่สะท้อนมาถึงปัจจุบัน
- แม้การคอมไพล์แบบเร่งด้วยฮาร์ดแวร์จะมีความสำคัญลดลง แต่การแก้ปัญหาเรื่องการฟอร์แมตยังคงไม่สมบูรณ์
- แม้แนวทางกระแสหลักจะยังไม่ใช่ projectional editing หรือสภาพแวดล้อมแบบ live แต่ก็น่าถึงเวลาพิจารณานำ แนวปฏิบัติการพัฒนาที่มีประสิทธิภาพมากกว่าและมีข้อถกเถียงน้อยกว่า แบบที่เคยมีในอดีตกลับมาปรับใช้
เอกสารอ้างอิง
- ผู้เขียนอ้างอิงเอกสารและรายงานทางเทคนิคหลากหลายฉบับที่เกี่ยวข้องกับ R1000 ระหว่างการศึกษาหัวข้อนี้
4 ความคิดเห็น
เท่าที่ทราบ ตอนนี้โค้ดที่แชร์กันก็มีฟีเจอร์ที่จัดรูปแบบให้อัตโนมัติด้วยการตั้งค่าที่เป็นมาตรฐานเดียวกันอยู่แล้ว และเหมือนว่าบริษัทต่าง ๆ ก็ใช้งานกันเยอะนะครับ
ประเด็นไม่ใช่การจัดรูปแบบอัตโนมัติ แต่ดูเหมือนว่ากำลังพูดถึงการที่ทั้งแนวคิดว่าการจัดรูปแบบแบบใดแบบหนึ่งเหนือกว่า หรือแม้แต่กระบวนการที่ต้องทิ้งรูปแบบของตัวเองแล้วไปปรับตัวเข้ากับรูปแบบที่ไม่คุ้นเคยนั้น ล้วนเป็นสิ่งที่ไม่จำเป็น เพราะตามตรรกะนี้คือให้เก็บเป็นตัวแทนกลางที่ไม่ยึดติดกับการจัดรูปแบบ แล้วค่อย pretty-print ออกมาตามวิธีที่ผู้ใช้แต่ละคนถนัดได้เอง
ผมแค่อยากจะสื่อว่า ด้วยการจัดรูปแบบอัตโนมัติ เราก็สามารถทำสิ่งเดียวกันได้ด้วยภาษาที่มีอยู่ในปัจจุบันโดยไม่ต้องมีรูปแบบการเขียนระดับกลาง แต่ดูเหมือนว่าผมอธิบายได้ไม่ชัดพอครับ
ความคิดเห็นจาก Hacker News
strcpyในโค้ด C ก็สามารถออกแบบใหม่ทั้งหมดด้วยคำและ syntax ที่ชัดเจนและอ่านง่ายกว่าได้char *argv[]เพื่อวิจารณ์ปัญหาความอ่านง่ายของ declaration ที่ซับซ้อน และยังบอกว่า formatting แบบ C++ เช่นchar* a, bก็อาจทำให้เข้าใจผิดได้ จึงคิดว่าควรหลีกเลี่ยง style แบบนั้นshouldกับunnecessaryก็จะช่วยได้=, หรือใส่ tab เพื่อเน้นระดับความลึกของโครงสร้างก็ได้ ถ้าต้องการเน้นค่าก็อาจจัดตัวเลขชิดขวา แต่ถ้าต้องการเน้นโครงสร้างก็อาจจัด member variable ให้ตรงกันเพื่อให้อ่านง่ายขึ้น มุมที่ผู้เขียนต้องการเน้นในโค้ดอาจต่างกัน และถ้าไม่มี metadata เพิ่มเติม ข้อมูลพวกนี้ก็สกัดจาก AST ไม่ได้setValue([bar, glob], 1)หรือ syntax แบบ comment สำหรับ style override ก็รองรับได้หลากหลาย