문제

나는 함께 일하고있다 C ++ 라이브러리를 부스트하십시오 꽤 오랫동안. 나는 절대적으로 부스트를 좋아합니다 ASIO C ++ 라이브러리 네트워크 프로그래밍 용. 그러나 나는 다른 두 라이브러리에 소개되었습니다. 포코 그리고 ACE (Adaptive Communication Environment) 프레임 워크. 나는 각각의 선과 악을 알고 싶습니다.

도움이 되었습니까?

해결책

RDBound가 말했듯이 Boost는 "STL 근처"상태가 있습니다. 그래서 당신이하지 않으면 필요 다른 도서관, 부스트를 고수하십시오. 그러나 나는 사용합니다 포코 내 상황에 대한 몇 가지 장점이 있기 때문입니다. Poco Imo의 좋은 점 :

  • 더 나은 스레드 라이브러리, 특히 활성 방법 구현. 또한 스레드 우선 순위를 설정할 수 있다는 사실도 좋아합니다.

  • 보다 포괄적 인 네트워크 라이브러리 boost::asio. 하지만 boost::asio 또한 아주 좋은 도서관입니다.

  • XML 및 데이터베이스 인터페이스와 같이 부스트되지 않은 기능이 포함되어 있습니다.

  • 부스트보다 하나의 라이브러리로 더 통합되어 있습니다.

  • 깨끗하고 현대적이며 이해할 수있는 C ++ 코드가 있습니다. 나는 대부분의 부스트 라이브러리보다 이해하기가 훨씬 쉽다는 것을 알았습니다 (그러나 나는 템플릿 프로그래밍 전문가가 아닙니다 :)).

  • 많은 플랫폼에서 사용할 수 있습니다.

Poco의 일부 단점은 다음과 같습니다.

  • 문서가 제한되어 있습니다. 이것은 소스가 이해하기 쉽다는 사실에 의해 다소 상쇄됩니다.

  • 예를 들어 부스트보다 훨씬 작은 커뮤니티와 사용자 기반을 가지고 있습니다. 예를 들어 스택 오버플로에 질문을하면 답을 얻을 가능성은 부스트보다 적습니다.

  • 새로운 C ++ 표준과 얼마나 잘 통합 될 것인지는 여전히 남아 있습니다. 당신은 그것이 부스트에게 문제가되지 않을 것이라는 것을 확실히 알고 있습니다.

나는 에이스를 사용한 적이 없으므로 실제로 그것에 대해 언급 할 수 없습니다. 내가 들었던 것에서, 사람들은 Poco가 에이스보다 더 현대적이고 사용하기 쉽다는 것을 알게됩니다.

Rahul의 의견에 대한 답변 :

  1. 나는 다재다능하고 고급에 대해 모른다. POCO 스레드 라이브러리는 부스트되지 않은 기능을 제공합니다. ActiveMethod 그리고 Activity, 그리고 ThreadPool. IMO POCO 스레드는 사용하고 이해하기 쉽지만 이것은 주관적인 문제입니다.

  2. Poco Network Library는 또한 HTTP 및 SSL과 같은 고급 프로토콜을 지원합니다 (아마도 boost::asio,하지만 확실하지 않습니까?).

  3. 그럴 수 있지.

  4. 통합 라이브러리는 일관된 코딩, 문서화 및 일반적인 "모양과 느낌"을 갖는 이점이 있습니다.

  5. 크로스 플랫폼이되는 것은 POCO의 중요한 기능이며, 이것은 부스트와 관련하여 이점이 아닙니다.

다시 말하지만, POCO가 필요한 기능을 제공하는 경우에만 고려해야합니다.

다른 팁

나는 세 가지를 모두 사용 했으므로 여기에 $ 0.02가 있습니다.

나는 정말로 Doug Schmidt에 투표하고 그가 한 모든 일을 존중하고 싶지만 솔직히 말해서 Ace가 약간 버그가 많고 사용하기 어렵다는 것을 알게됩니다. 라이브러리에는 재부팅이 필요하다고 생각합니다. 이것을 말하기는 어렵지만, Tao를 사용해야 할 강력한 이유가 없거나 Unix 변형과 Windows에서 C ++를 실행하려면 단일 코드베이스가 필요하지 않으면 지금은 ACE를 부끄러워 할 것입니다. Tao는 여러 가지 어려운 문제에 대해 훌륭하지만 학습 곡선은 강렬하며 Corba에 많은 비평가가있는 이유가 있습니다. 어느 쪽이든 결정을 내리기 전에 숙제를하는 것 같아요.

C ++로 코딩하는 경우 부스트는 내 마음에 쉬운 일이 아닙니다. 나는 많은 저수준 라이브러리를 사용하여 필수를 찾습니다. 내 코드의 빠른 Grep은 shared_ptr, program_options, regex, bind, serialization, foreach, property_tree, 파일 시스템, 토큰 화기, 다양한 반복 확장, alogrithm 및 mem_fn을 보여줍니다. 이것들은 대부분 컴파일러에 있어야하는 낮은 수준의 기능입니다. 일부 부스트 라이브러리는 매우 일반적입니다. 그들이 당신이 원하는 것을 할 수있게하는 것은 효과가 있지만 가치가 있습니다.

Poco는 매우 구체적인 공통 작업에 대한 기능을 제공하는 유틸리티 클래스 모음입니다. 라이브러리가 잘 쓰여지고 직관적이라는 것을 알았습니다. 문서를 공부하거나 바보 같은 테스트 프로그램을 작성하는 데 많은 시간을 할애 할 필요가 없습니다. 현재 Logger, XML, Zip 및 Net/SMTP를 사용하고 있습니다. libxml2가 마지막으로 나를 자극했을 때 나는 poco를 사용하기 시작했다. 내가 사용할 수는 있지만 시도하지 않은 다른 클래스가 있습니다. 예를 들어 Data :: MySQL (MySQL ++에 만족) 및 net :: http (libcurl에 만족). 나는 결국 Poco의 나머지 부분을 시험해 볼 것이지만,이 시점에서는 우선 순위가 아닙니다.

많은 POCO 사용자가 BOOST와 함께 사용한다고보고하므로 두 프로젝트의 사람들에게 인센티브가 있음이 분명합니다. Boost는 고품질 라이브러리 모음입니다. 그러나 그것은 프레임 워크가 아닙니다. 에이스는 과거에 그것을 사용했고 디자인을 좋아하지 않았습니다. 또한 고대 비 준수 컴파일러에 대한 지원은 코드 기반을 못생긴 방식으로 형성했습니다.

Poco를 실제로 구별하는 것은 Java 또는 C#을 연상시키는 풍부한 라이브러리 가용성과의 스케일링과 인터페이스입니다. 현재 Poco에서 가장 부족한 것은 비동기 IO입니다.

실시간 제약 조건이있는 매우 고성능 데이터 수집 애플리케이션에 ACE를 사용했습니다. 단일 스레드는 30 개가 넘는 TCP/IC 소켓 연결 및 직렬 포트에서 I/O를 처리합니다. 코드는 32 및 64 비트 Linux에서 실행됩니다. 내가 사용한 많은 ACE 클래스 중 일부는 ACE_Reactor, ACE_TIME_VALUE, ACE_SVC_HANDLER, ACE_MESSAGE_QUEUE, ACE_CONNECTOR입니다. 에이스는 프로젝트의 성공의 핵심 요소였습니다. ACE 클래스 사용 방법을 이해하려면 상당한 노력이 필요합니다. 나는 에이스에 관한 모든 책을 쓰고 있습니다. 시스템 기능을 확장해야 할 때마다 우리 시스템은 일반적으로 수행해야 할 작업을 연구하는 데 시간이 걸리며 필요한 코드의 양은 매우 작습니다. 나는 에이스가 매우 신뢰할 수 있다는 것을 알았습니다. 또한 Boost의 약간의 코드를 사용합니다. 부스트에서 동일한 기능이 보이지 않습니다. 라이브러리 중 하나 또는 두 라이브러리를 모두 사용합니다.

나는 최근에 새로운 직업을 얻었고 ACE와 TAO를 사용하는 프로젝트를 수행했습니다. 글쎄, 내가 말할 수있는 것은 에이스와 타오가 일하고 그들의 임무를 완전히 달성한다는 것입니다. 그러나 도서관의 전반적인 조직과 디자인은 매우 어려운 일입니다 ...

예를 들어, ACE의 주요 부분은 "ACE_"로 시작하는 수백 개의 클래스로 구성됩니다. 수십 년 동안 네임 스페이스를 무시한 것 같습니다.

또한 ACE의 많은 클래스 이름도 유용한 정보를 제공하지 않습니다. 아니면 수업이 어떤지 추측 할 수 있습니까? ACE_Dev_Poll_Reactor_Notify 또는 ACE_Proactor_Handle_Timeout_Upcall 사용될 수 있습니까?

또한 ACE의 문서는 실제로 부족하므로 ACE를 배우고 싶지 않다면 (좋은 문서가 없으면 정말 어렵습니다.), ACE를 사용하지 않는 것이 좋지 않을 것입니다. 타오 ~을 위한 코바, Corba가 필요하지 않으면 계속해서 현대 라이브러리를 사용하십시오 ..

ACE 소켓 라이브러리는 견고합니다. 소켓의 표준 구현을 포트하려고한다면 잘못 될 수 없습니다. ACE 코드는 엄격한 개발 패러다임을 고수합니다. 더 높은 수준의 대조는 사용하기가 약간 혼란 스럽습니다. 엄격한 패러다임은 예외 처리로 일부 아노 몰리를 유발합니다. 문자열 값 쌍이 예외로 전달되는 상황이 있거나 사용되면 쌍 중 하나가 널이면서 예외가 발생하여 예외가 발생하는 예외가 발생합니다. 클래스 레이어링의 깊이는 디버깅 할 때 지루합니다. 나는 다른 라이브러리를 시도한 적이 없으므로 지능적인 의견을 제시 할 수 없습니다.

Boost는 개발자를 강화하는 C ++ 표준위원회의 사람들의 수로 인해 "가까운 STL"상태를 즐깁니다. Poco와 Ace는 그 혜택을 누리지 못하며, 일화적인 경험으로 인해 향상이 더 널리 퍼져 있습니다.

그러나 Poco는 전체적으로 네트워크 유형의 물건을 중심으로합니다. 나는 부스트를 고수하여 거기에서 당신을 도울 수 없지만 부스트를위한 플러스는 (비교적) 광범위한 사용입니다.

부스트는 훌륭합니다. 나는 Poco에 대한 좋은 소식 만 들었지만 (그러나 사용되지 않았는지) 에이스를 좋아하지 않으며 앞으로는 그것을 피할 것입니다. Ace의 팬을 찾을 수 있지만 Boost 또는 Poco (IME)로 얻는 경향이없는 많은 비난자를 찾을 수 있습니다. 주석에).

그 중에서 나는 에이스를 정말로 사용한 적이 있습니다. ACE는 크로스 플랫폼 엔터프라이즈 네트워킹 응용 프로그램을위한 훌륭한 프레임 워크입니다. 매우 다재다능하고 확장 가능하며 ORB 및/또는 웹 기반 응용 프로그램의 빠르고 강력한 개발을 위해 TAO 및 JAWS가 제공됩니다.

그것으로 속도를 높이는 것은 다소 어려울 수 있지만, 그것에 대한 많은 문헌과 상업적 지원이 있습니다.

그래도 다소 무겁기 때문에 소규모 앱의 경우 약간의 과잉 일 수 있습니다. POCO 요약을 읽는 것은 임베디드 시스템에서 실행할 수있는 시스템을 목표로하는 것처럼 들리므로 훨씬 가벼운 방식으로 사용할 수 있다고 가정합니다. 나는 이제 그것을 소용돌이로 줄 수있다 : p

나는 그것이 실제로 의견이 중요하다고 생각합니다. 정답은 거의 없습니다.

휴대용 Win32/Linux 서버 코드 (15 세 이상)를 작성한 경험에서 개인적으로 부스트/ACE가 불필요하게 부풀어 오르고 유지 보수 위험 (그렇지 않으면 "DLL Hell")을 소개합니다.

에이스는 또한 끔찍한 구식 인 것 같습니다. 90 초의 "C 프로그래머"가 쓴 "C ++ 라이브러리"이며 실제로 내 의견으로는 보여줍니다. 지금은 Pico로 작성된 프로젝트를 다시 엔지니어링하고 있습니다. 그것은 나에게 ACE 아이디어를 완전히 따르는 것 같습니다.

어쨌든 고성능, 효율적이고 우아한 서버 통신의 경우 사용하지 않는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top