อะไรทำให้ C เป็นที่นิยมในยุคของ OOP [ปิด]


91

ฉันเขียนโค้ดจำนวนมากทั้งใน C และ C ++ แต่ไม่ได้คาดหวังว่า C จะเป็นภาษาที่ได้รับความนิยมอันดับสองรองจาก Java เล็กน้อย

ดัชนีชุมชนการเขียนโปรแกรม TIOBE

ฉันอยากรู้ว่าทำไมในยุค OOP นี้ C ยังคงเป็นที่นิยม? โปรดทราบว่าภาษาการเขียนโปรแกรมยอดนิยม 4 จาก 5 อันดับแรกคือภาษา "ทันสมัย" ซึ่งเป็นภาษาเชิงวัตถุ

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


18
วิดีโอเกม, ระบบฝังตัว, การเขียนโปรแกรมฮาร์ดแวร์ (เฟิร์มแวร์), ระบบปฏิบัติการ ฯลฯ

25
โปรดทราบว่าคุณจะได้รับสิ่งที่คุณวัดเท่านั้น - ในกรณีของ TIOBE จำนวนครั้งที่พบสำหรับ+"<language> programming"เครื่องมือค้นหายอดนิยม บล็อกโพสต์ "ทำไมไม่มีใครทำโปรแกรม C อีกต่อไป" นับเป็น C ในดัชนีนี้ Heck แม้คำถามนี้อาจทำทันทีที่ Google หยิบขึ้นมา

40
อายุของ OOP นั่นเป็นคำสั่งที่ค่อนข้างหนา
Mahmoud Hossam

57
คุณมีภาพลวงตาว่า OOP เป็นกระสุนเงินคุณควรเสียอย่างรวดเร็วไม่มีอะไรพิเศษหรือ "ดี" เกี่ยวกับ OOP มันเป็นเพียงหนึ่งในกลยุทธ์การจัดการโค้ด
Raynos

23
@DeadMG: หม้อพบกาต้มน้ำ ข้อมูลของ TIOBE อาจไม่น่าเชื่อถือ แต่การยืนยันหัวล้านของคุณว่า "ไม่เป็นที่นิยม" ไม่มีแหล่งอ้างอิงใด ๆ หากคุณกำลังจะท้าทายสมมติฐานที่อยู่เบื้องหลังคำถามอย่างน้อยก็ให้หลักฐานบางอย่างเพื่อสำรอง
Daniel Pryden

คำตอบ:


142

ปัจจัยบางประการที่มีส่วนร่วม:

  • C เป็นที่แพร่หลาย ไม่ว่าแพลตฟอร์มใดก็ตาม C อาจพร้อมใช้งาน
  • C เป็นแบบพกพา เขียน C สะอาดและมันก็คอมไพล์ด้วยการปรับเปลี่ยนเล็กน้อยบนแพลตฟอร์มอื่น ๆ - บางครั้งมันก็ใช้งานได้นอกกรอบ
  • C ได้รับรอบในขณะที่ ย้อนกลับไปในสมัยที่ยูนิกซ์พิชิตโลก C (ภาษาโปรแกรม UNIX ที่เลือก) แบ่งปันในการครอบครองโลกและกลายเป็นภาษากลางของโลกแห่งการเขียนโปรแกรม โปรแกรมเมอร์ที่จริงจังสามารถคาดหวังว่าอย่างน้อยก็ทำให้รู้สึกถึงบางอันของ C; ไม่สามารถพูดเกี่ยวกับภาษาอื่นส่วนใหญ่ได้
  • C ยังคงเป็นภาษาเริ่มต้นสำหรับระบบ UNIX และ UNIX หากคุณต้องการให้ห้องสมุดประสบความสำเร็จในพื้นที่โอเพนซอร์ซคุณต้องมีเหตุผลที่ดีพอสมควรที่จะไม่ใช้ C นี่เป็นเพียงบางส่วนเนื่องจากประเพณี แต่เนื่องจาก C เป็นภาษาเดียวที่คุณสามารถสันนิษฐานได้ว่าสนับสนุน UNIX อย่างปลอดภัย ระบบ. การเขียนไลบรารีของคุณใน C หมายความว่าคุณสามารถลดการพึ่งพาได้
  • C นั้นง่าย มันขาดการแสดงออกของ OOP ที่ซับซ้อนหรือภาษาที่ใช้งานได้ แต่ความเรียบง่ายของมันหมายถึงสามารถหยิบขึ้นมาได้อย่างรวดเร็ว
  • C เป็นสารพัดประโยชน์ มันเหมาะสำหรับระบบฝังตัวไดรเวอร์อุปกรณ์เมล็ด OS, ยูทิลิตีบรรทัดคำสั่งขนาดเล็ก, แอปพลิเคชันเดสก์ท็อปขนาดใหญ่, DBMS, การใช้ภาษาการเขียนโปรแกรมอื่น ๆ , และสิ่งอื่น ๆ ที่คุณนึกออก
  • C รวดเร็ว การใช้งาน C ส่วนใหญ่รวบรวมโดยตรงกับรหัสเครื่องและโปรแกรมเมอร์มีอำนาจเต็มในสิ่งที่เกิดขึ้นในระดับเครื่อง ไม่มีล่ามไม่มีคอมไพเลอร์ JIT ไม่มี VM หรือรันไทม์ - เพียงแค่โค้ดคอมไพเลอร์ลิงค์ลิงเกอร์และโลหะเปลือย
  • C คือ 'ฟรี' (ทั้งในเบียร์และความหมายของคำพูด) ไม่มี บริษัท เดียวที่เป็นเจ้าของและควบคุมมาตรฐานมีการใช้งานหลายอย่างให้เลือกไม่มีปัญหาลิขสิทธิ์สิทธิบัตรหรือเครื่องหมายการค้าสำหรับการใช้ C และการใช้งานที่ดีที่สุดบางอย่างเป็นโอเพ่นซอร์ส
  • C มีแรงผลักดันมากมาย ภาษาได้รับความนิยมมานานหลายทศวรรษดังนั้นจึงมีแอปพลิเคชั่นห้องสมุดเครื่องมือและชุมชนเพื่อสนับสนุนภาษาจำนวนมาก
  • C เป็นผู้ใหญ่แล้ว มาตรฐานสุดท้ายที่นำการเปลี่ยนแปลงครั้งใหญ่คือ C99 และส่วนใหญ่เข้ากันได้กับมาตรฐานก่อนหน้านี้ ไม่เหมือนกับภาษาที่ใหม่กว่า (เช่น Python) คุณไม่ต้องกังวลกับการแตกหักการเปลี่ยนแปลงในไม่ช้า
  • C เข้ากันได้ ภาษาส่วนใหญ่มีการผูกพูดคุยกับ C ซึ่งหมายความว่าเราสามารถพัฒนาห้องสมุดใน C โดยใช้การประชุมมาตรฐานที่เรียกและรู้สึกมั่นใจว่าเกือบภาษาอื่น ๆ สามารถเชื่อมโยงกับห้องสมุดนั้น ในการตั้งชื่อภาษายอดนิยมบางอย่างที่ใช้กันอย่างแพร่หลาย: C #, Java, Perl, Python, PHP สามารถลิงก์กับไลบรารี C ได้โดยไม่มีปัญหา
  • C มีประสิทธิภาพ: หากภาษาไม่สามารถทำอะไรบางอย่างคอมไพเลอร์ที่ได้รับความนิยมทั้งหมดอนุญาตให้มีการฝังโค้ดแอสเซมเบลอร์ซึ่งสามารถทำอะไรก็ได้ที่ฮาร์ดแวร์สามารถทำได้ เมื่อรวมเข้าด้วยกันกับจุดด้านบนเกี่ยวกับความเข้ากันได้หมายความว่า C สามารถทำหน้าที่เป็นผู้ประสานงานระหว่างภาษาระดับสูงและ "โลหะเปลือย" ของการชุมนุม

9
ฉันคิดว่าข้อโต้แย้งของคุณไม่ถูกต้องทั้งหมด 1) C เป็นที่แพร่หลาย C ++ เป็น ubiquitos เป็น C เนื่องจากมีคอมไพเลอร์ C ++ ถึง C 2) C เป็นแบบพกพา เช่นเดียวกันกับ C ++ 3) C ได้รับรอบในขณะที่ เช่นเดียวกันกับ C ++ 4) C เป็นสารพัดประโยชน์ เช่นเดียวกันกับ C ++ 5) C รวดเร็ว เช่นเดียวกันกับ C ++ 6) C คือ 'ฟรี' เช่นเดียวกันกับ C ++ 7) C มีแรงผลักดันมากมาย เช่นเดียวกันกับ C ++ อีกครั้ง 8) C เป็นผู้ใหญ่แล้ว เช่นเดียวกันกับ C ++ ดังนั้นคุณจะไม่ตอบคำถาม
Konstantin Solomatov

19
C11 เป็นมาตรฐานล่าสุดไม่ใช่ C99 ไม่ใช่ว่ามันสำคัญจริงๆเพราะทุกคนใช้ '89
Pubby

53
@KonstantinSolomatov: หากคุณกำลังเขียนห้องสมุดที่คนอื่นจะถูกบริโภคโปรดทำสิ่งที่โลกโปรดปรานและเขียนลงใน C แทน C ++ หากคุณไม่สามารถทำได้ให้เขียน C API เป็นอย่างน้อย ทุกสิ่งในจักรวาลสามารถเชื่อมโยงไปยังรหัส C ในทางใดทางหนึ่งมักจะมีความพยายามน้อยที่สุด ในทางตรงกันข้ามคุณมักจะมีปัญหา ABI ที่สำคัญเมื่อพยายามเรียกรหัส C ++ จากรหัสC ++อื่น ๆ โดยไม่ต้องพูดถึงภาษาอื่น
Daniel Pryden

37
@ KonstantinSolomatov - ความจริงที่ว่ามีความจำเป็นสำหรับคอมไพเลอร์ C ++ ถึง C ชนิดที่พิสูจน์ให้เห็นว่า C เป็นสิ่งที่แพร่หลาย
Detly

11
@KonstantinSolomatov: โปรดหยุดคิดว่า C คือ C ++ C ไม่มีการปิด ส่วนขยายของ C ทำ (เช่นที่นำไปใช้โดยตระกูล gcc ของคอมไพเลอร์) แต่ C เองนั้นไม่ได้ (นั่นคือมันไม่ได้อยู่ในข้อมูลจำเพาะ K&R ดั้งเดิมหรือมาตรฐาน C ขั้นสุดท้ายใด ๆ )
Donal Fellows

88

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

ฉันควรพูดถึงว่าฉันมักจะแปลกใจเล็กน้อยเมื่อ OOP ถูกนำเสนอในหลักสูตรการเขียนโปรแกรมเป็น "รุ่นสุดท้าย" ซึ่งเป็นจุดสิ้นสุดที่เป็นไปได้สำหรับการเขียนโปรแกรมที่ดีเท่านั้น เช่นเดียวกับด้านอื่น ๆ ของการเขียนโปรแกรมคุณค่าของ OOP คือการประนีประนอมระหว่างปัจจัยที่มีการแข่งขันมากมายรวมถึงการที่สมองของมนุษย์จัดระเบียบข้อมูลว่ากลุ่มสังคมให้การสนับสนุนซอฟต์แวร์ในระยะยาวได้อย่างไรและในกรณีของการเขียนโปรแกรมเชิงวัตถุ ว่าเอกภพทำงานอย่างไร

และจุดสุดท้ายนั้นก็คุ้มค่าที่จะใช้ค้อนทุบนิดหน่อย อ่านเพิ่มเติมหากคุณสนใจในการสำรวจระดับฟิสิกส์ว่าทำไมรูปแบบการเขียนโปรแกรมบางอย่างมีอยู่อย่างไรพวกเขาทำงานร่วมกันอย่างไรและโลกอาจจะมุ่งไปสู่อนาคตในอนาคตเมื่อเราขยายแนวความคิดดังกล่าว ...

วัตถุในวิชาฟิสิกส์คือสิ่งใดก็ตามที่รักษาความเชื่อมโยงที่รู้จักได้ตลอดเวลา ในทางกลับกันทำให้สิ่งมีชีวิตที่เรียบง่ายอย่างพวกเราสามารถหลบหนีจากการเป็นตัวแทนของวัตถุโดยใช้บิตเพียงเล็กน้อยเท่านั้นโดยไม่เป็นอันตรายต่อการอยู่รอดของเรามากเกินไป แต่ในแง่ของฟิสิกส์ในวงกว้างจำนวนของสิ่งที่คุณต้องทำให้ถูกต้องเพื่อทำให้การทำให้เข้าใจง่ายเป็นเรื่องง่ายและทั่วไปนั้นมีขนาดใหญ่อย่างน่าทึ่ง ในฐานะที่เป็นมนุษย์เราไม่ได้คิดถึงเรื่องนั้นมากนักเพราะค่อนข้างตรงไปตรงมาเราจะไม่อยู่ที่นี่ถ้ามันไม่จริง

ฟังดูเป็นนามธรรมเหรอ? มันไม่จริง ลองนึกภาพตัวอย่างเช่นพยายามนำทางถนนไปที่บ้านเพื่อนของคุณถ้าแทนที่จะเป็นรถยนต์คุณจะพบกับสนามพลาสมาที่สั่นคลอนอย่างรวดเร็วและการควบแน่นชั่วขณะของวัตถุเคลื่อนที่ด้วยความเร็วที่มหาศาล สถานการณ์ดังกล่าวอาจลดความลึกลงไปในโอกาสในการเข้าสังคม เราต้องการวัตถุเราเป็นวัตถุและการมีอยู่ของวัตถุทำให้เรามีระดับของสภาพแวดล้อมรอบตัวเราที่ใหญ่โตและสำคัญยิ่ง

งั้นลองดึงทั้งหมดนั้นกลับไปที่ซอฟต์แวร์ วัตถุใดในโลกแห่งความเป็นจริงได้กล่าวเกี่ยวกับวัตถุในแง่ของการเขียนโปรแกรม?

สำหรับสิ่งหนึ่งนั่นหมายความว่าสิ่งที่กำหนดวัตถุ "ดี" ในซอฟต์แวร์ควรเป็นจริงหรือไม่ว่าชนิดของข้อมูลที่คุณจัดการอยู่นั้นรองรับความคิดในการคงอยู่ของสิ่งที่จดจำได้ตลอดเวลาหรือไม่

ด้วยคำจำกัดความรูปแบบที่ง่ายที่สุดของ OOP นั้นง่ายต่อการจดจำ พวกเขาเป็นคนที่จัดการบิตโดยใช้เฉพาะข้อมูลที่ "แนบ" แล้วหรือกำหนดโดยโลกแห่งความจริงวัตถุทางกายภาพอย่างแท้จริงเช่นบุคคลบ้านหรือรถยนต์ แม้วันนี้ยังคงบ่อยเกินไปเพียงความหมายของวัตถุที่ผู้คนได้รับในหลักสูตรซอฟแวร์ มันแย่มากเพราะแม้แต่โปรแกรมเชิงวัตถุก็ต้องการคำนิยามที่กว้างกว่านั้น

ประเภทที่สองและไกลน่าสนใจมากขึ้นของวัตถุที่ประกอบด้วยสิ่งที่ฉันจะเรียกimmortalized เหตุการณ์จริงของโลก โดย "immortalized" ฉันหมายถึงสิ่งต่างๆ ที่มีอยู่อย่างน้อยก็สั้น ๆในฐานะที่เป็นนิติบุคคลหรือคอลเลกชันที่กำหนดไว้อย่างดีในโลกแห่งความเป็นจริง แต่จากนั้นก็แยกย้ายกันไป การประชุมสัมมนาเป็นตัวอย่างที่ยอดเยี่ยม: การประชุมสัมมนามีอยู่ครู่หนึ่งในฐานะที่เป็นคอลเลกชันสถานที่และผู้คนที่กำหนดไว้อย่างเหมาะสม แต่อนิจจาแม้แต่การประชุมที่ดีที่สุดก็ต้องจบลงและแต่ละส่วนก็ทำให้พวกเขาก้าวไปสู่กิจกรรมอื่น ๆ

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

หมวดหมู่สุดท้ายของ OOP ประกอบด้วยวัตถุที่ไม่มีการเชื่อมต่ออย่างใกล้ชิดกับเหตุการณ์ภายนอก แต่เป็นโครงสร้างพื้นฐานแทนจำเป็นเพื่อสนับสนุนการขยายความเป็นจริงของเราอย่างต่อเนื่องโดยใช้สิ่งที่เป็นอมตะจากโลกแห่งความจริง นี่คือที่ที่คุณสามารถลงไปจนถึงโลหะ (กึ่ง) ของคอมพิวเตอร์สร้างชิ้นส่วนของความเป็นจริงแบบถาวรที่เช่นองค์ประกอบทางเคมีของโลกแห่งความจริงสามารถรวมกันได้อย่างรวดเร็วและในวิธีที่น่าสนใจในการสร้างโลกภายในใหม่ การคำนวณแบบเคลื่อนที่ได้ช่วยส่งเสริมการเติบโตของวิธีการ recombinatorial สูงซึ่งเป็นอีกครั้งที่เลียนแบบคุณลักษณะของ recombinatorial ของโลกทางกายภาพ มันก็ยากเช่นกัน: สิ่งที่อาจเป็นทางเลือกที่ดีอาจพิสูจน์ได้ว่าเมื่อเวลาผ่านไปจะเป็นสิ่งที่ไม่ดีอย่างไม่คาดคิดมักจะเป็นเพราะมันปิดกั้นความหลากหลายและการขยายตัวแทนที่จะสนับสนุน

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

ส่วนอื่น ๆ ที่ OOP สามารถไปได้นั้นกำลังเน้นไปที่แนวคิดของวัตถุเก่า ๆมากเกินไป

วัตถุในโลกแห่งความเป็นจริงและโดยเฉพาะอย่างยิ่งสิ่งมีชีวิตมีความสามารถในการโต้ตอบกับสภาพแวดล้อมในระดับที่น่าอัศจรรย์และซับซ้อน วิดเจ็ตที่ใช้ร่วมกันซึ่งมองดูกันตรวจสอบความเข้ากันได้และสติปัญญาและอาจคิดหาวิธีใหม่ ๆ ในการโต้ตอบใกล้ชิดกับแนวคิดทางชีววิทยาในโลกแห่งความเป็นจริงของวัตถุมากกว่าโครงร่างที่เรียบง่ายและโครงร่างมรดกที่เรียบง่าย เพื่อมุ่งเน้น (โดยปกติจำเป็น!) ที่ระดับรหัส นี่เป็นหนึ่งในพื้นที่การเจริญเติบโตของวัตถุในโลกไซเบอร์ยิ่ง "แนวทางเช่น" วิธีการทำปฏิกิริยาต่อสภาพแวดล้อมเป็นบรรทัดฐานแม้ในการเขียนโปรแกรมเอง

และมากมายสำหรับ "คำวิจารณ์" ของ OOP ของฉัน! อย่างไรก็ตามถึงกระนั้นฉันหวังว่าฉันจะชี้ให้เห็นว่าทำไมการสร้างโลกไซเบอร์ที่สมบูรณ์ยิ่งขึ้นหมายถึงการรวมรูปแบบการเขียนโปรแกรมที่หลากหลายแทนที่จะคิดว่า "มีเพียง" เท่านั้นที่เป็นสิ่งจำเป็น ความรู้สึกของฉันคือสิ่งที่น่าสนใจจริงๆยังมาไม่ว่าโลกของเราจะทำอะไร!


18
ฉันแน่ใจว่ามีคนไม่กี่คนที่เลือก "อ่านเพิ่มเติมเฉพาะในกรณีที่คุณสนใจในการสำรวจระดับฟิสิกส์" ฉันดีใจที่ฉันไม่ได้ นี่คือความคิดที่สั่นคลอนรากฐานของความเข้าใจของเราและอาจเป็นหนทางเดียวที่เราจะก้าวไปข้างหน้าอย่างน่าทึ่ง ขอบคุณสำหรับการอ่านที่ดี
Matt Esch

@ Raynos, $ MattEsch ขอขอบคุณคุณทั้งคู่ที่ให้ความกรุณาและฉันดีใจที่คุณพบว่ามันน่าสนใจ!
เทอร์รี่ Bollinger

1
ลงทะเบียนกับไซต์เพื่อให้สามารถโหวตคำตอบที่ยอดเยี่ยมและล้ำลึกนี้ได้ =)
sgorozco

2
ตามความคิดของคุณฉันได้เขียนโปรแกรมมาระยะหนึ่งแล้วกลายเป็นคนกระตือรือร้น OOP เนื่องจากฉันเห็นทักษะการเขียนโค้ดของฉันดีขึ้นอย่างมากเมื่อฉันนำมันมาใช้ อย่างไรก็ตามจากประสบการณ์แสดงให้ฉันเห็นว่าการบังคับให้ทุกสิ่งกลายเป็นวัตถุอาจเป็นอันตรายได้ ตอนนี้ฉันหยุดชะงักที่เครื่องมือการแมป object-to-relational (สิ่งที่ไม่เป็นระเบียบ) หรือโครงร่างการทำให้เป็นอนุกรมกราฟของวัตถุที่ใช้แบนด์วิดท์ 1,000% เมื่อเทียบกับโปรโตคอลไบนารีธรรมดาที่เพิ่งส่งผ่านสายในปริมาณที่เหมาะสมของข้อมูลไบนารีที่ต้องการ ช่วงเวลาที่. ขอบคุณสำหรับการอ่านที่ดี
sgorozco

2
คำตอบนี้เป็นคำตอบว่าทำไมเรายังต้องการ SQL!
HLGEM

25

ประการแรกคุณไม่จำเป็นต้องมี OOP สำหรับทุกสิ่งแม้ว่าสิ่งที่ผู้สอนเกี่ยวกับเรื่องนี้ได้รับความนิยมก็ตาม ซึ่งแตกต่างจาก Java, C ช่วยให้ตัวชี้ฟังก์ชั่นและแม้กระทั่งการปิดซึ่งเปิดประตูไปสู่การเขียนโปรแกรมการทำงานและแก้ปัญหาชิ้นส่วนของพื้นที่จัดการ OOP ได้ค่อนข้างมากเพราะมันให้วิธีการฉีดพึ่งพา การใช้มาโครอย่างระมัดระวังสามารถสร้างสิ่งที่ดีมาก ๆ อย่างที่sglibพิสูจน์ได้

ในทางที่แปลกประหลาดใคร ๆ ก็มองว่า C เป็นความประนีประนอมที่ดีระหว่าง Java และ C ++ โปรดทราบว่าฉันไม่ได้บอกว่า C เป็นทั้งสองอย่าง แต่ตรงกันข้ามกับ Java มันค่อนข้างภาษาที่มีประสิทธิภาพในขณะที่ตรงกันข้ามกับ C ++ มันมีความซับซ้อนที่จัดการได้

มันเป็นภาษาเก่าที่เพิ่มความน่าเชื่อถือและสอดคล้องกันในขณะที่ไม่ซับซ้อนมากขึ้น และทั้งหมดนั้นมันมีระบบนิเวศยักษ์และมันก็วิ่งไปทุกหนทุกแห่ง


11
ฟังก์ชั่นการเขียนโปรแกรมนั้นยอดเยี่ยมไม่ขัดข้อง แต่ C เป็นภาษาที่ค่อนข้างแย่สำหรับการเขียนโปรแกรมการทำงาน การปิด / บล็อกเป็นแฮ็กแบบไม่พกพาและมาพร้อมกับไวยากรณ์ที่น่าเกลียด (เช่นเดียวกับ gotchas, ฉันเดิมพัน) แม้จะเพิกเฉยก็ตามคุณยังต้องใส่ใจกับการจัดการความจำ C เป็นภาษาที่มีประโยชน์ แต่ก็เหมือนกับภาษาใด ๆ คุณแค่ทำให้ชีวิตของคุณยากขึ้นกว่าที่เป็นถ้าคุณใช้มันในทางที่ผิดที่ไม่ได้สร้างขึ้นมา คุณสามารถจำลองการทำงานของโปรแกรมใน Java ได้เช่นกัน (ดูที่Guava ) แต่ก็ไม่ได้ดีเหมือนกัน

7
มันยากมากที่จะเขียนโปรแกรมในสไตล์การใช้งานที่ไม่มีตัวเก็บขยะ
Konstantin Solomatov

@ KonstantinSolomatov: ประการแรกมันเป็นเรื่องส่วนตัวมาก ประการที่สองคุณสามารถเพิ่มการเก็บขยะไปที่ C หากจำเป็น
back2dos

หากคุณต้องการประนีประนอมระหว่าง Java และ C ++ ลองใช้ Obj-C :) แน่นอนว่ามีบางสิ่งที่โปรแกรมเมอร์ C / C ++ ควรลองใช้
Sulthan

21

C มี ABI (Application Binary Interface) C ++ ไม่ได้ สิ่งนี้ทำให้ C มีประโยชน์มากกว่า C ++ ในบางกรณี ถ้าฉันจะเขียนห้องสมุดและสามารถจัดส่งไบนารีสำหรับการใช้งานของผู้อื่น C ++ เป็นเครื่องมือที่ผิดสำหรับงาน ถ้าฉันจะเขียนไลบรารีที่จะใช้ภาษาอื่นอีกภาษา C เป็นเครื่องมือที่เหมาะสมสำหรับงาน ฉันไม่เคยได้ยินภาษาที่ไม่รองรับ FFI (ฟังก์ชั่นอินเทอร์เฟซต่างประเทศ) ถึง C ในทางกลับกัน C ++ จะไม่ทำงานกับไลบรารีที่เขียนใน C ++ หากใช้คอมไพเลอร์ต่างกัน

โดยทั่วไปมันจะเติมลงไปใน C เพื่อเติมบทบาทที่ C ++ ไม่เหมาะสม


2
อืมม .. ม้วนมะเขือเทศมะเขือเทศและชีส!
DeadMG

3
C ++ นั้นมี ABI เป็นเพียงว่า C ABI นั้นแข็งแกร่งเหมือนหินในขณะที่ C ++ จะเปลี่ยนแปลงบ่อยครั้งเกินไป นอกจากนี้ยังมีเทมเพลต C ++ จำนวนมากที่รวบรวมไว้ในแอปพลิเคชันที่ใช้ดังนั้นคุณจึงไม่สามารถอัปเดตได้ เมื่อฟังก์ชันการทำงานทั้งหมดถูกซ่อนอยู่หลังการเรียกใช้ฟังก์ชันเป็นไปได้ที่จะแก้ไขไลบรารีและทำให้แอปพลิเคชันทำงานต่อไป
Jan Hudec

12

ข้อดีอย่างหนึ่งของการใช้ C ในภาษาต่างๆเช่น C ++ หรือ Java คือการที่ไม่มีเวทย์มนตร์มากมายเกิดขึ้นภายใต้ประทุน ไม่มีการเรียกใช้งาน Constructor เมื่อมีการจัดสรรรายการและไม่มีการเรียกใช้ Destructors เมื่อวัตถุไม่อยู่ในขอบเขต ไม่มีชื่อ mangling และไม่มี vtables การทำนายนั้นง่ายกว่า คุณไม่ต้องกังวลเกี่ยวกับตัวรวบรวมขยะที่ขัดจังหวะกิจวัตรประจำวัน

ตัวสร้าง, destructors, ชื่อ mangling, vtables, ตัวรวบรวมขยะ ฯลฯ สามารถลดความซับซ้อนบางอย่างในโค้ดที่คุณเขียน แต่จากนั้นความซับซ้อนนั้นจะกลายเป็นส่วนหนึ่งของภาษาที่คุณไม่สามารถควบคุมมันได้ คุณอาจจบลงด้วยเวลาที่สร้างนานขึ้น (น่ารำคาญ แต่ก็ทนได้), รอยเท้าหน่วยความจำรันไทม์ที่ใหญ่ขึ้น ด้วย C คุณสามารถตัดออกไปบางส่วนของความซับซ้อนที่จนกว่าคุณจะทิ้งให้อยู่กับการทำงานที่คุณต้องการ

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


2
บทลงโทษของระยะเวลาเป็นเรื่องไร้สาระ C-strings (ยกเลิก null) มีประสิทธิภาพน้อยกว่า C ++ มาก นอกจากนี้คลาสสตริงยังสามารถกระชับได้เช่นเดียวกับ C ตราบใดที่คุณไม่ต้องลากทั้งหมดstdเข้ามา
Pubby

1
Toolchain ที่ไม่ลบฟังก์ชั่นstringที่ไม่ได้ใช้ซึ่งไม่ได้ใช้หากคุณเชื่อมโยงแบบคงที่ CRT คือ toolchain ที่ไม่คุ้มค่า
Billy ONeal

10
สิ่งที่โง่คือผมทำงานกับห้องสมุดที่std::stringไม่ได้มีความซับซ้อนพอ หากคุณจริงจังกับสตริงจริงๆทั้งในแง่ของประสิทธิภาพและความสามารถคุณกลับมาใช้ C และทำมันเองอีกครั้งแม้ว่าจะไม่ได้ใช้ old old char*s จริงๆ (สตริงมีความซับซ้อนอย่างน่าประหลาดใจแม้ว่าคุณจะคาดหวังว่าพวกเขาจะซับซ้อน)
Donal Fellows

1
@ DonalFellow น่าสนใจ นี่คือเหตุผลที่มาตรฐาน C มีมาก่อนเสมอเช่นสตริงและตารางแฮช
วิศวกร

@ArcaneEngineer: ประเภทข้อมูลพื้นฐานที่หายไปใน C คือ "slice ของ T []" ซึ่งจะรวม T * และ size_t ซึ่งสามารถจัดทำดัชนีเหมือนอาร์เรย์สามารถย่อยสลายเป็น T * และสามารถแปลงโดยปริยาย ชนิด T [n] ใด ๆ (ด้วยขนาดที่จัดหาโดยอัตโนมัติโดยคอมไพเลอร์) ประเภทดังกล่าวอาจช่วยให้การตรวจสอบขอบเขตอัตโนมัติในหลายกรณีที่มันเป็นไปไม่ได้ในขณะที่การทำให้โค้ดหลายชนิดนั้นสะอาดและชัดเจนขึ้น
supercat

11

ระบบและไดรเวอร์ที่ฝังตัวมักจะตั้งโปรแกรมใน C นอกเหนือจากนั้นยังมีระบบ C รุ่นดั้งเดิมมากมายที่ยังคงรักษาและขยาย


2
ใช่ C ทำงานทุกอย่าง และมันก็เป็นเรื่องง่ายที่จะเรียนรู้ภาษา (เทียบกับ c ++)
BenjaminB

10

สิ่งเดียวกันที่ทำให้ค้อนแมนนวลได้รับความนิยมในยุคของค้อนลม (ค้อนลม): C ยังคงเป็นเครื่องมือที่เหมาะสมสำหรับงานบางประเภท


6

ความเรียบง่ายความสอดคล้องและความแม่นยำ

มันง่าย - คุณไม่ต้องการสภาพแวดล้อมการพัฒนาที่ซับซ้อน, ไลบรารีที่กว้างขวางหรือเครื่องเสมือน

มันสอดคล้องกัน - ส่วนใหญ่เขียน C เมื่อ 10 ปีที่แล้วสามารถรวบรวมในวันนี้

ความแม่นยำ - ให้คุณลงไปถึงระดับของเครื่องรู้ตำแหน่งหน่วยความจำได้ตามต้องการ นี่คือประสิทธิภาพที่ดีและฮาร์ดแวร์ฝังตัว

มันไม่ได้มีไว้สำหรับทุกสิ่ง แต่เป็นเครื่องมือที่มีประโยชน์


5
ยังดีกว่ามีโอกาสพอสมควรที่โค้ดที่รวบรวมเมื่อ 10 ปีที่แล้วสามารถทำงานได้วันนี้
Donal Fellows

@DonalFellows: และสำหรับแอปพลิเคชันที่ใช้ปลั๊กอินมีโอกาสพอสมควรที่แอปพลิเคชันที่เขียนสร้างและนำออกใช้ (ในรูปแบบที่ปฏิบัติการได้) ในวันนี้จะสามารถใช้ปลั๊กอินที่คอมไพล์ด้วยเครื่องมือบิลด์ที่ไม่เคยมีมาก่อน ออกแบบยัง
supercat

6

ฉันอ้างอิงสองคำตอบจากคำตอบอื่นเพราะพวกเขาจับเหตุผลที่ว่าทำไมฉันยังคงใช้ C เป็นครั้งคราว (ไม่ใช่ภาษาหลักที่ฉันเลือก):

  • C นั้นง่าย มันขาดการแสดงออกของ OOP ที่ซับซ้อนหรือภาษาที่ใช้งานได้ แต่ความเรียบง่ายของมันหมายถึงสามารถหยิบขึ้นมาได้อย่างรวดเร็ว
  • C เป็นผู้ใหญ่แล้ว มาตรฐานสุดท้ายที่นำการเปลี่ยนแปลงครั้งใหญ่คือ C99 และส่วนใหญ่เข้ากันได้กับมาตรฐานก่อนหน้านี้ ไม่เหมือนกับภาษาที่ใหม่กว่า (เช่น Python) คุณไม่ต้องกังวลกับการเปลี่ยนแปลงที่จะเกิดขึ้นในเวลาอันรวดเร็ว

ฉันคิดว่านี่เป็นเรื่องจริงมาก ฉันเรียนรู้ C ในช่วงหัวค่ำต้น: มันง่ายคำหลักไม่กี่และสร้างงานส่วนใหญ่ทำโดยห้องสมุด จากนั้นฉันไม่ได้ใช้ C เป็นเวลาสองสามปี ประมาณปี 2545 ฉันต้องการการนำอัลกอริทึมมาใช้อย่างรวดเร็วฉันติดตั้งคอมไพเลอร์ C และนำไปใช้งาน ฉันรู้ภาษาฉันรู้ว่าอะไรดีสำหรับสิ่งที่ไม่ดีสำหรับ (ฉันจะไม่ใช้แอปพลิเคชันเว็บใน C!) และมันอยู่ที่นั่นเมื่อฉันต้องการ ไม่แปลกใจ.

ด้วย C ++ ฉันมีประสบการณ์ที่แตกต่าง ฉันเรียนรู้รอบปี 1995 และมันหมายถึงการเปลี่ยนกระบวนทัศน์ขนาดใหญ่จากความจำเป็นเป็น OOP ที่ดี! ฉันใช้มันสำหรับหลายโครงการจนถึงปี 1999 สองสามปีที่ฉันไม่ได้ใช้ C ++ และเมื่อฉันหยิบมันขึ้นมาอีกครั้ง (2008) ฉันพบคุณสมบัติใหม่จำนวนมากในภาษานี้อยู่แล้วและวางแผนมากขึ้น (แนะนำใน C ++ ในขณะเดียวกัน 11) ฉันรู้สึกว่าฉันต้องเรียนภาษาอีกครั้ง

ในฐานะนักพัฒนาฉันชอบภาษาที่เป็นผู้ใหญ่และมั่นคง ฉันชอบที่จะเรียนรู้ภาษาเพียงครั้งเดียวเพื่อทำความเข้าใจกับหลักการออกแบบของมันสิ่งที่ดีสำหรับมันและใช้มันเมื่อฉันคิดว่ามันเป็นเครื่องมือที่เหมาะสมสำหรับงาน ฉันชอบที่จะเรียนรู้ภาษาที่แตกต่างกันและเลือกภาษาที่ตรงกับความต้องการของฉัน (C, C ++, Java, Scala, Haskell และอื่น ๆ ) สิ่งที่ฉันไม่ชอบคือต้องเรียนรู้ภาษาเดียวกันซ้ำแล้วซ้ำอีกเพราะมันได้รับการพัฒนาเพิ่มเติมและเพิ่มเติมและไม่เคยครบกำหนด

IMHO ภาษาการเขียนโปรแกรมควรมีการออกแบบที่ชัดเจนเชื่อมโยงกันและมีเสถียรภาพ ฉันชอบแนวทางของนักออกแบบอย่าง Niklaus Wirth: ทุกครั้งที่เขารู้สึกว่าต้องการภาษาที่แตกต่างเขาออกแบบใหม่ (Pascal, Modula-2, Modula-3, Oberon) ฉันไม่ชอบภาษาที่มีการเปลี่ยนแปลงที่สำคัญทุก ๆ 5-10 ปี: พวกเขาเป็นเหมือนเป้าหมายที่เคลื่อนไหวและฉันไม่เคยรู้สึกว่ามันคุ้มค่ากับการลงทุนเวลาของฉันในการเรียนรู้พวกเขาในเชิงลึกเพราะเวอร์ชั่นที่ฉันกำลังเรียนรู้ในปัจจุบันอาจล้าสมัย ปีที่แล้ว

ในแง่นี้ C เป็นผู้ชนะ IMO: มันดีสำหรับแอปพลิเคชั่นบางตัวและไม่เหมาะสมกับผู้อื่น แต่มันมีข้อดีที่ง่ายและค่อนข้างเสถียร


4

ฉันประหลาดใจที่ไม่มีใครพูดถึงแย่ลงไปกว่านี้อีกแล้ว ณ จุดนี้อายุเกิน 20 ปี แต่ก็ยังคุ้มค่าที่จะอ่าน ในบางครั้งแก้มลิ้นเล็กน้อยมันเป็นงานที่ดีมากในการสรุปว่าทำไมสมควรได้รับชัยชนะเหนืออุดมคติโดยใช้ C (หลุมเทียบกับ LISP) เป็นหนึ่งในตัวอย่างหลักของมัน


สิ่งที่ฉันใส่ไว้ในหมวดหมู่ 'แย่ลง แต่ดีกว่า': อังกฤษ, PHP, Windows .. แมคโดนัลด์อาจจะ แม้ว่าฉันจะยังอิจฉา / ชอบภาษาสเปน, Python, Linux และ Artisan French Cooking; มากที่สุดถ้าไม่ได้โดยทั่วไป
ThorSummoner

1

คุณอาจต้องการถามว่าทำไมผู้คนถึงใช้ C แทน C ++ แม้ว่าข้อเท็จจริงที่ว่าเมื่อคุณมีคอมไพเลอร์ C คุณก็มักจะมีคอมไพเลอร์ C ++

  • ภาษา C ง่ายกว่า C ++ มาก ฉันไม่รู้จัก บริษัท ใด ๆ ที่ใช้มาตรฐาน C ++ ที่สมบูรณ์ในการประชุมการเข้ารหัส ดูรูปแบบรหัส C ++ ของ Google เป็นตัวอย่าง: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
  • C รวบรวมได้เร็วกว่ามาก ขอบคุณที่ขาดการคอมไพล์อย่างหนัก

ลิงก์นี้ใช้งานไม่ได้
ar2015

0

ไม่มีอะไร TIOBE เป็นดัชนีที่ไร้ค่า หากคุณดูที่การวัดจริงมันเป็นการคาดเดาที่ดีที่สุด


10
ความจริงที่ว่า TIOBE นั้นไร้ค่าไม่ได้หมายความว่า C จะไม่ได้รับความนิยม
Raynos

อย่างไรก็ตามแน่นอนว่ามันจะเอาชนะการโต้แย้งที่นำเสนอใน OP- ที่ C เป็นที่นิยมและดังนั้นจึงต้องมีการใช้งานบางอย่าง
DeadMG

2
การวัดความนิยมของ C ที่ดีขึ้นคือเกือบทุกแพลตฟอร์มมีคอมไพเลอร์ C
Raynos

@ Raynos: นั่นไม่ใช่การวัดเลย สิ่งเดียวที่หมายถึงคือมันใช้งานง่าย ไม่ได้พูดอะไรเกี่ยวกับจำนวนผู้ใช้หรือทำไม
DeadMG

2
ไม่ทั้งหมดฉันยอมรับจุดชมวิวตรงข้ามอย่างมีความสุข คำตอบหนึ่งบรรทัดของคุณดูเหมือนจะมีการคิดเพียงเล็กน้อยและคุณเป็นคนถกเถียงและไม่โต้ตอบกับคำตอบของคุณ
mattnz

0

ซอฟต์แวร์รุ่นเก่า

หลาย บริษัท ไม่สามารถเปลี่ยนแปลงได้ทันทีรหัสทั้งหมดเป็น C ++ หรือคล้ายกัน

หลาย บริษัท ไม่สามารถเปลี่ยนรหัสได้

บริษัท หลายแห่งสามารถที่จะเปลี่ยนรหัสของพวกเขา แต่ไม่สนใจหรือเป็น "ถูก"

บริษัท หลายแห่งกำลังอยู่ในขั้นตอนการย้ายถิ่นฐาน แต่ยังไม่เสร็จ

การวางแนววัตถุที่ซ่อนอยู่

(ไม่ใช่ Object Oriented) ซอร์สโค้ด C ออกแบบมาเป็นซอร์สโค้ด Object Oriented C แอปพลิเคชันที่จำลองแบบด้วย Object Orientation และเขียนด้วย "pure C" หรือเครื่องมือที่แปลจาก "C ++" หรือ OO progr อื่น ๆ lang เข้า C

ฉันได้ยินมาว่ามีวิดีโอเกมบางเกมที่ทำเช่นนั้น เครื่องมือข้ามแพลตฟอร์มบางตัวยังรวมถึงไลบรารีส่วนต่อประสานสายตาที่มองเห็นได้ของ GTK (GObject, GLibrary) สำหรับ GNome Linux OS


3
ครึ่งหลังของคำตอบนี้ต้องได้รับการ deobfuscated
มิส

@aramis ส่วนที่สองหมายถึง: รหัสจำนวนมากดูเหมือนจะเป็น donde โดยตรงใน "C" แต่จริงๆแล้วในภาษาอื่น ๆ และ traslated เป็น "C"
umlcat

0

ฉันเห็นผู้ตอบบางคนบอกว่าทำไม C ถึงได้รับความนิยมมากที่สุดมันใช้เวลานานมากในแพลตฟอร์มส่วนใหญ่ฟรีและอื่น ๆ

แต่สามารถพูดได้เหมือนกันเกี่ยวกับภาษาอื่น ๆ เช่น Pascal ฟรี - ฟรีและรองรับทุกแพลตฟอร์ม

ปาสคาลถูกประดิษฐ์ขึ้นในปี 1970, C ถูกประดิษฐ์ขึ้นในปี 1972 ดังนั้นฉันคิดว่าปาสคาลได้รับการคิดค้นมานานพอ ๆ กับซี

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

ฉันคิดว่ามันมีวิธีการเขียนโปรแกรมภาษามากเกินไป ในฐานะโปรแกรมเมอร์เราต้องรู้จักสิ่งที่สำคัญที่สุด แต่ท้ายที่สุดไม่จำเป็นต้องทำเช่นนั้น ภาษาการเขียนโปรแกรมหนึ่งภาษาสามารถใช้งานได้ตั้งแต่การสร้างเว็บไซต์ไปจนถึงเกมคอมพิวเตอร์ iOS

ดูเหมือนว่า C จะเป็นภาษาสากล แต่ฉันหวังว่ามันจะเป็นอะไรอย่าง Object Pascal ทำไม Object Pascal มันเป็นภาษาการเขียนโปรแกรมที่อ่านง่ายขึ้นรหัส OOP มีแนวโน้มที่จะนำมาใช้ซ้ำได้มากขึ้นและมีข้อบกพร่องน้อยลง (ในความคิดของฉัน) มากกว่า C

แอปพลิเคชันขนาดใหญ่มากจัดการได้ง่ายกว่าด้วย Object Pascal กว่า C / C ++

ว่าจะมีภาษาโปรแกรมที่เป็นบางอย่างตั้งแต่ '70 และไม่ชอบภาษาที่เปลี่ยนทุก 5 หรือ 10 ปี เมื่อเวลาผ่านไปความก้าวหน้าทางเทคโนโลยีและวิธีการเขียนโปรแกรมได้รับการปรับปรุง หากมีการเปลี่ยนแปลงภาษาอย่างมากทุกสองสามปีก็อาจจะไม่ได้รับการพิจารณาอย่างรอบคอบจากนักออกแบบ แต่ 1970-2012 เกือบครึ่งศตวรรษก็โอเคที่จะเปลี่ยนแปลงภาษาในเวลานั้นเพื่อรวมความก้าวหน้าที่ใช้ในการพัฒนาซอฟต์แวร์

C เองได้รับการแก้ไขหลายครั้ง ดังนั้นจึงไม่ดีไปกว่าภาษาอื่น ๆ ในมุมมองนั้น


3
ปัญหาอย่างหนึ่งของ Pascal คือภาษารุ่น "เป็นทางการ" ไม่สามารถใช้งานคุณสมบัติที่จำเป็นได้ ทั้งพีซีและ Macintosh มีคอมไพเลอร์ภาษาปาสคาลที่ใช้งานได้ดีกว่าคอมไพเลอร์ C ที่มีอยู่ในเวลานั้น แต่คอมไพเลอร์ดังกล่าวได้เพิ่มส่วนขยายภาษาซึ่งไม่ได้รับการสนับสนุนจากมาตรฐาน "ทางการ" ใด ๆ ฉันคิดว่าหากมีความพยายามที่จะสร้างมาตรฐานอย่างเป็นทางการซึ่งประมวลผลส่วนขยายดังกล่าว Pascal อาจแทนที่การแฮ็คของภาษาที่รู้จักกันในชื่อ "C"
supercat

0

เนื่องจาก C มีฐานผู้ใช้จำนวนมาก ใช่มันเป็นเรื่องเล็กน้อย -22 แต่เมื่อฉันถามคำถามเกี่ยวกับ C มากกว่าใน StackOverflow ฉันได้รับคำตอบเกือบทันที คำถามเดียวกันเกี่ยวกับ Python อาจใช้เวลาหลายชั่วโมงกว่าจะได้รับคำตอบ

สำหรับ C ++ นั้น IMO นั้นซับซ้อนกว่าในการเรียนรู้ นอกจากนี้หลังจากลองใช้ OOP มา 10 ปีแล้วฉันพบว่ามันไม่ได้มีประโยชน์เสมอไปและบ่อยครั้งที่การใช้โปรแกรมแบบขั้นตอนแทนทำได้ง่ายกว่า


คุณเปรียบเทียบถามคำถาม SO สำหรับ C # หรือ Java?
ริ้น

@ เพียงแค่มันเป็นตัวอย่างที่แยกได้ของ C v Python (ซึ่งมีวิธีถามคำถามเพิ่มเติม!) ผมมีประสบการณ์กับ C # ไม่มี (ไม่คุณสังเกตเห็นฉันไม่ได้ถามคำถาม SO สำหรับ C # หรือ JAV?)
ปึก

เฮ้ฉันพบชุมชน #python บน StackOverflow เกือบจะเร็วสุด ๆ เสมอ แม้ว่าฉันจะแปลกใจถ้าชุมชน C ก้าวล้ำกว่าชุมชนจาวาสคริปต์เพื่อความรวดเร็วในการตอบ (ส่วนใหญ่เป็นเพราะปริมาณ)
ThorSummoner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.