เหตุใดการใช้ไลบรารี C ++ จึงมีความซับซ้อน


14

ก่อนอื่นฉันต้องการทราบว่าฉันรัก C ++ และฉันเป็นหนึ่งในคนเหล่านั้นที่คิดว่าการเขียนโค้ดใน C ++ ง่ายกว่า Java ยกเว้นสิ่งเล็ก ๆ น้อย ๆ อย่างหนึ่ง: ห้องสมุด

ใน Java คุณสามารถเพิ่ม jar ลงใน build path และเสร็จแล้ว

ใน C ++ คุณจะต้องตั้งค่าหลายพา ธ สำหรับไฟล์ส่วนหัวและไลบรารีเอง ในบางกรณีคุณต้องใช้แฟล็กบิลด์พิเศษ ฉันใช้ Visual Studio, Code Blocks เป็นหลักและไม่มี IDE เลย ตัวเลือกทั้ง 3 ไม่แตกต่างกันมากเมื่อพูดถึงการใช้ไลบรารีภายนอก

ฉันสงสัยว่าทำไมไม่มีทางเลือกที่ง่ายกว่านี้? เช่นเดียวกับการมีไฟล์. zip แบบพิเศษที่มีทุกสิ่งที่คุณต้องการในที่เดียวเพื่อให้ IDE สามารถทำงานทั้งหมดให้คุณได้ มีอุปสรรคทางเทคนิคสำหรับสิ่งนี้หรือไม่?

คำตอบ:


15

C ++ ถูกออกแบบมาเพื่อปรับปรุงภาษา C โดยการทำให้ภาษาอัตโนมัติง่ายขึ้นและมากขึ้นด้วยการสนับสนุนการเขียนโปรแกรมเชิงวัตถุ แต่มันไม่ได้ทำอะไรเพื่อเปลี่ยนแปลงหรือปรับปรุงวิธีที่ C จัดการกับไลบรารีภายนอกและไฟล์ส่วนหัว C ++ ไม่มีระบบโมดูลเช่นภาษาที่ทันสมัยกว่า - มันยังใช้ C preprocessor และระบบ linker เนื่องจากหนึ่งในเป้าหมายที่ระบุไว้ของ C ++ นั้นเป็นความเข้ากันได้ย้อนหลังกับรหัส C จึงไม่น่าแปลกใจจริงๆ ระบบโมดูล C ++ ใด ๆ จะต้องทำงานควบคู่ไปกับระบบส่วนหัว C-file / linker เก่า คณะกรรมการมาตรฐาน C ++ ไม่ได้เข้ามาออกแบบระบบโมดูลที่ทันสมัยกว่านี้ (แม้ว่าพวกเขากำลังทำงานอยู่โปรดดูความคิดเห็นของ Klaim ด้านล่าง)


8
บรรทัดสุดท้ายนั้นไม่ถูกต้องทั้งหมด: ระบบโมดูลทำงานมาตั้งแต่ปี 2004 (เอกสารแรก) แต่บอกเป็นนัยว่างานมากจนไม่สามารถมองเห็นได้สำหรับมาตรฐานสุดท้ายเนื่องจากจะไม่มีการใช้งาน สนับสนุนข้อเสนอ การใช้งานนั้นอยู่ใน wortk (พร้อมกับร่างอื่น ๆ ) เพื่อเริ่มต้นมาตรฐาน C ++ ถัดไป ไม่ใช่ว่ามันไม่ใช่ลำดับความสำคัญของนักออกแบบ C ++ มันเป็นเพียงหนึ่งในคุณสมบัติเหล่านี้ที่คุณไม่สามารถจะผิดได้ต้องรักษาคอมมิชชันย้อนยุค (ด้วยรหัส C ส่วนใหญ่และ C ++ 11) และยากที่จะเข้าใจผิด ดังนั้นจึงต้องใช้เวลามาก
Klaim

น่ากลัว ขอบคุณ Klaim สำหรับข้อมูล จะตรวจสอบมันอย่างแน่นอน นั่นเป็นเรื่องที่น่าตื่นเต้นมาก :)
Pijusn

ภาษาส่วนใหญ่อยู่ห่างจากธุรกิจของการเชื่อมโยงมาตรฐานเนื่องจากกลไกอาจแตกต่างกันระหว่างระบบปฏิบัติการ ลักษณะการทำงานของที่ใดก็ได้ของ Java ต้องอาศัยการเชื่อมโยงและรูปแบบห้องสมุดเฉพาะ ไม่มีอะไรผิดปกติกับสิ่งนั้น แต่นำค่าใช้จ่ายบางอย่างที่อาจไม่เป็นที่ต้องการในทุกกรณี
Blrfl

ตรงไปตรงมาฉันค่อนข้างกลัวที่จะอ่านว่าคณะกรรมการมาตรฐาน C ++ ทำงานที่ระบบโมดูลสำหรับภาษานั้น C ++ เป็นภาษาที่มีขนาดใหญ่และซับซ้อนอยู่แล้วและการพยายามเพิ่มคุณสมบัติที่ละเอียดอ่อนลงไปนั้นอาจมีความเสี่ยงสูง ตามที่ระบุไว้โดย Karl Bielefeldt ที่นี่ด้านล่างปัญหานี้พบวิธีแก้ปัญหาที่ดีในระดับแพลตฟอร์ม (ระบบแพ็คเกจ Linux) และอาจได้รับการแก้ไขอย่างดีจาก IDEs ส่วนใหญ่ด้วยความพยายามเพียงเล็กน้อย ดูที่ Qt Library และ Qt Creator จัดการกับปัญหานี้อย่างไร
AlexBottoni

1
@ AlexBottoni ฉันสงสัยจริงๆว่าพวกเขาจะเกิดขึ้นกับระบบโมดูลที่เป็นมาตรฐานได้ตลอดเวลาในศตวรรษนี้ พวกเขาไม่ได้รวมแนวคิดใน C ++ 11 เพราะพวกเขาไม่เห็นด้วยกับการใช้งานที่แม่นยำ ระบบโมดูลที่ทำงานร่วมกับระบบ header / linker นั้นมีความยุ่งยากมากกว่าและเราอาจจะไม่เห็นมันเป็นเวลานาน
ชาร์ลส์ซัลเวีย

2

มันไม่ใช่อุปสรรคทางเทคนิค บน Linux "ไฟล์ซิปพิเศษ" ของคุณคือแพ็คเกจไลบรารี-dev ที่คุณติดตั้งด้วยตัวจัดการแพคเกจและการตั้งค่าการรวมและการตั้งค่าสถานะของลิงเกอร์นั้นง่ายเหมือนการเพิ่มสองบรรทัดลงในconfigure.acที่ใช้pkg-configเพื่อตั้งค่าต่างๆ

Pkg-config พร้อมใช้งานสำหรับ Windows ด้วยเช่นกัน แต่ปัญหาและอุปสรรคทางวัฒนธรรมได้ขัดขวางการยอมรับอย่างกว้างขวาง Unix มีประวัติที่แข็งแกร่งในการเปิดใช้งานการพกพาโดยการแจกจ่ายซอร์สโค้ดดังนั้นพวกเขาจึงมีเครื่องมือในการพัฒนาฟรี Windows มีประวัติที่แข็งแกร่งในการสนับสนุนการกระจายแบบไบนารีเท่านั้นและนักพัฒนาการเรียกเก็บเงินสำหรับเครื่องมือ เมื่อคุณสร้างห้องสมุดขายเงินของคุณมันไม่สมเหตุสมผลเลยที่จะทำให้บุคคลที่สามสามารถให้บริการห้องสมุดเหล่านั้นได้ง่ายขึ้น

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