C++ 프레임워크 - Boost vs Abseil

딜레마

고객사의 요청으로 C++11로 코드를 짜달라는 요청을 받았다.

C++17의 다양한 유틸리티 기능에 익숙한 나로써는 C++11은 조금 불편하지 않을까, 라는 생각이 들었다.

C++11 빌드임에도 C++17, 또는 그 후의 기능을 사용할 수 있는 방법이 없을까?

 

예전에 들은 바로는, Boost와 같은 C++ 프레임워크에서 사용하던 좋은 기능들이 STL에 추가되기도 한다고 들었다.

이러한 프레임워크들을 사용하면 C++11 빌드임에도 그 이후 스탠다드의 기능들을 사용할 수 있을 것이라고 생각이 든다.

 

Boost

Boost가 지향하는 방향은 ‘추후 C++ Standard에 포함될 기능’을 만드는 것이다.

그렇기에 우리가 기대할 수 있는 특징은 2가지가 있다.

  • 기존의 STL과의 호환성이 높다
  • 하드웨어 호환성에 초점을 높게 두지는 않았을 것이다.
  • 실험적인 기능들이 많이 있을 것이다.
    • 추후 C++ standard에 포함될 것들을 미리 써볼 수 있다.
    • 종종 Boost 릴리즈 버전이 올라가면서 사라지는 기능들도 있을 것이다
      • 하지만 이 기능은, 우리가 Boost 버전을 고정하면 문제가 되지 않을 것이다. (i.e. 짧은 수명을 가진 프로젝트에는 문제가 되지 않는다)

Boost가 가진 기능들은 다음과 같다.

 

Abseil

Abseil은 Google이 만든 C++ 프레임워크로써, 호환성에 중점을 둔다.

Abseil이 제공하는 하드웨어 호환성 리스트가 있는데, Abseil 버전이 올라가면서 왠만한 경우에 Abseil API는 지속적으로 호환된다.

C++ 스탠다드가 지원하는 기능들은 전부 지원한다고 보면 되고, 그 외의 추가적인 개선점이나 기능들을 사용할 수 있다.

  • Update:
    • 컴파일러 단계에서 지원하는 기능들이 지원되지 않는다
      • e.g. C++17 structured-binding
    • 특정 기능들이 지원되지 않는다
      • e.g. std::filesystem

 

그래서, Boost vs Abseil?

  • Boost를 써도 될 때
    • C++의 가장 최신 기능을 사용하고싶다면
    • Long-term life를 고려하지 않는다면
  • Abseil을 써도 될 때
    • 호환성이 높은 프레임워크를 쓰고 싶다면
    • Long-term life가 중요하다면
    • STL 보다 좀 더 좋은 성능 + 적당히 최신 기능을 사용하고 싶다면
  • 둘 다 쓰면 안될 때
    • 이미 컴파일된 코드를 오래오래 쓰고 싶다면

참고자료

  • https://groups.google.com/g/abseil-io/c/vCQ3L10YFdM?pli=1