ข้อดีของการใช้ไลบรารี C ++ Boost คืออะไร? [ปิด]


123

ดังนั้นฉันได้อ่านและดูเหมือนว่าไลบรารี Boost จะถูกใช้บ่อยมากในทางปฏิบัติ (ไม่ใช่ที่ร้านของฉัน) ทำไมถึงเป็นแบบนี้? และอะไรที่ทำให้มันยอดเยี่ยมมาก?


10
Nitpick: ไม่ใช่คำย่อดังนั้นจึงเป็น Boost (หรือเพิ่ม) ไม่ใช่ BOOST เว้นแต่คุณจะตะโกนแน่นอน;)
Niklas

10
@Niklas นอกจากนี้ยังเพิ่มเมื่อคุณใช้มาโครตัวประมวลผลล่วงหน้าใด ๆ = P
KitsuneYMG

@KitsuneYMG ฉันเห็นว่าคำถามได้รับการแก้ไขแล้ว แต่ฉันค่อนข้างมั่นใจว่า OP ไม่ได้ใช้ช่องคำถามสำหรับการแก้ไขรหัสตัวประมวลผลล่วงหน้า;)
Niklas

3
@Nikias ฉันแค่เป็นคนฉลาด = P. ผู้ชายต้องมีงานอดิเรก
KitsuneYMG

C ++ เป็นอึโดยไม่มี Boost :)
TriCore

คำตอบ:


135

Boostถูกนำมาใช้อย่างกว้างขวางเนื่องจาก:

  • เป็นโอเพ่นซอร์สและตรวจสอบโดยเพื่อน
  • มีฟังก์ชั่นไม่เชื่อเรื่องพระเจ้าของแพลตฟอร์มที่หลากหลายซึ่ง STL พลาดไป
  • มันเป็นส่วนเสริมของ STL มากกว่าการทดแทน
  • นักพัฒนา Boost หลายคนอยู่ในคณะกรรมการมาตรฐาน C ++ ในความเป็นจริงหลายส่วนของ Boost ได้รับการพิจารณาให้รวมอยู่ในไลบรารีมาตรฐาน C ++ ถัดไป
  • มีการบันทึกไว้อย่างดี
  • ใช้ใบอนุญาตจะช่วยให้การรวมในการเปิดแหล่งที่มาและแหล่งปิดโครงการ
  • คุณสมบัติของมันมักจะไม่ขึ้นอยู่กับแต่ละอื่น ๆ ดังนั้นคุณสามารถเชื่อมโยงเฉพาะส่วนที่คุณต้องการได้ [ ความคิดเห็นของLuc Hermitte ]

5
นอกจากนี้เรายังสามารถพูดได้อีกด้วยว่าการเพิ่มไลบรารีย่อยสามารถใช้แยกกันได้ (ยกเว้นไลบรารีหลักบางส่วน) ไม่ใช่เพราะเราใช้ boost.shared_ptr ที่เราต้องใช้ boost.ublas เป็นต้น
Luc Hermitte

ฉันชอบดูคำตอบที่ดูเหมือนรายการสารานุกรม ทำให้ง่ายต่อการรับวัสดุจำนวนมาก +1
Tyler Smith

ดูเหมือนว่าทุกห้องสมุดจะขึ้นอยู่กับ MPL ...
Viktor Sehr

Boost อนุญาตให้เขียนครั้งเดียวการพัฒนาข้ามแพลตฟอร์มและการใช้งานถูกต้องหรือไม่?
FilBot3

ฟรีสำหรับการใช้งานเชิงพาณิชย์หรือไม่?
Mayur

39

จากหน้าแรก:

"... หนึ่งในโครงการห้องสมุด C ++ ที่ได้รับการยกย่องและได้รับการออกแบบอย่างเชี่ยวชาญที่สุดในโลก" - Herb Sutter และ Andrei Alexandrescu มาตรฐานการเข้ารหัส C ++

"ข้อ 55: ทำความคุ้นเคยกับ Boost" - Scott Meyers, C ++ ที่มีประสิทธิภาพ, 3rd Ed

"วิธีแก้ปัญหาที่ชัดเจนสำหรับโปรแกรมเมอร์ส่วนใหญ่คือการใช้ไลบรารีที่ให้บริการแพลตฟอร์มที่หรูหราและมีประสิทธิภาพโดยไม่ขึ้นกับบริการที่จำเป็นตัวอย่างคือ BOOST ... " - Bjarne Stroustrup, Abstraction, libraries และประสิทธิภาพใน C ++

ดังนั้นจึงเป็นห้องสมุดที่ใช้กันอย่างแพร่หลายและเป็นที่ยอมรับ แต่ทำไมคุณถึงต้องการ?

ถ้าคุณต้องการ:

  • regex
  • การผูกฟังก์ชัน
  • ฟังก์ชันแลมบ์ดา
  • การทดสอบหน่วย
  • ตัวชี้สมาร์ท
  • ไม่สามารถคัดลอกหรือไม่ก็ได้
  • การทำให้เป็นอันดับ
  • วันที่ทั่วไป
  • ระบบไฟล์แบบพกพา
  • บัฟเฟอร์แบบวงกลม
  • config utils
  • ไลบรารีรูปภาพทั่วไป
  • TR1
  • หัวข้อ
  • uBLAS

และอื่น ๆ อีกมากมายเมื่อคุณรหัสใน C ++ มีลักษณะที่เพิ่ม


23

เนื่องจากพวกเขาเพิ่มสิ่งที่ขาดหายไปหลายอย่างลงในไลบรารีมาตรฐานดังนั้นบางส่วนจึงรวมอยู่ในมาตรฐาน

Boost คนไม่ได้โกหก:

ทำไมองค์กรจึงควรใช้ Boost?

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

ไลบรารี Boost สิบแห่งรวมอยู่ใน TR1 ของไลบรารีมาตรฐาน C ++ ดังนั้นจึงมีกำหนดสำหรับการสร้างมาตรฐานเต็มรูปแบบในภายหลัง ไลบรารี Boost เพิ่มเติมอยู่ในท่อสำหรับ TR2 การใช้ไลบรารี Boost ช่วยให้องค์กรมีจุดเริ่มต้นในการนำเทคโนโลยีใหม่ ๆ มาใช้

หลายองค์กรใช้โปรแกรมที่ใช้กับ Boost อยู่แล้วเช่น Adobe Acrobat Reader 7.0


16

คลาส Boost สองสามอย่างมีประโยชน์มาก (shared_ptr) แต่ฉันคิดว่าพวกเขาค่อนข้างน่าเบื่อกับลักษณะและแนวคิดใน Boost เวลาในการคอมไพล์และขนาดไบนารีขนาดใหญ่นั้นบ้าไปแล้วกับ Boost เช่นเดียวกับในกรณีของโค้ดเทมเพลตใด ๆ จะต้องมีความสมดุล ฉันไม่แน่ใจว่า Boost พบหรือไม่


10
คุณลืมไปว่า Boost ไม่ใช่ไลบรารีเดียว แต่มีมากมาย นอกจากนี้คุณต้องชดเชยขนาดใหญ่และเวลาในการรวบรวมเทียบกับฟังก์ชันการทำงาน ลักษณะและแนวคิดเป็นตัวช่วยในการพัฒนา เวลารวบรวมเป็นราคาเพียงเล็กน้อยที่ต้องจ่าย
Konrad Rudolph

8

เพิ่มไลบรารีที่ช่วยให้สามารถเขียนโปรแกรม C ++ ได้ทันสมัยมากขึ้น

จากประสบการณ์ของฉันโปรแกรมเมอร์ C ++ หลายคนเป็นโปรแกรมเมอร์ C ++ ในช่วงต้นทศวรรษ 1990 ซึ่งค่อนข้างเขียนคลาส C ++ ไม่ใช่การใช้งานทั่วไปมากนัก วิธีการที่ทันสมัยมากขึ้นใช้ generics เพื่อสร้างซอฟต์แวร์ร่วมกันในลักษณะที่เหมือนกับภาษาไดนามิกมากขึ้น แต่คุณยังคงได้รับการตรวจสอบประเภท / ประสิทธิภาพในตอนท้าย มันดูน่าเกลียดไปหน่อย แต่เมื่อคุณแก้ไขปัญหาทางไวยากรณ์ได้แล้วมันก็ค่อนข้างดี Boost ช่วยให้คุณมีเครื่องมือมากมายในการเขียนสิ่งต่างๆได้อย่างง่ายดาย ตัวชี้สมาร์ทฟังก์ชั่น lambdas การผูก ฯลฯ จากนั้นก็มีไลบรารีบูสต์ที่ใช้ประโยชน์จากวิธีการเขียน C ++ แบบใหม่นี้เพื่อจัดหาสิ่งต่างๆเช่นเครือข่าย regex ฯลฯ ฯลฯ ...

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


8

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

เหตุผลสำคัญในการพิจารณาใช้ BOOST ได้แก่ :

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

ห้องสมุดที่อธิบายไว้ในบรรทัดหรือสองที่นี่: http://www.boost.org/doc/libs/




3

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

อย่างไรก็ตามร้านค้าส่วนใหญ่ไม่ได้ใช้ Boost เนื่องจากเป็น External Dependency และในความเป็นจริงการลดการพึ่งพาภายนอกก็มีความสำคัญเช่นกัน



2

ฉันใช้ไลบรารีระบบไฟล์ออกไปเล็กน้อยและ boost :: shared_ptr ก็ค่อนข้างดี ฉันได้ยินว่ามันทำอย่างอื่นด้วย

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