10 คะแนน โดย GN⁺ 2024-11-26 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ความฝันของ 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 ความคิดเห็น

 
aer0700 2024-11-27

ตอนนี้ Rust ยังไม่มีระบบนิเวศสำหรับการพัฒนา GUI มากพอ เลยยังรับมาใช้ไม่ได้อยู่ครับ
คงต้องมีเฟรมเวิร์ก GUI ดีๆ ที่ใช้ Rust ออกมาก่อน...

 
ndrgrd 2024-11-26

ไม่แน่ใจว่า Rust จะมาแทนที่ C++ ได้หรือไม่
แต่ก็เป็นความจริงที่แทบไม่เห็นโปรเจกต์ C++ ใหม่ ๆ แล้ว...
ดูเหมือนว่าคณะกรรมการ C++ จะตัดสินใจว่าทิศทางที่ให้ความสำคัญกับคุณค่าเดิมของมันมากกว่าการเปลี่ยนแปลงครั้งใหญ่คือสิ่งที่ถูกต้อง

 
GN⁺ 2024-11-26
ความคิดเห็นจาก Hacker News
  • โค้ด C++ ของ Google มักใช้งานไม่ได้กับเวอร์ชันใหม่ และนักพัฒนาก็มักไม่มีความตั้งใจจะแก้ไข เพราะโค้ดของ Google ค้างอยู่กึ่งกลางระหว่างความเก่าและความทันสมัย

    • โค้ด C++ ของ Google อาจเกิด memory corruption ได้จาก state machine และ weak pointer แบบจัดการด้วยตนเอง
    • มองในแง่บวกว่า Google กำลังออกจาก ecosystem ของ C++
    • คิดว่าความสนใจของ Google ต่อ ecosystem ของ Rust จะไม่ใช่เรื่องดีนัก
  • แนะนำผู้ทำงานด้านมาตรฐาน C++ ให้สนับสนุนทิศทางปัจจุบันของ C++ และไม่ต้องสนใจเสียงรบกวนบนออนไลน์เกี่ยวกับอนาคตของ C++

    • แนะนำให้คนที่ต้องการ static lifetime checking ใช้ Rust ไปเลย
    • เสนอว่าถ้าเป็นผู้รับเหมาภาครัฐก็ควรใช้ Rust
    • ยืนยันว่ากระบวนการพัฒนา C++ แบบเดิมที่มีอยู่ยังทำงานได้ดี
  • อ้างว่ากลุ่มเดียวที่จะยังใช้ C++ คือกลุ่มที่มี legacy codebase ขนาดใหญ่เกินกว่าจะรีแฟกเตอร์ได้

    • อีกกลุ่มที่หมดความเชื่อมั่นต่อ WG21 ก็กำลังย้ายไปใช้ภาษาใหม่
    • กล่าวถึงที่ Herb Sutter บอกว่าการเพิ่ม lifetime annotation ให้ C++ จะกลายเป็น "ทางออก" ไปสู่ภาษาอื่น
  • มองว่าระบบ edition ของ Rust ทำงานได้ดีมาก

    • เสนอว่าถ้า C++ มีระบบแบบนี้ด้วย แม้อาจมีข้อจำกัดที่ขอบเขตของโมดูล แต่ก็น่าจะเป็นวิธีที่ทำให้ทั้งสองฝ่ายพอใจได้
  • กังวลว่าข่าวการที่ Herb Sutter ออกจาก Microsoft จะส่งผลไม่ดีต่อ Microsoft

    • มองว่า Herb เป็นคนผลักดันการยอมรับมาตรฐาน C++ และพยายามสร้างวิสัยทัศน์เพื่ออนาคตที่ดีกว่า
    • กล่าวถึง std::span ซึ่งเป็นข้อเสนอของ Microsoft ที่ถูกนำไปใช้โดยตัดการตรวจสอบขอบเขตออก และยืนยันว่าจำเป็นต้องมีความพยายามของ Herb
  • เน้นว่าการทดสอบอัตโนมัติเป็นปัจจัยหลักที่แบ่งแยกสองฝ่าย

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

    • ประเมินว่าถ้ามีโมดูล ก็น่าจะสร้างชุมชน C++ ขึ้นมาได้
  • เปรียบเทียบว่า Herb Sutter เก่งในการสร้างการประนีประนอม แต่ Google กลับผลักดันวาระของตัวเอง

  • กล่าวว่าลูกค้าที่มี codebase ขนาดใหญ่ไม่ต้องการแก้โค้ดแม้แต่ 1% เพื่อให้ผ่านกฎที่เข้มงวด

    • อ้างว่าหลายบริษัทกำลังลงทุนเวลาเพื่ออัปเกรดไปสู่มาตรฐานใหม่
  • อธิบายว่าใน Python และ Javascript/Node/Typescript ก็มีหลายฝ่ายเช่นกัน

    • มองว่า Rust พยายามหลีกเลี่ยงความแตกแยกแบบนี้ แต่แลกมาด้วย learning curve ที่สูงขึ้น
    • กล่าวถึงว่า Go พยายามป้องกันการแบ่งฝ่ายและผลักดันให้มีการยอมรับอย่างกว้างขวาง แต่สุดท้ายก็ต้องเพิ่ม generics เข้ามา