- ความฝันของ C++ แบบหนึ่งเดียวที่ไม่มีภาษาถิ่น (Dialect) ดูเหมือนจะสลายไปนานแล้ว
- มีการถกเถียงกันมากมายเกี่ยวกับอนาคตของ C++ บน Reddit, เว็บไซต์สีส้มแห่งนั้น (HN) และในการประชุมอย่างเป็นทางการของคณะกรรมการมาตรฐาน C++
สถานะปัจจุบันของ C++
- Evolution Working Group (EWG) ของ C++ ตกลงที่จะรับ P3466 R0
- รักษาความเข้ากันได้ในการลิงก์กับ C และ C++ รุ่นก่อนหน้า โดยไม่ทำให้ ABI (Application Binary Interface) พัง
- ไม่ใช้ 'viral annotations'
- ยังคงยึดเป้าหมายที่ขัดแย้งกันคือการไม่ทำให้ ABI พังและหลักการ zero-overhead
- รัฐบาลสหรัฐฯ แนะนำให้เลิกใช้ C++
- หลายหน่วยงาน เช่น CISA, NSA และทำเนียบขาว ได้เผยแพร่คำเตือนเกี่ยวกับการใช้ภาษาที่ไม่ปลอดภัยต่อหน่วยความจำ
- บริษัทเทคโนโลยีขนาดใหญ่กำลังนำ Rust มาใช้
- Microsoft, Google, AWS และรายอื่น ๆ ใช้ Rust อยู่แล้ว
- Google ถึงขั้นพัฒนาเครื่องมือสำหรับการทำงานร่วมกันระหว่าง C++/Rust
- ความขัดแย้งภายในชุมชน C++
- มีข่าวว่า Herb Sutter ออกจาก Microsoft และ MSVC ก็ยังช้าในการรองรับฟีเจอร์ของ C++23
- Google ลดการมีส่วนร่วมในกระบวนการพัฒนา C++ และกำลังพัฒนาภาษาผู้สืบทอด C++ ของตนเอง
- ขาดความเชื่อมั่นต่อกระบวนการของคณะกรรมการมาตรฐาน C++ แบบเดิม
- ฟีเจอร์ modules ยังอยู่ในสภาพที่ไม่สมบูรณ์
- 'โปรไฟล์ความปลอดภัย(‘Safety Profiles’)' อยู่ในสถานะที่ค่อนข้างประหลาด
สองวัฒนธรรมของ C++
- กลุ่มที่ใช้เครื่องมือสมัยใหม่และระบบอัตโนมัติ
- บริษัทเทคโนโลยีขนาดใหญ่อย่าง Google เป็นตัวอย่างสำคัญ
- ใช้มาตรฐาน C++ รุ่นใหม่ (C++17 ขึ้นไป) พร้อมการสนับสนุนจากเครื่องมือ build และ test แบบอัตโนมัติ
- ลงทุนเพื่อรักษาคุณภาพโค้ดและปรับโค้ดเบสให้ทันสมัยอย่างต่อเนื่อง
- กลุ่ม C++ แบบเลกาซี
- โค้ดเบสที่ทำงานอยู่บนสภาพแวดล้อมและเครื่องมือเก่า
- ทำงานต่อไปโดยไม่มีซอร์สโค้ด หรือมีระบบ build ที่ล้าสมัย
- มีต้นทุนการบำรุงรักษาสูง และมีอุปสรรคต่อการทำให้ทันสมัยมาก
- ความแตกต่างหลักคือ เครื่องมือและกระบวนการ
- กลุ่ม C++ สมัยใหม่พึ่งพาเครื่องมืออย่างระบบ build แบบรวมศูนย์, static analyzer, formatter และ linter
- กลุ่มเลกาซีมีประสิทธิภาพการดำเนินงานต่ำกว่า เพราะขาดเครื่องมือและกระบวนการเหล่านี้
ผลลัพธ์และผลกระทบ
- โปรไฟล์ความปลอดภัย
- มีเป้าหมายเพื่อเพิ่มความปลอดภัยโดยไม่ต้องเปลี่ยนโค้ดเลกาซีเดิม
- มุ่งเน้นไปที่การคงไว้ซึ่งโค้ดเดิม มากกว่าความต้องการของ C++ สมัยใหม่
- โมดูล
- ออกแบบมาเพื่อให้นำเข้า header file เป็นโมดูลได้อย่างง่ายดาย
- ถูกออกแบบโดยคำนึงถึงความเข้ากันได้กับโค้ดเลกาซี
- ความแตกแยกของชุมชน C++
- ความต้องการที่ไม่สอดคล้องกันระหว่างกลุ่มสมัยใหม่กับกลุ่มเลกาซี ทำให้ความขัดแย้งในชุมชนรุนแรงขึ้น
- แนวทางแบบอนุรักษนิยมของคณะกรรมการมาตรฐาน C++ ดูเหมือนเป็นความพยายามที่จะบรรเทาความขัดแย้งนี้
มุมมองทางเลือก
- แนวคิดทางเลือกอย่าง Safe C++ ไม่ได้รับการต้อนรับนักในชุมชน
- มีคำวิจารณ์ว่าสมาชิกบางส่วนของคณะกรรมการมาตรฐานยึดติดกับเกณฑ์ด้านสุนทรียะส่วนตัวและต่อต้านการเปลี่ยนแปลง
3 ความคิดเห็น
ตอนนี้ Rust ยังไม่มีระบบนิเวศสำหรับการพัฒนา GUI มากพอ เลยยังรับมาใช้ไม่ได้อยู่ครับ
คงต้องมีเฟรมเวิร์ก GUI ดีๆ ที่ใช้ Rust ออกมาก่อน...
ไม่แน่ใจว่า Rust จะมาแทนที่ C++ ได้หรือไม่
แต่ก็เป็นความจริงที่แทบไม่เห็นโปรเจกต์ C++ ใหม่ ๆ แล้ว...
ดูเหมือนว่าคณะกรรมการ C++ จะตัดสินใจว่าทิศทางที่ให้ความสำคัญกับคุณค่าเดิมของมันมากกว่าการเปลี่ยนแปลงครั้งใหญ่คือสิ่งที่ถูกต้อง
ความคิดเห็นจาก Hacker News
โค้ด C++ ของ Google มักใช้งานไม่ได้กับเวอร์ชันใหม่ และนักพัฒนาก็มักไม่มีความตั้งใจจะแก้ไข เพราะโค้ดของ Google ค้างอยู่กึ่งกลางระหว่างความเก่าและความทันสมัย
แนะนำผู้ทำงานด้านมาตรฐาน C++ ให้สนับสนุนทิศทางปัจจุบันของ C++ และไม่ต้องสนใจเสียงรบกวนบนออนไลน์เกี่ยวกับอนาคตของ C++
อ้างว่ากลุ่มเดียวที่จะยังใช้ C++ คือกลุ่มที่มี legacy codebase ขนาดใหญ่เกินกว่าจะรีแฟกเตอร์ได้
มองว่าระบบ edition ของ Rust ทำงานได้ดีมาก
กังวลว่าข่าวการที่ Herb Sutter ออกจาก Microsoft จะส่งผลไม่ดีต่อ Microsoft
std::spanซึ่งเป็นข้อเสนอของ Microsoft ที่ถูกนำไปใช้โดยตัดการตรวจสอบขอบเขตออก และยืนยันว่าจำเป็นต้องมีความพยายามของ Herbเน้นว่าการทดสอบอัตโนมัติเป็นปัจจัยหลักที่แบ่งแยกสองฝ่าย
อ้างว่าปัจจัยหลักที่ทำให้ C++ เสน่ห์ลดลงคือการไม่มีโมดูล
เปรียบเทียบว่า Herb Sutter เก่งในการสร้างการประนีประนอม แต่ Google กลับผลักดันวาระของตัวเอง
กล่าวว่าลูกค้าที่มี codebase ขนาดใหญ่ไม่ต้องการแก้โค้ดแม้แต่ 1% เพื่อให้ผ่านกฎที่เข้มงวด
อธิบายว่าใน Python และ Javascript/Node/Typescript ก็มีหลายฝ่ายเช่นกัน