[C++] 항목 55: 부스트를 늘 여러분 가까이에
카테고리: Cpp
태그: Cpp
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
이펙티브 C++ 제3판, 스콧 마이어스 저자, 곽용재 번역
📦 9. 그 밖의 이야기들
👉🏻 항목 55: 부스트를 늘 여러분 가까이에
🌟 부스트(Boost)란?
C++ 개발자들의 단체이자, 무료 다운로드가 가능한 C++ 라이브러리의 집합
웹사이트:
- http://boost.org에 가면 2025년 11월 14일 기준, 아직도 활성화되어 있다
특별한 위치:
- C++ 표준화 위원회와 유일한 밀접한 관계를 가진다
- 표준 C++에 추가될 수 있는 기능들의 시험 장소로 사용되었다
- 실제로도 많은 것들이 표준 C++에 추가되었다
🔍 부스트 심사 과정
라이브러리 승인 과정이 까다로우며, 공개 동료 심사에 기반을 둔다.
1. 사전 검사:
- “토론-수정-재제출”을 반복한다
2. 부스트의 최소 요구사항 확인:
- 컴파일이 되는 컴파일러가 최소 두 개 이상인가? (이식성)
- 배포할 수 있는 라이선스인가?
- etc…
3. 공식 심사:
- 심사는 지원자가 맡으며, 아래와 같은 기준으로 평가한다
- 설계와 구현이 얼마나 우수한가?
- 다른 컴파일러와 운영체제에 맞춰 이식할 수 있는 코드인가?
- 이 라이브러리가 대상 사용자(특정 분야 종사자)에게 쓸모 있는 라이브러리인가?
- 문서화가 명료하고, 완전하고, 정확한가?
4. 심사 결과:
- 부스트 메일링 리스트를 통해 공개적으로 올라온다
- 심사 관리자는 승인, 조건부 승인, 기각을 결정한다
📚 부스트 라이브러리의 규모
크기/범위가 제각각이다:
⬇️ 작은 라이브러리 - 컨버전(Conversion) 라이브러리:
- C++보다 안전하고 편리한 캐스트 연산자를 제공한다
numeric_cast,lexical_cast함수가 있다
⬆️ 큰 라이브러리:
- 부스트 그래프 라이브러리(Boost Graph Library)
- 부스트 MPL(메타프로그래밍) 라이브러리
🗂️ 부스트 라이브러리 범주
문자열 및 텍스트 처리:
- 타입 안정성을 갖춘
printf와 비슷한 서식화 기능 - 정규 표현식(항목 54 참조)
- 토큰화
- 구문분석 기능
컨테이너:
- STL 양식 인터페이스를 제공하는 고정 크기 배열(항목 54 참조)
- 가변 크기 비트세트
- 다차원 배열
함수 객체 및 고차(high-order) 프로그래밍:
- 일부는 TR1의 기능을 구현하는 기반 라이브러리로 사용되었다
- e.g. 람다(lambda) 라이브러리
using namespace boost::lambda;
vector<int> v;
// _1은 placeholder로, 항목 35를 참고하자.
for_each(v.begin(), v.end(),
cout << _1 * 2 + 10 << "\n"
);
일반화 프로그래밍:
- 특성정보(traits) 클래스 (항목 47 참조)
템플릿 메타프로그래밍(항목 48 참조):
- 컴파일 타임 단정문
- 부스트 MPL 라이브러리
- 타입리스트가 하나의 예이다
- 타입리스트(typelist): 타입을 담아 관리할 수 있는 컨테이너
// list와 닮은 컴파일 타임 컨테이너
typedef boost::mpl::list
<float, double, long double> floats;
// "위의 floats 타입 + int"으로 이루어진,
// 타입 리스트를 만들고, 이를 types라고 부른다.
typedef boost::mpl::push_front
<floats, int>::type types;
수학 및 수치 조작:
- 유리수, 4원수, 8원수, 최대 공약수, 최소공배수, 난수 포함
- 난수는 C의
rand보다 우수하다
정확성 유지 및 테스트:
- 암시적 템플릿 인터페이스 형식화 (항목 41 참조)
- 테스트 우선 프로그래밍
자료구조:
- 타입 안정성을 갖춘 공용체
- 여기서 말하는 공용체는
union이다
- 여기서 말하는 공용체는
- 튜플(tuple) 라이브러리
- 현재는 표준 C++이라 당연하게 쓰지만, 이때는 TR1 라이브러리였다
타 언어와의 연동 지원:
- C++/Python 연동 라이브러리 지원
메모리:
- 고정 크기 할당자를 지원하는 풀(Pool) 라이브러리 (항목 50 참조)
- 스마트 포인터(항목 13 참조)
- 항목 44에 나왔던
scope_array는 TR1에 속하지 않는다- 동적으로 할당된 배열에 대해 동작하는
auto_ptr같은 스마트 포인터이다
- 동적으로 할당된 배열에 대해 동작하는
기타:
- CRC 점검
- 날짜 및 시간 조작
- 파일 시스템 횡단
📅 2025년 현재
현재 상황:
- 찾아보니
boost는 여전히 업데이트되고 있다 - 하지만 현재는 잘 사용되지 않는다고 한다
잘 사용되지 않는 이유:
- 중요한 기능들은 표준 C++에 들어왔다
- 선택적 기능들이 너무 많아져서 무거워졌다
numeric_cast,lexical_cast도 여기서 소개했었는데, 많이 느리다고 한다- 템플릿 메타프로그래밍의 단점이 컴파일 타임이 길어진다였다
- 해당 라이브러리를 사용할 때 선언과 구현부를 분리하지 않으면,
컴파일이 엄청 오래 걸려서 불편하다고 한다
🧐 정리
이번 정리는 C++의 역사라고 생각하고 보자:
- 부스트는 동료 심사를 거쳐 등록되고, 무료로 배포되는 오픈소스 C++ 라이브러리를
개발하는 모임이자 웹사이트이다 - C++ 표준화에 있어 영향력 있는 역할을 맡고 있다
- 부스트에서 배포되는 라이브러리엔 TR1 구성요소에 들어간 것도 있지만,
그 외 라이브러리도 아주 많다
댓글남기기