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.
c++
boost
poco-libraries
ace
rahul
sumber
sumber
Jawaban:
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
. Namunboost::asio
juga 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:
Saya tidak tahu tentang serbaguna dan canggih. Pustaka utas POCO menyediakan beberapa fungsionalitas yang tidak ada di Boost:
ActiveMethod
danActivity
, danThreadPool
. Untaian IMO POCO juga lebih mudah digunakan dan dipahami, tetapi ini adalah masalah subjektif.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?).Cukup adil.
Perpustakaan terintegrasi memiliki keuntungan karena memiliki pengkodean yang konsisten, dokumentasi dan "tampilan dan nuansa" umum.
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.
sumber
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
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.
sumber
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.
sumber
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_Notify
atauACE_Proactor_Handle_Timeout_Upcall
dapat 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 ..
sumber
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.
sumber
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.
sumber
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).
sumber
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
sumber
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.
sumber