บทบาทของ C ++ ในวันนี้คืออะไร?


41

ปัจจุบันฉันเป็นนักเรียนไอทีและฉันสงสัยว่าสิ่งที่ยังคงมีความสำคัญใน C ++ วันนี้มันใช้เพื่ออะไร ฉันเรียนจบหลักสูตร C ++ ขั้นพื้นฐานในมหาวิทยาลัยของฉัน แต่ฉันนึกภาพไม่ออกเลยว่าฉันจะใช้ความรู้ของฉันได้ที่ไหนและฉันควรจะไปเรียน C ++ ในทิศทางใด

ฉันควรเรียนรู้ที่จะเป็นโปรแกรมเมอร์ C ++ ที่ประสบความสำเร็จอย่างไร

ปัจจุบันฉันเรียนรู้ Java เพียงเพราะฉันไม่เห็นชัดเจนว่าพื้นที่ C ++ จะมีประโยชน์ในวันนี้ แต่ฉันรู้ชัดเจนว่างานประเภทใดที่ฉันจะทำในฐานะโปรแกรมเมอร์ Java แต่ฉันก็ยังหวังว่า C ++ จะไม่ตาย


2
นี่คือมุมมองของฉัน C ++ มีประโยชน์มากในสถานการณ์เรียลไทม์ (และวิดีโอเกม) ฉันยังใช้ C ++ สำหรับแอปพลิเคชันเดสก์ท็อป (อย่าลืม Qt) ด้วยเหตุผลด้านประสิทธิภาพ
hosomaki

1
@stign IMO อาจเป็นไปได้ว่าในที่สุดมันก็จะตายเนื่องจากจะมีเวลามาเมื่อทุกภาษาในวันนี้ล้าสมัย (อาจเป็นเพราะการเปลี่ยนแปลงครั้งใหญ่ของฮาร์ดแวร์ที่ใช้)
Kenneth

17
C ++ นั้นไกลจากความตาย (ฉันเขียนโค้ดใหม่ทุกวัน) และถ้า COBOL เป็นตัวบ่งชี้ใด ๆ ฉันจะทำงานเป็นเวลาหลายปี
Michael Kohne

2
ดูที่การเขียนโปรแกรมภาษา Beacon และทำให้ข้อสรุปของคุณเอง: lextrait.com/vincent/implementations.html
Nemanja Trifunovic

1
เร็ว ๆ นี้ผมได้ดูวิดีโอที่น่าสนใจบางอย่างเกี่ยวกับช่องทางไมโครซอฟท์ 9 Microsoft ได้ใช้เงินไปหลายล้านในการวิจัยตลาดและจากการวิจัยของ บริษัท มันกำลังพูดถึงยุคฟื้นฟูศิลปวิทยา C ++ ดูวิดีโอนี้
grokus

คำตอบ:


57

คุณสมบัตินักฆ่าของ C ++ คือการจัดการทรัพยากรที่มีขอบเขตขอบเขต SBRM (รู้จักกันในอีกชื่อหนึ่งว่า " RAII ") มันเป็นเพียงการเขียนโปรแกรมภาษาอุตสาหกรรมที่ถูกสร้างขึ้นรอบแนวคิดนี้ ใน C ++ เวลาชีวิตของวัตถุทั้งหมดเป็นที่รู้จักกันดีและโปรแกรม C ++ (ที่เขียนอย่างดี) รับประกันว่าทรัพยากรจะได้รับและเผยแพร่ในลักษณะที่กำหนดไว้อย่างสมบูรณ์ ในการเปรียบเทียบภาษาที่รวบรวมขยะหรืออื่น ๆ ที่มีการจัดการไม่ได้ให้การรับประกันใด ๆ ในความเป็นจริงวัตถุในภาษาเหล่านั้นอาจคงอยู่หลังจากสิ้นอายุขัยของพวกเขา

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

ได้รับมันถูกใช้สำหรับงานมากกว่านี้และงานเหล่านั้นหายไปกับ C # และ Python และภาษาอื่น ๆ ที่เหมาะสมกว่า แต่ไม่ได้ส่งผลกระทบต่อช่องหลักของมัน


20
ใครก็ตามที่ใช้ malloc ใน C ++ ฉันต้องการทุบหัวด้วยวัตถุแข็ง ๆ นอกจากนี้ยังมีคุณลักษณะที่รู้จักน้อยกว่าของโอเปอเรเตอร์newใน C ++ ที่เรียกว่าการจัดวาง อนุญาตให้ใช้พื้นที่หน่วยความจำที่ใช้งานอยู่ในปัจจุบัน ดังนั้นถ้ามีคนต้องการหลีกเลี่ยงการแยกส่วน (หรือลด) พวกเขาก็สามารถทำได้ในทางทฤษฎีแล้ว และสามารถคาดการณ์ได้ไม่เหมือนกัน
Tamás Szelei

4
@Apalala C ++ มีการนับการอ้างอิงด้วยเช่นกัน แต่มันเลวร้ายยิ่งกว่า SBRM ในแง่ของการจัดการอายุการใช้งานของวัตถุ ฉันไม่เพียงแค่พูดถึงระดับฮาร์ทีอาร์ RT แต่ฉันกำลังพูดถึงพฤติกรรมที่กำหนดรูปแบบของวัตถุ
Cubbi

4
เมื่อฉันเรียนรู้ C ++, RAII ไม่เป็นที่รู้จักอย่างกว้างขวาง ฉันเรียนรู้การจัดการตัวชี้แบบใหม่และแบบลบและอิงกับสมอง ดังนั้นฉันจึงไม่คิดว่าคุณจะสามารถอธิบายได้ว่ามันเป็น "สร้างขึ้นจากแนวคิด" ไลบรารีและโครงสร้างการสนับสนุนอื่น ๆ ที่ใช้ในปัจจุบันอาจมี แต่ไม่ใช่ภาษาหลักหรือไวยากรณ์
jprete

7
@jprete True ที่จุดแข็งของ C ++ หลายแห่งถูกค้นพบแทนที่จะออกแบบ โพสต์นี้เป็นเรื่องเกี่ยวกับภาษาโพสต์ -2005
Cubbi

5
RAII ได้รับการออกแบบเป็น C ++ แต่โปรแกรมเมอร์ C ++ ส่วนใหญ่ยังคงเขียน C แทนการใช้ malloc ใหม่และฟรีด้วยการลบ
kevin cline

40

มีตลาดอยู่สองสามแห่งสำหรับ C และ C ++ (สำหรับความเข้าใจที่ จำกัด ของฉัน)

  1. รหัสที่มีอยู่ C และ C ++ มีบางโค้ดที่ใหญ่ที่สุดที่มีอยู่รอบ ๆ รหัสของขนาดนี้ไม่สามารถถูกโยนออกมาได้เพราะ "ภาษาใหม่ที่ร้อนแรงต่อไป" ได้เกิดขึ้นแล้ว การผูก C นั้นค่อนข้างเป็นมาตรฐานของการโต้ตอบระหว่างกันบนแพลตฟอร์มส่วนใหญ่ดังนั้นความสามารถในการเขียน (อย่างน้อยที่สุด) ไลบรารีแรปเปอร์ใน C หรือ C ++ นั้นมีประโยชน์
  2. แอปพลิเคชั่นประสิทธิภาพสูง (เช่นไฟแนนซ์ความถี่สูง) C และ C ++ ยังคงให้ประสิทธิภาพโดยรวมดีกว่าภาษาโปรแกรมส่วนใหญ่อื่น ๆ สิ่งสำคัญที่สุดใน C ++ มักจะสร้าง abstractions ด้วยคอมไพเลอร์อย่างเดียวเช่นเทมเพลตซึ่งจะย้ายการคำนวณจากรันไทม์ไปยังเวลารวบรวม (ทำให้แอปโดยรวมของคุณเร็วขึ้น)
  3. (คล้ายกับ 2) แอปพลิเคชันเวลาแฝงต่ำ ภาษาที่ทำงานเช่น CLR หรือ JVM มักจะเร็วเกือบเท่า C ++ ขึ้นอยู่กับแอปพลิเคชัน แต่ยังมีอีกอย่างที่ต้องโหลด CLR หรือ JVM ในหน่วยความจำก่อนที่โปรแกรมของคุณจะสามารถทำงานได้ หากคุณมีความต้องการเริ่มต้นยากนี่เป็นสิ่งสำคัญ แก้ไขจากความคิดเห็น : สำหรับเรื่องนั้นข้อกำหนดความล่าช้าอย่างหนักของคำอธิบายใด ๆ อยู่ที่นี่ ภาษาที่ใช้งานบนเครื่องเสมือนไม่ค่อยมีข้อ จำกัด ในเวลาที่ยากลำบากเนื่องจากการเรียกใช้งานเช่นการรวบรวมขยะไม่ใช่กระบวนการที่กำหนดไว้ล่วงหน้า
  4. ระบบฝังตัว ระบบฝังตัวบางตัวมีฮาร์ดแวร์ที่ใช้งานได้เช่น JVM (Android ของ Google (โอเคมันไม่ใช่ JVM จริง ๆ แต่ใกล้เคียง), Blackberry ของ RIM) หรือ CLR (Windows Phone) แต่ระบบฝังตัวส่วนใหญ่ไม่มีอำนาจ รันภาษาที่ต้องการการสนับสนุนรันไทม์มากกว่าที่จำเป็นสำหรับ C หรือ C ++ (ซึ่งอยู่ถัดจากการสนับสนุนรันไทม์เลย)
  5. แอปพลิเคชั่นที่ จำกัด การปรับใช้ บางครั้งต้องมีการติดตั้ง JVM หรือ CLR เป็นจำนวนมากเกินไปถ้าโปรแกรมทั้งหมดของคุณมีเพียงไม่กี่ร้อย KB (เช่นโปรแกรมส่วนใหญ่ที่ฉันทำงานต้องปรับใช้เป็น.EXEไฟล์เดียวโดยไม่ต้องติดตั้งหรืออะไรอย่างนั้นสำหรับสิ่งนี้ไม่มีทางเลือกอื่น)

2
เวลาในการเริ่มต้นไม่ใช่เวลาแฝงเพียงอย่างเดียวที่ต้องคำนึงถึง: ข้อกำหนดแบบเรียลไทม์แบบแข็งอาจเป็นตัวกระจายที่ใหญ่กว่ามาก
greyfade

1
เพิ่มในสิ่งที่คุณไม่ต้องการถูกล็อคเป็นผู้ผลิตเฉพาะ (C # หรือ Objective-C) หรือไม่ต้องการให้ภาษาของคุณหายไปในคดีความ (Java)
Martin Beckett

@greyfade: นั่นเป็นสิ่งที่ฉันหมายถึง (2) แต่ฉันเห็นด้วยที่ไม่ชัดเจน แก้ไข @ มาร์ติน: ในขณะที่ฉันคิดว่ามันเป็นจุดแข็งที่ดีสำหรับ C ++ ฉันไม่คิดว่ามันจะตอบคำถาม - ซึ่งเป็นสิ่งที่ใช้กันทั่วไปในตลาด C ++ นอกจากนี้ฉันไม่คิดว่าฉันจะโทรหา C # ที่ถูกล็อคไปยังผู้ผลิตบางรายเมื่อ <S> BSD </S> (OOPS: เป็น LGPL) รุ่น CLR ที่ได้รับอนุญาต (โมโน)
Billy ONeal

1
5. ระบบปฏิบัติการและเฟรมเวิร์กหลัก คุณสามารถทำสิ่งต่าง ๆ ได้มากมายในเครื่องเสมือน แต่เครื่องเสมือนนั้นยังต้องใช้ใน C และ / หรือ C ++
Jan Hudec

1
@Jan: ใช่ สิ่งต่าง ๆ เช่นภาพสะท้อนและเพื่อน ๆ จะทำให้เกิดปัญหา 2-4 ชุดย่อยเพียงชุดเดียวที่คุณจะต้องเขียนตัวเก็บรวบรวมขยะจะเป็นวัตถุที่แสดงถึงหน่วยความจำกายภาพ
Billy ONeal

3

C ++ ยังคงมีประโยชน์มากและไม่เคยตาย หากคุณต้องการที่จะอ่านการเปรียบเทียบที่ร้ายแรงบางอย่างระหว่างการเขียนโปรแกรมภาษาที่แตกต่างกันตรวจสอบกระดาษการเปรียบเทียบเชิงประจักษ์ของ C, C ++, Java, Perl, Python, REXX และ Tcl มันไม่ได้อัพเดทมากที่สุด แต่ฉันเชื่อว่าทุกสิ่งยังคงอยู่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.