แผนการทำงานร่วมกับ C++ อย่างทะเยอทะยานของภาษาโปรแกรมมิ่ง Swift ได้จุดประเด็นการถกเถียงอย่างเข้มข้นในชุมชนนักพัฒนา สะท้อนให้เห็นถึงความขัดแย้งระหว่างฟีเจอร์ที่มองไปข้างหน้าของ Apple กับปัญหาด้านประสิทธิภาพที่มีอยู่ ในขณะที่ Apple ผลักดันความสามารถในการทำงานร่วมกับ C++ อย่างซับซ้อน นักพัฒนากำลังแสดงความกังวลเกี่ยวกับปัญหาพื้นฐานของคอมไพเลอร์ที่ยังคงรบกวนการพัฒนาในชีวิตประจำวัน
ความท้าทายด้านประสิทธิภาพของคอมไพเลอร์
ชุมชน Swift ได้แสดงความคิดเห็นอย่างจริงจังเกี่ยวกับปัญหาของคอมไพเลอร์ในการตรวจสอบประเภทของนิพจน์ที่ซับซ้อน โดยเฉพาะในบริบทของ SwiftUI นักพัฒนารายงานประสบการณ์ที่น่าหงุดหงิดกับข้อผิดพลาดที่มีชื่อเสียงว่า คอมไพเลอร์ไม่สามารถตรวจสอบประเภทของนิพจน์นี้ได้ในเวลาที่เหมาะสม ซึ่งให้คำแนะนำในการแก้ไขน้อยมาก ปัญหานี้มีสาเหตุมาจากระบบอนุมานประเภทของ Swift และการทำงานร่วมกับประเภทการส่งคืนที่ถูกโอเวอร์โหลด ซึ่งนำไปสู่ความซับซ้อนแบบเอกซ์โพเนนเชียลในการตรวจสอบประเภท
ประเด็นปัญหาสำคัญในชุมชนนักพัฒนา:
- ปัญหาด้านประสิทธิภาพการคอมไพล์ของ SwiftUI
- ขาดข้อมูลระบุตำแหน่งข้อผิดพลาดที่แม่นยำ
- ความกังวลเกี่ยวกับความเสถียรของ IDE
- ปัญหาประสิทธิภาพในการตรวจสอบประเภทข้อมูล
- คุณภาพของเครื่องมือพัฒนาเมื่อเทียบกับภาษาโปรแกรมมิ่งสมัยใหม่อื่นๆ
เป้าหมายการทำงานร่วมกับ C++
แม้จะมีข้อโต้แย้ง แต่โครงการทำงานร่วมกับ C++ ของ Apple มีจุดประสงค์เชิงกลยุทธ์ บริษัทมีเป้าหมายที่จะอำนวยความสะดวกในการย้ายโค้ดเบส C++ ที่มีอยู่ รวมถึงโค้ดระดับเคอร์เนล ไปยัง Swift นี่ไม่ใช่เพียงฟีเจอร์เฉพาะทาง แต่เป็นตัวแทนการเปลี่ยนแปลงพื้นฐานในกลยุทธ์แพลตฟอร์มระยะยาวของ Apple การเสนอการทำเครื่องหมายอายุการใช้งานและประเภทที่ไม่สามารถหลบหนีได้ ถูกออกแบบมาเพื่อให้เกิดการทำงานร่วมกันที่ปลอดภัยและมีประสิทธิภาพระหว่างโค้ดเบส Swift และ C++ โดยไม่สูญเสียประสิทธิภาพ
คุณสมบัติการทำงานร่วมกันกับ C++ ที่วางแผนไว้:
- รองรับประเภทข้อมูลที่ไม่สามารถหลีกเลี่ยงได้
- การกำหนดการพึ่งพาตามอายุการใช้งาน
- โหมดการทำงานร่วมกันที่ปลอดภัย
- ความสามารถในการอนุมานคำอธิบายประกอบ
- การปรับปรุงการผสานรวมกับ STL
ความกังวลเกี่ยวกับสภาพแวดล้อมการพัฒนา
การอภิปรายยังได้เน้นย้ำถึงความกังวลที่กว้างขึ้นเกี่ยวกับสภาพแวดล้อมการพัฒนาของ Swift นักพัฒนารายงานปัญหาสำคัญกับ Xcode รวมถึงคอมไพเลอร์ที่หยุดทำงานบ่อย ประสบการณ์การดีบักที่ไม่น่าเชื่อถือ และความจำเป็นในการรีเซ็ตเวิร์กสเปซบ่อยครั้ง ความท้าทายเหล่านี้แตกต่างอย่างชัดเจนกับประสบการณ์การพัฒนาที่นำเสนอโดยภาษาโปรแกรมมิ่งสมัยใหม่อื่นๆ และชุดเครื่องมือของพวกเขา เช่น Rust กับ rust-analyzer
ทิศทางในอนาคต
ในขณะที่ Apple ยังคงพัฒนาความสามารถของ Swift ด้วยฟีเจอร์เช่นการทำงานร่วมกับ C++ ชุมชนสนับสนุนอย่างยิ่งให้แก้ไขปัญหาประสิทธิภาพพื้นฐานของคอมไพเลอร์ สถานการณ์นี้แสดงให้เห็นถึงการแลกเปลี่ยนทางวิศวกรรมแบบคลาสสิกระหว่างการเพิ่มฟีเจอร์ใหม่และการปรับปรุงโครงสร้างพื้นฐานที่มีอยู่ นักพัฒนาบางคนแนะนำว่าโหมดเข้มงวดที่ต้องการการทำเครื่องหมายประเภทเพิ่มเติมอาจช่วยบรรเทาปัญหาประสิทธิภาพการคอมไพล์ได้ แม้ว่าจะต้องมีการสมดุลอย่างระมัดระวังกับความง่ายในการใช้งานที่มีชื่อเสียงของ Swift
การอภิปรายที่กำลังดำเนินอยู่สะท้อนให้เห็นถึงความขัดแย้งที่กว้างขึ้นในวิวัฒนาการของภาษาโปรแกรมมิ่ง: การสร้างสมดุลระหว่างฟีเจอร์ขั้นสูงและการทำงานร่วมกันกับความกังวลด้านประสิทธิภาพและการใช้งานพื้นฐาน เมื่อ Swift ยังคงพัฒนาต่อไป การหาสมดุลนี้จะมีความสำคัญต่อความสำเร็จในระยะยาวทั้งในฐานะภาษาการพัฒนาแอปพลิเคชันและภาษาการเขียนโปรแกรมระบบ
แหล่งอ้างอิง: Safe and efficient C++ interoperability via non-escapable types and lifetimes