ACE vs Boost vs POCO [ditutup]

96

Saya telah bekerja dengan Boost C ++ Libraries selama beberapa waktu. Saya sangat menyukai pustaka Boost Asio C ++ untuk pemrograman jaringan. Namun saya diperkenalkan ke dua perpustakaan lain: kerangka kerja POCO dan Adaptive Communication Environment (ACE) . Saya ingin mengetahui baik dan buruknya masing-masing.

rahul
sumber
3
ACE adalah "pemograman jaringan pamungkas swiss army knife" untuk pemrograman C ++, tetapi terakhir saya memeriksanya juga merupakan ketergantungan monster yang sangat besar.
tidak ada

Jawaban:

90

Seperti yang dikatakan rdbound, Boost memiliki status "dekat STL". Jadi jika Anda tidak membutuhkan pustaka lain, tetap gunakan Boost. Namun, saya menggunakan POCO karena memiliki beberapa keuntungan untuk situasi saya. Hal-hal baik tentang POCO IMO:

  • Pustaka utas yang lebih baik, terutama penerapan Metode Aktif. Saya juga menyukai kenyataan bahwa Anda dapat mengatur prioritas utas.

  • Perpustakaan jaringan yang lebih komprehensif daripada boost::asio. Namun boost::asiojuga merupakan perpustakaan yang sangat bagus.

  • Termasuk fungsionalitas yang tidak ada di Boost, seperti XML dan antarmuka database untuk beberapa nama.

  • Ini lebih terintegrasi sebagai satu pustaka daripada Boost.

  • Ini memiliki kode C ++ yang bersih, modern, dan dapat dimengerti. Saya merasa jauh lebih mudah untuk dipahami daripada kebanyakan perpustakaan Boost (tapi saya bukan ahli pemrograman template :)).

  • Ini dapat digunakan di banyak platform.

Beberapa kelemahan POCO adalah:

  • Ini memiliki dokumentasi terbatas. Ini agak diimbangi oleh fakta bahwa sumbernya mudah dipahami.

  • Ini memiliki komunitas dan basis pengguna yang jauh lebih kecil daripada, katakanlah, Boost. Jadi, jika Anda mengajukan pertanyaan tentang Stack Overflow misalnya, peluang Anda untuk mendapatkan jawaban lebih kecil daripada Boost

  • Masih harus dilihat seberapa baik itu akan diintegrasikan dengan standar C ++ yang baru. Anda tahu pasti bahwa itu tidak akan menjadi masalah bagi Boost.

Saya tidak pernah menggunakan ACE, jadi saya tidak bisa mengomentarinya. Dari apa yang saya dengar, orang menemukan POCO lebih modern dan lebih mudah digunakan daripada ACE.

Beberapa jawaban atas komentar Rahul:

  1. Saya tidak tahu tentang serbaguna dan canggih. Pustaka utas POCO menyediakan beberapa fungsionalitas yang tidak ada di Boost: ActiveMethoddan Activity, dan ThreadPool. Untaian IMO POCO juga lebih mudah digunakan dan dipahami, tetapi ini adalah masalah subjektif.

  2. Pustaka jaringan POCO juga menyediakan dukungan untuk protokol tingkat yang lebih tinggi seperti HTTP dan SSL (mungkin juga dalam boost::asio, tapi saya tidak yakin?).

  3. Cukup adil.

  4. Perpustakaan terintegrasi memiliki keuntungan karena memiliki pengkodean yang konsisten, dokumentasi dan "tampilan dan nuansa" umum.

  5. Menjadi lintas platform adalah fitur penting POCO, ini bukan keuntungan dalam kaitannya dengan Boost.

Sekali lagi, Anda mungkin hanya harus mempertimbangkan POCO jika POCO menyediakan beberapa fungsionalitas yang Anda butuhkan dan tidak ada di Boost.

Dani van der Meer
sumber
1
Dari sedikit yang telah saya pelajari tentang POCO, hal-hal tampaknya tidak bertambah: 1. utas boost tampaknya jauh lebih fleksibel dan canggih. 2. POCO lebih fleksibel dalam hal apa? 3. Saya hanya tertarik pada jaringan. XML dan database bukan urusan saya. 4. Terintegrasi sebagai satu perpustakaan? Saya tidak yakin apakah itu hal yang baik atau buruk? 5. Boost Saya percaya (dan itu berlaku untuk boost :: asio juga) juga cukup lintas platform.
rahul
@Rahul Saya mencoba menjawab beberapa poin Anda dalam menjawab.
Dani van der Meer
Saya belum melihat POCO baru-baru ini, tetapi ketika saya melihatnya beberapa tahun yang lalu saya menunda oleh fakta bahwa komponen tampaknya menggunakan campuran lisensi. Beberapa menggunakan lisensi Boost, yang lainnya adalah GPL. Beberapa item enkripsi memerlukan lisensi untuk penggunaan komersial. Saya tidak tahu bagaimana situasi perizinan saat ini dengan POCO, tetapi saya akan memeriksanya dengan cermat sebelum menggunakannya.
Ferruccio
10
POCO sepenuhnya dilisensikan di bawah lisensi Boost (untuk referensi di masa mendatang).
Brendan Long
1
Salah satu keunggulan Poco adalah waktu kompilasi yang jauh lebih cepat. Karena Boost umumnya mengandalkan banyak sekali kode di header, waktu kompilasi bisa lambat. Dengan poco, ada lebih banyak tautan dinamis yang mengurangi waktu kompilasi. Ada juga keuntungan keamanan, karena pengguna dapat memperbarui .so / .dll tanpa harus mengkompilasi ulang semuanya.
ericcurtin
27

Saya telah menggunakan ketiganya jadi inilah $ 0,02 saya.

Saya benar-benar ingin memilih Doug Schmidt dan menghormati semua pekerjaan yang telah dia lakukan, tetapi jujur ​​saya menemukan ACE agak bermasalah dan sulit digunakan. Saya pikir perpustakaan itu perlu di-boot ulang. Sulit untuk mengatakan ini, tapi saya akan menghindar dari ACE untuk saat ini kecuali ada alasan kuat untuk menggunakan TAO, atau Anda memerlukan satu basis kode untuk menjalankan C ++ pada varian Unix dan Windows. TAO sangat bagus untuk sejumlah masalah yang sulit, tetapi kurva pembelajarannya intens, dan ada alasan CORBA memiliki sejumlah kritik. Saya kira lakukan saja pekerjaan rumah Anda sebelum membuat keputusan untuk menggunakannya.

Jika Anda membuat kode dalam C ++, dorongan dalam pikiran saya tidak perlu dipikirkan lagi. Saya menggunakan sejumlah pustaka tingkat rendah dan menganggapnya penting. Sebuah grep singkat dari kode saya mengungkapkan shared_ptr, program_options, regex, bind, serialization, foreach, property_tree, filesystem, tokenizer, berbagai ekstensi iterator, alogrithm, dan mem_fn. Ini sebagian besar adalah fungsionalitas tingkat rendah yang seharusnya ada di kompiler. Beberapa perpustakaan pendorong sangat umum; Ini bisa menjadi pekerjaan untuk membuat mereka melakukan apa yang Anda inginkan, tetapi itu bermanfaat.

Poco adalah kumpulan kelas utilitas yang menyediakan fungsionalitas untuk beberapa tugas umum yang sangat konkret. Saya menemukan perpustakaan yang ditulis dengan baik dan intuitif. Saya tidak perlu menghabiskan banyak waktu mempelajari dokumentasi atau menulis program tes yang konyol. Saat ini saya menggunakan Logger, XML, Zip, dan Net / SMTP. Saya mulai menggunakan Poco ketika libxml2 membuat saya kesal untuk terakhir kalinya. Ada kelas lain yang dapat saya gunakan tetapi belum pernah saya coba, misalnya Data :: MySQL (saya senang dengan mysql ++) dan Net :: HTTP (saya senang dengan libCURL). Saya akan mencoba sisa Poco pada akhirnya, tetapi itu bukan prioritas pada saat ini.


sumber
Deskripsi bagus, terima kasih.
Amir Naghizadeh
21

Banyak pengguna POCO melaporkan menggunakannya bersama Boost, jadi jelas bahwa ada insentif untuk orang-orang di kedua proyek tersebut. Boost adalah kumpulan pustaka berkualitas tinggi. Tapi ini bukan kerangka. Sedangkan untuk ACE, saya telah menggunakannya di masa lalu dan tidak menyukai desainnya. Selain itu, dukungannya untuk kompiler kuno yang tidak patuh telah membentuk basis kode dengan cara yang buruk.

Apa yang benar-benar membedakan POCO adalah desain yang berskala dan antarmuka dengan ketersediaan pustaka yang kaya yang mengingatkan orang pada Java atau C #. Saat ini, hal yang paling kurang dari POCO adalah asynchronous IO.

Alex
sumber
11

Saya telah menggunakan ACE untuk aplikasi akuisisi data berkinerja sangat tinggi dengan kendala waktu nyata. Sebuah utas tunggal menangani I / O dari lebih dari tiga puluh koneksi soket TCP / IC dan port serial. Kode berjalan di Linux 32 dan 64 bit. Beberapa dari banyak kelas ACE yang telah saya gunakan adalah ACE_Reactor, ACE_Time_Value, ACE_Svc_Handler, ACE_Message_Queue, ACE_Connector. ACE adalah faktor kunci keberhasilan proyek kami. Diperlukan upaya yang signifikan untuk memahami cara menggunakan kelas ACE. Saya memiliki semua buku yang ditulis tentang ACE. Setiap kali saya harus memperluas fungsionalitas, sistem kami biasanya membutuhkan waktu untuk mempelajari apa yang harus dilakukan dan kemudian jumlah kode yang diperlukan sangat kecil. Saya telah menemukan ACE sangat andal. Saya juga menggunakan sedikit kode dari Boost. Saya tidak melihat fungsi yang sama di Boost.

Bob
sumber
10

Saya baru saja mendapat pekerjaan baru dan mengerjakan proyek yang menggunakan ACE dan TAO. Nah, yang bisa saya katakan adalah, bahwa ACE dan TAO bekerja dan menyelesaikan tugas mereka sepenuhnya. Tetapi keseluruhan organisasi dan desain perpustakaan cukup menakutkan ...

Misalnya, bagian utama ACE terdiri dari ratusan kelas yang dimulai dengan "ACE_". Sepertinya mereka telah mengabaikan ruang nama selama beberapa dekade.

Selain itu, banyak nama kelas ACE juga tidak memberikan informasi yang berguna. Atau dapatkah Anda menebak kelas apa yang disukai ACE_Dev_Poll_Reactor_Notifyatau ACE_Proactor_Handle_Timeout_Upcalldapat digunakan?

Selain itu, dokumentasi ACE sangat kurang, jadi kecuali jika Anda ingin belajar ACE dengan cara yang sulit (sangat sulit tanpa dokumentasi yang baik ..), saya TIDAK akan merekomendasikan penggunaan ACE, kecuali Anda benar-benar membutuhkan TAO untuk CORBA , Jika Anda tidak membutuhkan CORBA, lanjutkan dan gunakan beberapa perpustakaan modern ..

smerlin.dll
sumber
7

Pustaka soket ACE solid. Jika Anda mencoba mem-port implementasi standar soket, Anda tidak bisa salah. Kode ACE berpegang pada paradigma pengembangan yang kaku. Kontruksi tingkat yang lebih tinggi agak membingungkan untuk digunakan. Paradigma yang kaku menyebabkan beberapa anomolies dengan penanganan eksepsi. Ada atau dulu situasi di mana pasangan nilai string diteruskan ke pengecualian dengan salah satu pasangan menjadi null menyebabkan pengecualian melempar pengecualian yang akan mengejutkan Anda. Kedalaman pelapisan kelas membosankan saat melakukan debug. Saya belum pernah mencoba perpustakaan lain sehingga tidak dapat memberikan komentar yang cerdas.

Dan
sumber
6

Boost menikmati status "dekat STL" karena jumlah orang di komite standar C ++ yang juga merupakan developer Boost. Poco dan ACE tidak menikmati manfaat itu, dan dari pengalaman anekdot saya, Boost lebih tersebar luas.

Namun, POCO secara keseluruhan lebih berpusat di sekitar hal-hal jenis jaringan. Saya tetap menggunakan Boost jadi saya tidak dapat membantu Anda di sana, tetapi nilai tambah untuk Boost adalah penggunaannya (yang relatif) tersebar luas.

rlbond.dll
sumber
4

Boost sangat bagus, saya hanya mendengar hal-hal baik tentang POCO (tetapi tidak pernah digunakan) tetapi saya tidak suka ACE dan akan menghindarinya di masa mendatang. Meskipun Anda akan menemukan penggemar ACE, Anda juga akan menemukan banyak pencela yang cenderung tidak Anda dapatkan dengan boost atau poco (IME), bagi saya yang mengirimkan sinyal yang jelas bahwa ACE bukanlah alat terbaik (meskipun ia melakukan apa yang dikatakannya di atas kaleng).

Patrick
sumber
10
ACE telah ada sejak lama, dan harus mendukung banyak platform lama selama bertahun-tahun. Ini adalah salah satu alasan mengapa Boost tidak semodern, misalnya. Banyak penelitian dan literatur yang sangat berguna keluar dari ACE (lihat CV Doug Schmidt) yang dapat dimanfaatkan dan dikembangkan oleh pihak lain. Secara alami, orang lain akan belajar dari kesalahan yang dibuat di perpustakaan lama dan memperbaikinya. Orang lain juga akan menemukan cara baru untuk melakukan hal serupa. Jangan terlalu keras di ACE. Saya juga penggemar Boost. Memang, saya belum pernah menggunakan POCO.
Batal
6
ACE dimulai pada saat kompiler sangat tidak kompatibel (belum ada standar), dan template benar-benar mimpi buruk (1996/1997) dan ada seratus platform mirip Unix. Saya mengevaluasi ACE + TAO untuk sebuah proyek - kami akhirnya memilih OmniORB, TAO sangat tidak dewasa sehingga putus dengan setiap rilis baru. ACE di sisi lain adalah batu. Ini menunjukkan usia, dalam hal pengaturan perpustakaan, tapi solid, dan memiliki banyak pengikut. Saya memang takut sedikit pada diktator yang baik hati - jika Schmidt pernah naik, ACE mungkin akan menjadi masalah. Saya tidak mendapatkan perasaan itu dengan Boost.
Chris K
3

Dari semua itu, saya hanya pernah benar-benar menggunakan ACE. ACE adalah kerangka kerja yang bagus untuk aplikasi jaringan perusahaan lintas platform. Ini sangat serbaguna dan dapat diskalakan serta dilengkapi dengan TAO dan JAWS untuk pengembangan aplikasi berbasis ORB dan / atau Web yang cepat dan bertenaga.

Mempercepatnya bisa jadi agak menakutkan, tetapi ada banyak literatur tentangnya, dan dukungan komersial tersedia.

Ini agak berat, jadi untuk aplikasi skala kecil ini mungkin agak berlebihan. Membaca ringkasan untuk POCO sepertinya mereka membidik sistem yang dapat dijalankan pada sistem tertanam jadi saya berasumsi itu dapat digunakan dengan cara yang jauh lebih ringan. Sekarang saya dapat mencobanya: P

Gerald
sumber
0

Saya pikir ini benar-benar masalah opini, hampir tidak ada jawaban yang benar.

Dalam pengalaman saya dengan menulis kode server Win32 / Linux portabel (15+ tahun), saya pribadi menemukan boost / ACE tidak perlu membengkak dan menyebabkan bahaya pemeliharaan (atau dikenal sebagai "neraka dll") untuk sedikit keuntungan yang mereka berikan.

ACE juga tampaknya sangat ketinggalan jaman, ini adalah "perpustakaan c ++" yang ditulis oleh "programmer c" di tahun 90-an dan itu benar-benar terlihat menurut saya. Kebetulan, sekarang saya sedang merekayasa ulang proyek yang ditulis dengan Pico, menurut saya itu sepenuhnya mengikuti ide ACE, tetapi dalam istilah yang lebih kontemporer, tidak jauh lebih baik dalam hal itu.

Dalam kasus apa pun untuk komunikasi server yang berkinerja tinggi, efisien, dan elegan, Anda mungkin lebih baik tidak menggunakannya.

ao
sumber