ACE so với Boost so với POCO [đã đóng]


96

Tôi đã làm việc với Thư viện Boost C ++ được một thời gian. Tôi hoàn toàn thích thư viện Boost Asio C ++ để lập trình mạng. Tuy nhiên, tôi đã được giới thiệu với hai thư viện khác: khung POCOMôi trường giao tiếp thích ứng (ACE) . Tôi muốn biết cái tốt và cái xấu của từng cái.


3
ACE là "con dao quân đội Thụy Sĩ lập trình mạng tối ưu" cho lập trình C ++, nhưng lần cuối tôi kiểm tra thì bản thân nó cũng là một sự phụ thuộc rất lớn.
không có

Câu trả lời:


90

Như rdbound đã nói, Boost có trạng thái "gần STL". Vì vậy, nếu bạn không cần một thư viện khác, hãy sử dụng Boost. Tuy nhiên, tôi sử dụng POCO vì nó có một số lợi thế cho tình huống của tôi. Những điều tốt về POCO IMO:

  • Thư viện luồng tốt hơn, đặc biệt là triển khai Active Method. Tôi cũng thích thực tế là bạn có thể đặt ưu tiên luồng.

  • Thư viện mạng toàn diện hơn boost::asio. Tuy nhiên boost::asiocũng là một thư viện rất tốt.

  • Bao gồm các chức năng không có trong Boost, như XML và giao diện cơ sở dữ liệu để đặt tên cho một số.

  • Nó được tích hợp như một thư viện hơn Boost.

  • Nó có mã C ++ sạch sẽ, hiện đại và dễ hiểu. Tôi thấy nó dễ hiểu hơn nhiều so với hầu hết các thư viện Boost (nhưng tôi không phải là chuyên gia lập trình mẫu :)).

  • Nó có thể được sử dụng trên rất nhiều nền tảng.

Một số nhược điểm của POCO là:

  • Nó có tài liệu hạn chế. Điều này phần nào bù đắp bởi thực tế là nguồn dễ hiểu.

  • Nó có một cộng đồng và cơ sở người dùng nhỏ hơn nhiều so với Boost. Vì vậy, nếu bạn đặt một câu hỏi trên Stack Overflow chẳng hạn, cơ hội nhận được câu trả lời của bạn sẽ ít hơn đối với Boost

  • Vẫn còn phải xem nó sẽ được tích hợp tốt như thế nào với tiêu chuẩn C ++ mới. Bạn biết chắc rằng nó sẽ không thành vấn đề đối với Boost.

ACE mình chưa dùng bao giờ nên thực sự không thể bình luận thêm. Từ những gì tôi đã nghe, mọi người thấy POCO hiện đại hơn và dễ sử dụng hơn ACE.

Một số câu trả lời cho các bình luận của Rahul:

  1. Tôi không biết về đa năng và nâng cao. Thư viện luồng POCO cung cấp một số chức năng không có trong Boost: ActiveMethodActivity, và ThreadPool. Các chủ đề IMO POCO cũng dễ sử dụng và dễ hiểu hơn, nhưng đây là một vấn đề chủ quan.

  2. Thư viện mạng POCO cũng cung cấp hỗ trợ cho các giao thức cấp cao hơn như HTTP và SSL (có thể cũng có trong đó boost::asio, nhưng tôi không chắc?).

  3. Đủ công bằng.

  4. Thư viện tích hợp có lợi thế là có mã hóa, tài liệu và "giao diện" chung nhất quán.

  5. Đa nền tảng là một tính năng quan trọng của POCO, đây không phải là một lợi thế liên quan đến Boost.

Một lần nữa, bạn có thể chỉ nên xem xét POCO nếu nó cung cấp một số chức năng bạn cần và điều đó không có trong Boost.


1
Từ những gì tôi đã học được ít ỏi về POCO, mọi thứ dường như không thêm vào: 1. boost thread có vẻ linh hoạt và cao cấp hơn nhiều. 2. POCO linh hoạt hơn theo những cách nào? 3. Tôi chỉ quan tâm đến mạng. XML và cơ sở dữ liệu không liên quan đến tôi. 4. Tích hợp như một thư viện? Tôi không chắc đó là điều tốt hay điều xấu? 5. Tăng cường Tôi tin rằng (và điều đó cũng xảy ra đối với tăng cường :: asio cũng vậy) cũng khá đa dạng.
rahul

@Rahul Tôi đã cố gắng trả lời một số điểm của bạn trong câu trả lời.
Dani van der Meer

Tôi đã không xem POCO gần đây, nhưng khi tôi xem xét nó một vài năm trước, tôi đã bị bất ngờ bởi thực tế là các thành phần dường như sử dụng hỗn hợp các giấy phép. Một số đã sử dụng giấy phép Boost, những người khác là GPL. Một số công cụ mã hóa yêu cầu giấy phép để sử dụng thương mại. Tôi không biết tình hình cấp phép hiện tại với POCO như thế nào, nhưng tôi sẽ xem xét kỹ trước khi sử dụng nó.
Ferruccio

10
POCO được cấp phép hoàn toàn theo giấy phép Boost (để tham khảo trong tương lai).
Brendan Long

1
Một ưu điểm của Poco là nó có thời gian biên dịch nhanh hơn nhiều. Bởi vì Boost thường dựa vào rất nhiều mã trong tiêu đề, thời gian biên dịch có thể chậm. Với poco có nhiều liên kết động hơn giúp giảm thời gian biên dịch. Ngoài ra còn có một lợi thế bảo mật, vì người dùng có thể cập nhật .so / .dll mà không cần phải biên dịch lại mọi thứ.
ericcurtin

27

Tôi đã sử dụng cả ba nên đây là 0,02 đô la của tôi.

Tôi thực sự muốn bỏ phiếu cho Doug Schmidt và tôn trọng tất cả công việc mà anh ấy đã hoàn thành, nhưng thành thật mà nói, tôi thấy ACE hơi lỗi và khó sử dụng. Tôi nghĩ rằng thư viện cần khởi động lại. Thật khó để nói điều này, nhưng tôi muốn tránh xa ACE ngay bây giờ trừ khi có lý do thuyết phục để sử dụng TAO hoặc bạn cần một cơ sở mã duy nhất để chạy C ++ trên cả hai biến thể Unix và Windows. TAO là tuyệt vời cho một số vấn đề khó khăn, nhưng đường cong học tập rất khốc liệt, và có một lý do tại sao CORBA có một số nhà phê bình. Tôi đoán chỉ cần làm bài tập về nhà của bạn trước khi đưa ra quyết định sử dụng.

Nếu bạn đang viết mã bằng C ++, tôi nghĩ rằng boost là điều không cần phải bàn cãi. Tôi sử dụng một số thư viện cấp thấp và thấy chúng rất cần thiết. Một đoạn mã nhanh của tôi cho thấy shared_ptr, program_options, regex, bind, serialization, foreach, property_tree, filesystem, tokenizer, các phần mở rộng vòng lặp khác nhau, alogrithm và mem_fn. Đây hầu hết là các chức năng cấp thấp thực sự cần có trong trình biên dịch. Một số thư viện boost rất chung chung; nó có thể là công việc để khiến họ làm những gì bạn muốn, nhưng nó đáng giá.

Poco là một tập hợp các lớp tiện ích cung cấp chức năng cho một số tác vụ chung rất cụ thể. Tôi thấy các thư viện được viết tốt và trực quan. Tôi không phải mất nhiều thời gian nghiên cứu tài liệu hoặc viết các chương trình kiểm tra ngớ ngẩn. Tôi hiện đang sử dụng Logger, XML, Zip và Net / SMTP. Tôi bắt đầu sử dụng Poco khi libxml2 làm tôi khó chịu lần cuối. Có những lớp khác tôi có thể sử dụng nhưng chưa thử, ví dụ: Data :: MySQL (tôi hài lòng với mysql ++) và Net :: HTTP (tôi hài lòng với libCURL). Cuối cùng tôi sẽ thử phần còn lại của Poco, nhưng đó không phải là ưu tiên tại thời điểm này.


Mô tả tốt, cảm ơn.
Amir Naghizadeh

21

Nhiều người dùng POCO báo cáo sử dụng nó cùng với Boost, vì vậy rõ ràng là có những ưu đãi cho những người trong cả hai dự án. Boost là một bộ sưu tập các thư viện chất lượng cao. Nhưng nó không phải là một khuôn khổ. Còn ACE mình đã từng dùng qua không ưng ý về thiết kế. Ngoài ra, sự hỗ trợ của nó cho các trình biên dịch không tuân thủ cổ xưa đã định hình cơ sở mã theo một cách xấu xí.

Điều thực sự phân biệt POCO là một thiết kế có quy mô và một giao diện với tính sẵn có của thư viện phong phú gợi nhớ đến những thứ được sử dụng với Java hoặc C #. Tại thời điểm này, điều thiếu sót sâu sắc nhất từ ​​POCO là IO không đồng bộ.


11

Tôi đã sử dụng ACE cho một ứng dụng thu thập dữ liệu hiệu suất rất cao với các hạn chế về thời gian thực. Một luồng duy nhất xử lý I / O từ hơn ba mươi kết nối ổ cắm TCP / IC và một cổng nối tiếp. Mã chạy trên cả Linux 32 và 64 bit. Một vài trong số nhiều lớp ACE mà tôi đã sử dụng là ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector. ACE là nhân tố chính cho sự thành công của dự án của chúng tôi. Cần một nỗ lực đáng kể để hiểu cách sử dụng các lớp ACE. Tôi có tất cả các cuốn sách viết về ACE. Bất cứ khi nào tôi phải mở rộng chức năng, hệ thống của chúng tôi thường mất một khoảng thời gian để nghiên cứu những việc cần làm và sau đó lượng mã cần thiết là rất ít. Tôi thấy ACE đến rất đáng tin cậy. Tôi cũng sử dụng một chút mã từ Boost. Tôi không thấy chức năng tương tự trong Boost.


10

Gần đây tôi đã có một công việc mới và làm việc trong một dự án sử dụng ACE và TAO. Điều tôi có thể nói là ACE và TAO làm việc và hoàn thành đầy đủ nhiệm vụ của mình. Nhưng tổ chức tổng thể và thiết kế của các thư viện khá khó khăn ...

Ví dụ, phần chính của ACE bao gồm hàng trăm lớp bắt đầu bằng "ACE_". Có vẻ như họ đã bỏ qua không gian tên trong nhiều thập kỷ.

Ngoài ra, nhiều tên lớp của ACE cũng không cung cấp thông tin hữu ích. Hoặc bạn có thể đoán những gì các lớp thích ACE_Dev_Poll_Reactor_Notifyhoặc ACE_Proactor_Handle_Timeout_Upcallcó thể được sử dụng cho?

Ngoài ra, tài liệu về ACE thực sự rất thiếu, vì vậy trừ khi bạn muốn tìm hiểu ACE một cách khó khăn (nó thực sự khó mà không có bất kỳ tài liệu tốt nào ..), tôi sẽ KHÔNG khuyến khích sử dụng ACE, trừ khi bạn thực sự cần TAO cho CORBA , nếu bạn không cần CORBA, hãy tiếp tục và sử dụng một số thư viện hiện đại ..


7

Các thư viện ổ cắm ACE rất chắc chắn. Nếu bạn đang cố gắng chuyển một triển khai tiêu chuẩn của các ổ cắm, bạn không thể làm sai. Mã ACE tuân theo một mô hình phát triển cứng nhắc. Các cấu trúc cấp cao hơn hơi khó sử dụng. Mô hình cứng nhắc gây ra một số dị thường với xử lý ngoại lệ. Có hoặc đã từng có những trường hợp mà các cặp giá trị chuỗi được chuyển vào một ngoại lệ với một trong các cặp là null gây ra một trường hợp ngoại lệ ném vào ngoại lệ sẽ làm bạn bối rối. Độ sâu của lớp phân lớp là tẻ nhạt khi gỡ lỗi. Tôi chưa bao giờ thử các thư viện khác nên không thể đưa ra nhận xét thông minh.


6

Boost có trạng thái "gần STL" do số lượng người trong ủy ban tiêu chuẩn C ++ cũng là nhà phát triển Boost. Poco và ACE không được hưởng lợi ích đó, và từ kinh nghiệm giai thoại của tôi, Boost ngày càng lan rộng.

Tuy nhiên, POCO nói chung tập trung nhiều hơn vào những thứ kiểu mạng. Tôi gắn bó với Boost vì vậy tôi không thể giúp bạn ở đó, nhưng điểm cộng cho Boost là việc sử dụng (tương đối) rộng rãi của nó.


4

Boost là tuyệt vời, tôi chỉ nghe nói những điều tốt về POCO (nhưng chưa bao giờ sử dụng) nhưng tôi không thích ACE và sẽ tránh nó trong tương lai. Mặc dù bạn sẽ tìm thấy những người hâm mộ ACE, nhưng bạn cũng sẽ tìm thấy nhiều lời gièm pha mà bạn không có xu hướng mắc phải với boost hoặc poco (IME), với tôi, điều đó gửi một tín hiệu rõ ràng rằng ACE không phải là công cụ tốt nhất (mặc dù nó làm được những gì nó nói trên thiếc).


10
ACE đã tồn tại rất lâu và đã phải hỗ trợ nhiều nền tảng kế thừa trong những năm qua. Đây là một trong những lý do tại sao nó không phải là Boost hiện đại. Rất nhiều nghiên cứu và tài liệu cực kỳ hữu ích đến từ ACE (xem CV của Doug Schmidt) mà những người khác đã có thể tận dụng và xây dựng. Đương nhiên, những người khác sẽ học hỏi từ những sai lầm mắc phải trong các thư viện cũ và cải thiện chúng. Những người khác cũng sẽ nghĩ ra những cách hoàn toàn mới để làm những việc tương tự. ACE đừng khó quá. Tôi cũng là một fan hâm mộ lớn của Boost. Phải thừa nhận rằng tôi chưa bao giờ sử dụng POCO.
Void

6
ACE được bắt đầu vào thời điểm mà các trình biên dịch rất không tương thích (chưa có tiêu chuẩn nào tồn tại), và các khuôn mẫu hoàn toàn là một cơn ác mộng (1996/1997) và có hàng trăm nền tảng giống Unix. Tôi đã đánh giá ACE + TAO cho một dự án - cuối cùng chúng tôi đã giải quyết trên OmniORB, TAO còn quá non nớt nên nó đã phá vỡ với mỗi bản phát hành mới. Mặt khác, ACE là một tảng đá. Nó cho thấy nó có tuổi đời, về mặt thiết lập thư viện, nhưng nó chắc chắn và có một lượng lớn người theo dõi. Tuy nhiên, tôi đã sợ một chút về nhà độc tài nhân từ - nếu Schmidt từng khởi động, ACE có thể gặp rắc rối. Tôi không có được cảm giác đó với Boost.
Chris K

3

Trong số những người tôi chỉ thực sự sử dụng ACE. ACE là một khuôn khổ tuyệt vời cho các ứng dụng mạng doanh nghiệp đa nền tảng. Nó cực kỳ linh hoạt và có thể mở rộng và đi kèm với TAO và JAWS để phát triển nhanh chóng, mạnh mẽ các ứng dụng ORB và / hoặc dựa trên Web.

Bắt kịp tốc độ với nó có thể hơi khó khăn, nhưng có rất nhiều tài liệu về nó và hỗ trợ thương mại có sẵn.

Tuy nhiên, nó hơi nặng, vì vậy đối với các ứng dụng quy mô nhỏ hơn, nó có thể hơi quá mức cần thiết. Đọc phần tóm tắt cho POCO, có vẻ như họ đang nhắm đến một hệ thống có thể chạy trên các hệ thống nhúng, vì vậy tôi cho rằng nó có thể được sử dụng theo cách nhẹ hơn nhiều. Bây giờ tôi có thể cho nó một vòng xoáy: P


0

Tôi nghĩ rằng nó thực sự là vấn đề của một ý kiến, khó có câu trả lời đúng.

Theo kinh nghiệm của tôi với việc viết mã máy chủ Win32 / Linux di động (hơn 15 năm), cá nhân tôi thấy boost / ACE cồng kềnh một cách không cần thiết và đưa ra các nguy cơ bảo trì (còn được gọi là "dll hell") vì lợi ích nhỏ mà chúng mang lại.

ACE cũng có vẻ lỗi thời kinh khủng, nó là một "thư viện c ++" được viết bởi "c lập trình viên" trong những năm 90 và nó thực sự hiển thị theo ý kiến ​​của tôi. Nó xảy ra như vậy, ngay bây giờ tôi đang thiết kế lại dự án được viết bằng Pico, đối với tôi nó có vẻ hoàn toàn tuân theo ý tưởng của ACE, nhưng xét về mặt hiện đại hơn thì không tốt hơn nhiều.

Trong mọi trường hợp để có hiệu suất cao, giao tiếp máy chủ hiệu quả, thanh lịch, bạn có thể không nên sử dụng bất kỳ phương thức nào trong số chúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.