เปรียบเทียบภาษาการเขียนโปรแกรม
C++: พลังงานพร้อมค่าบำรุงรักษา
C++ คือสองภาษาที่มีชื่อเดียว: ขุมพลังของระบบที่เปลี่ยนไปใช้จังหวะมาตรฐานสามปี และฐานโค้ดแบบเดิมที่สร้างขึ้นจากภาษาถิ่นที่มีอายุหลายสิบปีและนิสัย ABI รูปแบบการเป็นเจ้าของ RAII ได้กำหนดความหมายของคำว่า 'ทันสมัย' ในทุกที่อื่นๆ อย่างเงียบๆ ระบบการสร้างและระบบนิเวศไบนารี่เป็นค่าบำรุงรักษา นี่คือคู่หูเฉพาะสำหรับการเปรียบเทียบ C-vs-C++ ของเรา
ประเด็นสำคัญ
- RAII เป็นแนวคิดที่เปลี่ยนแปลงทุกสิ่งทุกอย่าง: ทรัพยากรที่เชื่อมโยงกับอายุการใช้งานของวัตถุ (ตัวทำลายทำงานตามที่กำหนด) หมายความว่าตระกูล 'สุดท้าย' ของภาษาสมัยใหม่อื่น ๆ ทั้งหมดเป็นพฤติกรรมขอบเขตของ C ++ ตัวชี้อัจฉริยะ (unique_ptr/shared_ptr) เปลี่ยนหน่วยความจำแบบแมนนวลให้เป็นวินัยในการเป็นเจ้าของ
- ส่วนโค้งของการปรับปรุงให้ทันสมัยนั้นมีอยู่จริง: การย้ายซีแมนทิกส์ รูปแบบตามช่วง การผูกแบบมีโครงสร้าง และไลบรารีช่วงข้ามมาตรฐาน (C++11 ถึง C++23) ให้รางวัลแก่ทีมที่ทำให้ Toolchas ใหม่อยู่เสมอ ภาษาเดียวกันที่ใช้งานผ่านคอมไพเลอร์อายุหลายสิบปีอ่านได้เหมือนกับผลิตภัณฑ์อื่น
- ค่าบำรุงรักษาเป็นแบบบิลด์/ไบนารีโลจิสติก: เทมเพลตคอมไพล์ช้า, ระบบบิลด์คลาส CMake เป็นระเบียบของตัวเอง, ไลบรารี ABI (libstdc++ กับ libc++) และการมองเห็นสัญลักษณ์ทำให้ 'ทำงานบนเครื่องของฉัน แต่ไม่ใช่บนเซิร์ฟเวอร์' เป็นตระกูลความล้มเหลวที่แท้จริง งานสร้างที่บรรจุในตู้คอนเทนเนอร์เป็นผ้าพันแผลที่ใช้งานได้จริงที่ช่วยรักษาปัญหาเหล่านี้ไว้
- ความแตกต่างของรหัสข้อยกเว้น/ข้อผิดพลาดคือการตัดสินใจทางสถาปัตยกรรม: ข้อยกเว้นเทียบกับผลลัพธ์สไตล์ std:: ที่คาดหวังยังคงเป็นการตัดสินใจนโยบายของทีม การผสมทั้งสองอย่างเข้าด้วยกันภายในโค้ดเบสเดียวจะทำให้หนี้การบำรุงรักษาทวีคูณอย่างเงียบ ๆ
- โดยที่ C++ เป็นตัวเลือกแรก: เอ็นจิ้นเกม, HPC, กราฟิกแบบเรียลไทม์, งานด้านประสิทธิภาพที่ฝังอยู่ติดกัน และการเขียนเส้นทางลัดใหม่ภายในระบบขนาดใหญ่ โดยที่การเปรียบเทียบภาษาพูดเป็นอย่างอื่น: แบ็กเอนด์บริการ (ความเรียบง่ายของ Go, การรับประกันความปลอดภัยของ Rust, ความเร็วของ Python) แต่ละครั้งจะเอาชนะ C++ เมื่อไม่จำเป็นต้องใช้จุดแข็ง
- ความจริงในการจ้างงาน: กลุ่มทักษะ C++ แบ่งระหว่างวิศวกร C++ สมัยใหม่และทหารผ่านศึกภาษาถิ่นแบบดั้งเดิม และระเบียบวินัยในการตรวจสอบโค้ดสมัยใหม่ (การจัดระเบียบที่เสียงดังกึกก้อง การฆ่าเชื้อใน CI กฎการเป็นเจ้าของ) คือสิ่งที่ทำให้โค้ดเบสขนาดใหญ่สามารถฝึกได้แทนที่จะเป็นแบบชนเผ่า
บันทึกจากหน้างาน
โค้ดเบส C++ ที่รันสแต็กการชำระเงินเป็นเวลา 15 ปีอยู่รอดได้ด้วยนโยบาย ไม่ใช่โชคช่วย: เสียงดังกึกก้องใน CI การฆ่าเชื้อในการสร้างการทดสอบ และกฎการเป็นเจ้าของที่เขียนไว้ในเอกสารการเริ่มต้นใช้งาน วินัยคือความทันสมัย
คำถามที่พบบ่อย
C หรือ C++ สำหรับระบบทำงานโดยที่ความเร็วมีความสำคัญ
C ยังคงความพอดีเมื่ออินเทอร์เฟซน้อยที่สุดและโค้ดเบสมีขนาดเล็ก C++ ชนะเมื่อเลเยอร์นามธรรม (อ็อบเจ็กต์ เทมเพลต ไลบรารี) จ่ายเองในระบบที่ใหญ่กว่า การเปรียบเทียบ C-vs-cpp ของเราครอบคลุมขอบเขตที่ซื่อสัตย์
Rust กำลังแทนที่ C ++ หรือไม่
ในงานที่มีความสำคัญด้านความปลอดภัยในสนามเขียว มีมากขึ้นเรื่อยๆ ในฐานที่มีอยู่จำนวนมหาศาล ไม่เลย: สร้างส่วนประกอบใหม่ใน Rust ในขณะที่การรักษาคอร์ C++ ยังคงเป็นรูปแบบการใช้งานจริงที่เราเห็น
เหตุใด C ++ จึงสร้างปัญหาดังกล่าว
การออกแบบภาษา (รวมถึงส่วนหัว เทมเพลต) รวมถึงการกระจายอำนาจของระบบนิเวศ บวกกับการเมือง ABI โมดูลที่ทันสมัยและเครื่องมือ CMake ที่ครบกำหนดจะลดลงแต่ไม่ลบค่าธรรมเนียม
เราสามารถรักษาโค้ด C++ เก่าให้ปลอดภัยได้หรือไม่?
บางส่วน: เปิดใช้งานการฆ่าเชื้อในรุ่นทดสอบ ใช้ตัวชี้อัจฉริยะแบบค่อยเป็นค่อยไปบนโค้ดที่สัมผัส และกั้นอินเทอร์เฟซที่ไม่ปลอดภัยไว้ด้านหลังโมดูลที่ได้รับการตรวจสอบ การเขียนซ้ำระบบการทำงานขายส่งมีรายการผู้เสียชีวิตของตนเอง
Kinetikatech ช่วยเรื่อง เปรียบเทียบภาษาการเขียนโปรแกรม ได้อย่างไร
พูดตรง ๆ ว่าทีมส่วนใหญ่มาหาเราหลังลองทำเองมาแล้ว: ภาษาสำหรับงานระบบ การเขียนสคริปต์ และบริการ เปรียบเทียบกับสิ่งที่สำคัญจริง ๆ ในการผลิต: การรับประกันความปลอดภัย ความเร็วเบื้องต้น ใครที่คุณสามารถจ้างได้ และความเจ็บปวดของบริการที่เกิดขึ้นในการปรับใช้และแพตช์ บริการ การจัดการเซิร์ฟเวอร์และการบำรุงรักษาเว็บไซต์ ของเรามีอยู่เพื่อไม่ให้คุณต้องเรียนรู้ เปรียบเทียบภาษาการเขียนโปรแกรม แบบเจ็บปวด เราดูแลทั้งการตั้งค่า การเฝ้าดู และเรื่องกะทันหันตอนตีสาม