Bjarne Stroustrup ผู้สร้าางภาษา C++ เขียนบันทึกถึงกรรมการมาตรฐานภาษา C++ หรือ WG21 ระบุว่าการรองรับมาตรฐานภาษาปลอดภัยต่อบั๊กหน่วยความจำเป็นเรื่องเร่งด่วน เพราะตอนนี้ภาษา C++ กำลังถูกโจมตีอย่างไม่เคยมีมาก่อน
แม้จะไม่ได้พูดถึงภาษาคู่แข่งอื่น แต่ก็อนุมานได้ว่า Stroustrup กำลังพูดถึงภาษา Rust ที่ได้รับความนิยมสูงขึ้นอย่างรวดเร็ว จากการรองรับการเขียนแบบปลอดภัยจากบั๊กหน่วยความจำ
ภาษา C++ นั้นที่จริงแล้วมีการเสนอแนวทางบังคับให้เขียนโค้ดอย่างปลอดภัยออกมาหลายโครงการแล้ว เช่น TrapC หรือ Safe C++ ตัว Stroustrup เองก็เสนอมาตรฐาน Profiles ที่สามารถกำหนดเงื่อนไขปิดบั๊กหน่วยความจำด้วยการกำหนด Type safety, Pointer safety, และ ownership ได้
ข้อดีสำคัญของการพัฒนาภาษา C++ ให้รองรับการเขียนโค้ดอย่างปลอดภัยได้ คือโครงการต่างๆ สามารถบังคับรูปแบบการเขียนโค้ดแบบใหม่นี้ทีละส่วนไปได้ ไม่จำเป็นต้องเขียนโค้ดใหม่ทั้งหมด
ที่มา - The Register
ข้อเสนอของ Stroustrup ในการเพิ่ม Profiles เพื่อบังคับการเขียนโค้ด C++ อย่างปลอดภัยเมื่อปี 2023
Comments
ก็จริงของแก่ เพราะ programmer บางคนก็ไม่ค่อยใส่ใจเท่าไหร่หรือบางคนเน้นขอให้งานเสร็จก่อน
ผมเข้าใจเลยนะครับ ถ้าหากว่าโครงการใหม่ๆเขียนในสเปคของ TOR เลยว่าต้องใช้ภาษา memory safe เท่านั้นและตัด C++ ออกตั้งแต่ต้น โดยที่ตัวภาษาเองก็มีวิธีการให้เขียนแบบ memory safe (ได้ระดับที่ดีพอ) คนที่อยากใช้ C++ ก็จะแบบว่า อะไรว๊า
คือเชื่อว่าทางผู้ดูแล C++ รู้ดีว่าภาษาต้องการฟีเจอร์ด้านนี้ แต่ในขณะเดียวกัน C++ ก็ถือเป็นหนึ่งในภาษาหลักที่พัฒนาระบบคอมพิวเตอร์มาอย่างยาวนาน ทำให้ภาษามีหน้าที่ต้องซัพพอร์ตโค๊ดของโครงการเหล่านั้นด้วย การจะปรับโครงสร้างภาษาเพื่อให้เน้นความปลอดภัยจากบั๊กหน่วยความจำเป็นสิ่งที่ทำได้ยาก
ทั้งนี้ โครงการใหม่ๆที่อาจจะเขียนไว้เลยว่าต้องการให้ implement ด้วย Rust เลย ก็มีสิทธิ์ทำได้เหมือนกัน
..: เรื่อยไป
แม้ภาษาต่ภาษา C ก็ memory safety ได้ถ้าคนเขียนมี วินัย/จรรยาบรรณ
แต่ programmer หลายคน เขียนโดยไม่คำนึง หรือคำนึงแต่ไม่เข้าใจ
ก็สมควรไปอยู่ในกรงไปใช้ Rust แค่โดนจำกัดความอิสระ ทางความคิด goto ก็ไม่ให้ใช้, การ access raw pointer เป็นเรื่องต้องห้าม learning curve เป็นต้ว S (expert คนเดียวกัน จะใช้ Rust เขียน program ให้ efficiency ได้ยากกว่า C/C++)
C++ นี้ document เยอะมากๆๆๆๆ เยอะจนคนที่คิดว่าตนเข้าใจ ไม่เข้าใจ เพราะอ่านไม่หมดมันเยอะไป
C นี้ต้อง DIY แทบทุกอย่างเอง
ทุกภาษาที่จะมีติ่ง (แต่ของ C ไม่ค่อยเจอ) อาการเหมือนสาวกของลัทธิอะไรสักอย่าง ที่พยายามแพร่ความเชื่อของตน แต่สาวกเหล่านั้น จะมีสิ่งหนึ่งเหมือนกันคือ
ส่วนใหญ่ไม่รู้ว่า pointer variable ทุกตัว size มันเท่ากัน ไม่ 4 ก็ 8 bytes ตาม CPU architecture (ขาดความรู้ที่เป็น foundation )
ย่อหน้าแรกนี่ล่ะครับ ที่ทุกคนตระหนักว่าทำไม่ได้ ต่อให้โปรแกรมเมอร์ที่มีประสบการณ์ก็พลาดกันเรื่อยๆ เลยต้องการเครื่องมือมาตรวจซ้ำ แม้แต่วงการ C/C++ ก็ยอมรับแล้วว่าต้องมีเครื่องมือตรวจ (และถีบโค้ดออกหากไม่ผ่าน) ไม่ใช่บอกให้โปรแกรมเมอร์ระวัง
ในข่าวนี้ปัญหาแค่ว่าภาษา C/C++ เครื่องมือมันหลากหลาย และไม่มีพลัง กลุ่มคนใช้น้อย ไม่เป็นมาตรฐาน เทียบกับ Rust ที่ CIO บอกได้เลยว่าโปรแกรมเมอร์คนนี้เขียน Rust คือฝ่าฝันการตรวจ ownership ของ Rust compiler ได้ ของ C/C++ นี่โปรแกรมเมอร์ห้าคน เจอสามเครื่องมือ อีกสองคนไม่ใช้เครื่องมือตรวจเลยสักตัว
lewcpe.com, @wasonliw
เห็นด้วยเลยครับว่าจุดเด่นเรื่องความเปิดกว้าง ความหลากหลายของ C++ กลายเป็นจุดอ่อนในประเด็นของการผลักดันเครื่องมือตรวจสอบเรื่องนี้แทน เพราะการมีมาตรฐานเดียวนั้นกำหนดแนวทางได้ดีกว่า
..: เรื่อยไป
+
เขียน C/C++ ให้ปลอดภัยน่ะมันทำได้อยู่แล้ว แต่มนุษย์เป็นสิ่งมีชีวิตที่ก่อความผิดพลาดได้เสมอ ถ้าระบบป้องกันเราได้ตั้งแต่แรกก็ควรให้มันช่วยป้องกันตั้งแต่เนิ่น ๆ อย่าง Google เองก็เข้าใจความหนักข้อของ Rust ถึงได้ทำ Carbon ขึ้นมา แต่ถ้าพูดถึงความสะอาดเป็นระเบียบของ Convention นี่ก็ยังหาภาษาที่สู้ Rust ไม่ได้เลยจริง ๆ
อนึ่ง ผมเองเกลียด Rust Cultist แต่ถ้าเราเอาหลักความเป็นจริงมาคุยจริง ๆ Rust เหนือกว่าอย่างเห็นได้ชัด
+1 ช่วงนี้ชอบ Rust มาก แต่เวลาไปเจอสาวกก็จะรู้สึกแบบ 😩
ผมเป็นติ่ง DJB ถ้าทำงานกับ security team ไหนแล้วบอกว่า algorithm ของ DJB นี่ NIST ไม่รับรองผมจะรู้สึกว่าทีมนั้นไม่เก่งทำงานเอา compliance อย่างเดียว
DJB มี talk หนึ่ง "Boring Crypto" เค้าบอกว่าถ้าคุณอ่านข่าวคุณจะเห็นข่าว crypto ว่า RC4 โดนแหก SHA1 ก็โดน WEP ก็มี พวกนี้นักวิจัยตื่นเต้น มีอะไรใหม่ๆ ในวงการให้ไปเขียน paper
แต่ user เค้าไม่ได้ตื่นเต้น ต้องมาหวาดระแวงว่าวันนี้ algorithm นี้มันใช้ได้หรือเปล่านะ มัน weak หรือยังแล้วถ้าเผลอใช้ไปแล้วให้ทำยังไง
สิ่งที่ user อยากได้คือ Boring Crypto ใช้ง่ายๆ โง่ๆ ใช้ได้ตลอดชาติไม่ต้องอัพเกรด
แต่ถ้ามันมีจริง ต่อไปนี้โลกจะไม่มี attack ไม่ต้องอัพเกรดระบบ ส่วนคนเขียน paper ที่พยายามโจมตีแต่เข้านิดๆ หน่อยๆ หรือออกแบบระบบใหม่แต่ของเก่ามันก็ยังใช้ได้อยู่ เขียน paper ไปก็ไม่มีคนสนใจอ่าน กลายเป็นว่าสายงานวิจัยตกงานกันหมด
เป็นภาษาที่ใช้แล้วปวดหัว ไม่ต้องพูดถึงว่าจะใช้ให้ปลอดภัยยังไงดี
น่าจะต้องพึ่งAI มาตรวจจับตอนคอมไฟล์แล้วหล่ะ
ปัญหาใหญ่ของC++ น่าจะมีฟิเจอร์เยอะเกิน แต่คนเขียนไม่ค่อยตามถึงverใหม่สุด บางคนยังเขียนเหมือนอยู่ในยุค C++8.0อยู่เลย