ACE vs Boost vs POCO [ปิดแล้ว]


97

ฉันทำงานกับBoost C ++ Librariesมาระยะหนึ่งแล้ว ฉันชอบไลบรารี Boost Asio C ++สำหรับการเขียนโปรแกรมเครือข่าย อย่างไรก็ตามผมได้แนะนำให้รู้จักกับสองห้องสมุดอื่น ๆ : POCOและการปรับเปลี่ยนการสื่อสารสิ่งแวดล้อมกรอบ (ACE) ฉันต้องการทราบความดีและความเลวของแต่ละ


3
ACE เป็น "สุดยอดการเขียนโปรแกรมเครือข่ายมีดสวิส" สำหรับการเขียนโปรแกรม C ++ แต่ล่าสุดฉันตรวจสอบแล้วว่ามันเป็นการพึ่งพาสัตว์ประหลาดขนาดใหญ่ในตัวเอง
ไม่มี

คำตอบ:


92

ดังที่ rdbound กล่าวไว้ Boost มีสถานะ "near STL" ดังนั้นหากคุณไม่ต้องการไลบรารีอื่นให้ใช้ Boost อย่างไรก็ตามฉันใช้POCOเพราะมีข้อดีบางอย่างสำหรับสถานการณ์ของฉัน ข้อดีของ POCO IMO:

  • ไลบรารีเธรดที่ดีขึ้นโดยเฉพาะการใช้งาน Active Method ฉันชอบความจริงที่ว่าคุณสามารถกำหนดลำดับความสำคัญของเธรดได้

  • boost::asioห้องสมุดเครือข่ายที่ครอบคลุมมากกว่า อย่างไรก็ตามboost::asioยังเป็นห้องสมุดที่ดีมาก

  • รวมฟังก์ชันที่ไม่ได้อยู่ใน Boost เช่น XML และอินเทอร์เฟซฐานข้อมูลเพื่อตั้งชื่อไม่กี่

  • รวมเป็นไลบรารีเดียวมากกว่า Boost

  • มีรหัส C ++ ที่สะอาดทันสมัยและเข้าใจได้ ฉันพบว่ามันง่ายกว่าที่จะเข้าใจมากกว่าไลบรารี Boost ส่วนใหญ่ (แต่ฉันไม่ใช่ผู้เชี่ยวชาญด้านการเขียนโปรแกรมเทมเพลต :))

  • สามารถใช้งานได้บนแพลตฟอร์มจำนวนมาก

ข้อเสียบางประการของ POCO คือ:

  • มีเอกสาร จำกัด สิ่งนี้ค่อนข้างหักล้างข้อเท็จจริงที่ว่าแหล่งที่มานั้นเข้าใจง่าย

  • มีชุมชนและฐานผู้ใช้ที่เล็กกว่าอย่าง Boost ดังนั้นหากคุณตั้งคำถามใน Stack Overflow เช่นโอกาสในการได้รับคำตอบจะน้อยกว่า Boost

  • ยังคงมีให้เห็นว่าจะรวมเข้ากับมาตรฐาน C ++ ใหม่ได้ดีเพียงใด คุณรู้แน่ว่ามันจะไม่เป็นปัญหาสำหรับ Boost

ฉันไม่เคยใช้ ACE ดังนั้นฉันจึงไม่สามารถแสดงความคิดเห็นได้ จากสิ่งที่ฉันได้ยินมาผู้คนพบว่า POCO ทันสมัยและใช้งานง่ายกว่า ACE

คำตอบบางส่วนสำหรับความคิดเห็นของ Rahul:

  1. ฉันไม่รู้เกี่ยวกับอเนกประสงค์และขั้นสูง ไลบรารีเธรด POCO มีฟังก์ชันบางอย่างที่ไม่ได้อยู่ใน Boost: ActiveMethodand Activity, and ThreadPool. นอกจากนี้เธรด IMO POCO ยังใช้งานและเข้าใจได้ง่ายกว่า แต่นี่เป็นประเด็นเฉพาะ

  2. ไลบรารีเครือข่าย POCO ยังให้การสนับสนุนโปรโตคอลระดับสูงกว่าเช่น HTTP และ SSL (อาจอยู่ในboost::asioนั้นด้วย แต่ฉันไม่แน่ใจ?)

  3. พอใช้.

  4. ไลบรารีแบบบูรณาการมีข้อดีคือมีการเข้ารหัสเอกสารและ "รูปลักษณ์" ทั่วไปที่สอดคล้องกัน

  5. การข้ามแพลตฟอร์มเป็นคุณสมบัติที่สำคัญของ POCO นี่ไม่ใช่ข้อได้เปรียบที่เกี่ยวข้องกับ Boost

อีกครั้งคุณควรพิจารณา POCO เฉพาะในกรณีที่มีฟังก์ชันบางอย่างที่คุณต้องการและไม่มีอยู่ใน Boost


1
จากสิ่งเล็กน้อยที่ฉันได้เรียนรู้เกี่ยวกับ POCO สิ่งที่ดูเหมือนจะไม่เพิ่มขึ้น: 1. เพิ่มเธรดดูเหมือนหลากหลายและล้ำหน้ากว่า 2. POCO มีความหลากหลายมากกว่าด้วยวิธีใด? 3. ฉันสนใจแค่การสร้างเครือข่ายเท่านั้น XML และฐานข้อมูลไม่เกี่ยวกับฉัน 4. บูรณาการเป็นห้องสมุดเดียว? ฉันไม่แน่ใจว่านั่นเป็นสิ่งที่ดีหรือไม่ดี? 5. ฉันเชื่อว่า Boost (และนั่นก็เพื่อเพิ่ม :: asio ด้วย) ก็ค่อนข้างข้ามแพลตฟอร์ม
rahul

@ Rahul ฉันพยายามตอบบางประเด็นของคุณในคำตอบ
Dani van der Meer

ฉันไม่ได้ดู POCO เมื่อเร็ว ๆ นี้ แต่เมื่อฉันดูเมื่อสองสามปีก่อนฉันถูกเลื่อนออกไปเนื่องจากส่วนประกอบต่างๆดูเหมือนจะใช้ใบอนุญาตผสมกัน บางคนใช้สิทธิ์การใช้งาน Boost ส่วนอื่น ๆ เป็น GPL ข้อมูลเข้ารหัสบางอย่างจำเป็นต้องมีใบอนุญาตสำหรับการใช้งานเชิงพาณิชย์ ฉันไม่รู้ว่าสถานการณ์การออกใบอนุญาตในปัจจุบันเป็นอย่างไรกับ POCO แต่ฉันจะพิจารณาอย่างรอบคอบก่อนที่จะใช้
Ferruccio

10
POCO ได้รับอนุญาตทั้งหมดภายใต้ใบอนุญาต Boost (สำหรับการอ้างอิงในอนาคต)
Brendan Long

1
ข้อดีอย่างหนึ่งของ Poco คือมีเวลาคอมไพล์ที่เร็วกว่ามาก เนื่องจากโดยทั่วไป Boost จะอาศัยโค้ดจำนวนมากในส่วนหัวเวลาคอมไพล์อาจช้า ด้วย poco มีการเชื่อมโยงแบบไดนามิกมากขึ้นซึ่งช่วยลดเวลาในการคอมไพล์ นอกจากนี้ยังมีข้อได้เปรียบด้านความปลอดภัยเนื่องจากผู้ใช้สามารถอัปเดต. so / .dll โดยไม่ต้องคอมไพล์ใหม่ทุกอย่าง
ericcurtin

28

ฉันใช้ทั้งสามแล้วนี่คือ 0.02 ดอลลาร์ของฉัน

ฉันอยากจะโหวตให้ Doug Schmidt และเคารพในงานทั้งหมดที่เขาทำ แต่พูดตามตรงว่าฉันพบว่า ACE มีปัญหาเล็กน้อยและใช้งานยาก ฉันคิดว่าห้องสมุดต้องรีบูต มันยากที่จะพูดแบบนี้ แต่ฉันจะหลีกเลี่ยง ACE ในตอนนี้เว้นแต่จะมีเหตุผลที่น่าสนใจในการใช้ TAO หรือคุณต้องการฐานรหัสเดียวเพื่อเรียกใช้ C ++ บนทั้ง Unix และ Windows TAO นั้นยอดเยี่ยมสำหรับปัญหาที่ยากหลายประการ แต่ช่วงการเรียนรู้นั้นเข้มข้นและมีเหตุผลที่ CORBA มีนักวิจารณ์จำนวนมาก ฉันเดาว่าแค่ทำการบ้านของคุณก่อนที่จะตัดสินใจใช้อย่างใดอย่างหนึ่ง

หากคุณกำลังเขียนโค้ดใน C ++ การเพิ่มประสิทธิภาพอยู่ในความคิดของฉันไม่ใช่เรื่องง่าย ฉันใช้ไลบรารีระดับต่ำจำนวนหนึ่งและพบว่าจำเป็น grep อย่างรวดเร็วของโค้ดของฉันแสดง shared_ptr, program_options, regex, bind, serialization, foreach, property_tree, filesystem, tokenizer, ส่วนขยาย iterator ต่างๆ alogrithm และ mem_fn สิ่งเหล่านี้ส่วนใหญ่เป็นฟังก์ชันระดับต่ำที่ควรมีอยู่ในคอมไพเลอร์ ไลบรารีบูสต์บางไลบรารีเป็นแบบทั่วไป อาจเป็นงานที่ทำให้พวกเขาทำในสิ่งที่คุณต้องการ แต่ก็คุ้มค่า

Poco คือชุดของคลาสยูทิลิตี้ที่ให้ฟังก์ชันการทำงานสำหรับงานทั่วไปที่เป็นรูปธรรม ฉันพบว่าห้องสมุดมีการเขียนอย่างดีและใช้งานง่าย ฉันไม่ต้องใช้เวลามากในการศึกษาเอกสารหรือเขียนโปรแกรมทดสอบโง่ ๆ ฉันกำลังใช้ Logger, XML, Zip และ Net / SMTP ฉันเริ่มใช้ Poco เมื่อ libxml2 ทำให้ฉันหงุดหงิดเป็นครั้งสุดท้าย มีคลาสอื่น ๆ ที่ฉันสามารถใช้ได้ แต่ยังไม่ได้ลองเช่น Data :: MySQL (ฉันพอใจกับ mysql ++) และ Net :: HTTP (ฉันพอใจกับ libCURL) ในที่สุดฉันจะลองใช้ Poco ที่เหลือ แต่นั่นไม่ใช่สิ่งสำคัญในตอนนี้


คำอธิบายที่ดีขอบคุณ
Amir Naghizadeh

21

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

สิ่งที่ทำให้ POCO แตกต่างอย่างแท้จริงคือการออกแบบที่ปรับขนาดและอินเทอร์เฟซที่มีความพร้อมใช้งานของไลบรารีที่หลากหลายซึ่งชวนให้นึกถึงสิ่งที่ได้รับจาก Java หรือ C # ในเวลานี้สิ่งที่ขาดอย่างมากที่สุดจาก POCO คือ IO แบบอะซิงโครนัส


11

ฉันใช้ ACE สำหรับแอปพลิเคชันการเก็บข้อมูลประสิทธิภาพสูงมากพร้อมข้อ จำกัด แบบเรียลไทม์ เธรดเดียวจัดการ I / O จากการเชื่อมต่อซ็อกเก็ต TCP / IC กว่าสามสิบรายการและพอร์ตอนุกรม โค้ดทำงานบน Linux ทั้ง 32 และ 64 บิต คลาส ACE บางคลาสที่ฉันใช้ ได้แก่ ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector ACE เป็นปัจจัยสำคัญที่นำไปสู่ความสำเร็จของโครงการของเรา ต้องใช้ความพยายามอย่างมากในการทำความเข้าใจวิธีใช้คลาส ACE ฉันมีหนังสือทั้งหมดที่เขียนเกี่ยวกับ ACE เมื่อใดก็ตามที่ฉันต้องขยายฟังก์ชันการทำงานของระบบของเราโดยทั่วไปจะใช้เวลาสักพักในการศึกษาสิ่งที่ต้องทำและจำนวนรหัสที่ต้องการก็น้อยมาก ฉันพบว่า ACE น่าเชื่อถือมาก ฉันยังใช้โค้ดเล็กน้อยจาก Boost ฉันไม่เห็นฟังก์ชันเดียวกันใน Boost


10

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

ตัวอย่างเช่นส่วนหลักของ ACE ประกอบด้วยคลาสหลายร้อยคลาสที่เริ่มต้นด้วย "ACE_" ดูเหมือนว่าพวกเขาละเลยเนมสเปซมานานหลายทศวรรษ

นอกจากนี้ชื่อชั้นเรียนของ ACE หลายชื่อก็ไม่ได้ให้ข้อมูลที่เป็นประโยชน์เช่นกัน หรือเดาได้ว่าชอบACE_Dev_Poll_Reactor_NotifyหรือACE_Proactor_Handle_Timeout_Upcallใช้เรียนอะไรได้บ้าง?

นอกจากนี้เอกสารประกอบของ ACE ยังขาดอยู่จริงๆดังนั้นหากคุณไม่ต้องการเรียนรู้ ACE ด้วยวิธีที่ยาก (มันยากมากหากไม่มีเอกสารประกอบที่ดี .. ) ฉันไม่แนะนำให้ใช้ ACE เว้นแต่คุณจะต้องการTAOสำหรับCORBAจริงๆถ้าคุณ ไม่จำเป็นต้อง CORBA ไปข้างหน้าและใช้ห้องสมุดที่ทันสมัย ​​..


7

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


6

Boost มีสถานะ "ใกล้ STL" เนื่องจากจำนวนคนในคณะกรรมการมาตรฐาน C ++ ซึ่งเป็นผู้พัฒนา Boost ด้วย Poco และ ACE ไม่ได้รับประโยชน์ดังกล่าวและจากประสบการณ์เล็ก ๆ น้อย ๆ ของฉัน Boost เป็นที่แพร่หลายมากขึ้น

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


4

Boost นั้นยอดเยี่ยมมากฉันได้ยิน แต่สิ่งดีๆเกี่ยวกับ POCO (แต่ไม่เคยใช้) แต่ฉันไม่ชอบ ACE และจะหลีกเลี่ยงในอนาคต แม้ว่าคุณจะพบแฟน ๆ ของ ACE คุณจะพบผู้ว่าหลายคนที่คุณไม่ได้รับจากการเพิ่มหรือ poco (IME) สำหรับฉันที่ส่งสัญญาณที่ชัดเจนว่า ACE ไม่ใช่เครื่องมือที่ดีที่สุด (แม้ว่าจะทำตามที่กล่าวก็ตาม บนกระป๋อง)


10
ACE อยู่มานานมากและต้องรองรับแพลตฟอร์มเดิมมากมายในช่วงหลายปีที่ผ่านมา นี่เป็นหนึ่งในสาเหตุที่ทำให้ Boost ไม่ทันสมัย งานวิจัยและวรรณกรรมที่มีประโยชน์อย่างมากมาจาก ACE (ดู CV ของ Doug Schmidt) ที่คนอื่น ๆ สามารถใช้ประโยชน์และต่อยอดได้ โดยธรรมชาติแล้วคนอื่น ๆ จะเรียนรู้จากข้อผิดพลาดที่เกิดขึ้นในห้องสมุดเก่าและปรับปรุงสิ่งเหล่านั้น คนอื่น ๆ ก็จะคิดวิธีใหม่ ๆ ในการทำสิ่งที่คล้ายกันเช่นกัน อย่าขยันกับ ACE มากเกินไป ฉันยังเป็นแฟนตัวยงของ Boost เป็นที่ยอมรับฉันไม่เคยใช้ POCO
โมฆะ

6
ACE เริ่มต้นในช่วงเวลาที่คอมไพเลอร์ไม่สามารถใช้งานร่วมกันได้ (ยังไม่มีมาตรฐาน) และเทมเพลตเป็นฝันร้ายที่สมบูรณ์ (1996/1997) และมีแพลตฟอร์มที่คล้าย Unix กว่าร้อยแพลตฟอร์ม ฉันประเมิน ACE + TAO สำหรับโปรเจ็กต์ - ในที่สุดเราก็ตกลงกับ OmniORB TAO ก็ยังไม่บรรลุนิติภาวะมากจนแทบจะแตกทุกครั้งที่ออกใหม่ ในทางกลับกันเอซเป็นหิน มันแสดงให้เห็นอายุในแง่ของการตั้งค่าไลบรารี แต่เป็นของแข็งและมีขนาดใหญ่ดังต่อไปนี้ อย่างไรก็ตามฉันไม่กลัวเผด็จการใจดี - ถ้า Schmidt เคยบู๊ต ACE อาจมีปัญหา ฉันไม่รู้สึกกับ Boost
Chris K

3

จากที่ฉันเคยใช้ ACE จริงๆเท่านั้น ACE เป็นเฟรมเวิร์กที่ยอดเยี่ยมสำหรับแอพพลิเคชั่นเครือข่ายองค์กรข้ามแพลตฟอร์ม มีความหลากหลายและปรับขนาดได้อย่างมากและมาพร้อมกับ TAO และ JAWS เพื่อการพัฒนา ORB และ / หรือแอปพลิเคชันบนเว็บที่รวดเร็วและมีประสิทธิภาพ

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

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


0

ฉันคิดว่ามันเป็นเรื่องของความคิดเห็นจริงๆแทบจะไม่มีคำตอบที่ถูกต้อง

จากประสบการณ์ของฉันในการเขียนโค้ดเซิร์ฟเวอร์ Win32 / Linux แบบพกพา (15 ปีขึ้นไป) ฉันเองพบว่า boost / ACE ป่องโดยไม่จำเป็นและแนะนำอันตรายจากการบำรุงรักษา (หรือที่เรียกว่า "dll hell") สำหรับข้อได้เปรียบเล็กน้อย

ดูเหมือนว่า ACE จะล้าสมัยอย่างมากมันเป็น "ไลบรารี c ++" ที่เขียนโดย "โปรแกรมเมอร์ c" ในยุค 90 และมันแสดงให้เห็นในความคิดของฉัน มันเกิดขึ้นตอนนี้ฉันกำลังทำวิศวกรรมใหม่ในโครงการที่เขียนด้วย Pico ดูเหมือนว่าสำหรับฉันแล้วมันเป็นไปตามแนวคิดของ ACE อย่างสมบูรณ์ แต่ในแง่ที่ร่วมสมัยกว่านั้นไม่ได้ดีไปกว่านั้น

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

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