- 부스트는 동료 심사를 거쳐 등록되고 무료로 배포되는 오픈 소스 C++라이브러리를 개발하는 모임이다. 또한 C++ 표준화에 있어서 영향력 있는 역할을 맡고 있다.
- 부스트에서 배포되는 라이브러리들 중엔 TR1 구성요소에 들어간 것도 있지만, 그 외에 다른 라이브러리들도 많다.
부스트
부스트는 품질이 우수하고 이식성이 좋은 라이브러리이다.
부스트는 다른 것들과 차이점이 있다.
첫째, 부스트는 C++ 표준화 위원회와 밀접하고 영향력있는 관계를 유지하고 있다.
둘째, 라이브러리 승인 과정이 동료 심사에 기반을 두고 있다.
동료 심사에서 요구사항과 이식성 등을 확인한다.
동료 심사를 진행하기 때문에 품질이 좋지 않은 라이브러리들은 걸러진다.
현재 부스트에서 배포되는 라이브러리는 수십 개이고, 계속하여 추가되고 있다.
부스트 범주
부스트의 라이브러리는 다양하지만 사실 여러 개의 범주로 나뉘어 있다.
- 문자열 및 텍스트 처리
주요 구성요소로 타입 안전성을 갖춘 printf 비슷한 서식화 기능, 정규 표현식 및 토큰화와 구문분석 기능이 있다.
- 컨테이너
STL 양식의 인터페이스를 제공하는 고정 크기 배열, 가변 크기 비트세트, 다차원 배열 등이 포함되어 있다.
- 함수 객체 및 고차 프로그래밍
TR1의 기능을 구현하는 데 사용된 몇 개의 기반 라이브러리가 여기에 해당한다.
람다(Lambda) 라이브러리가 여기에 해당하는데, 이 라이브러리는 별도의 준비 없이 즉석에서 함수 객체를 생성해 주는 기능을 제공한다.
using namespace boost::lambda; // lambda기능 사용
std::vector<int> v;
...
std::for_each(v.begin(), v.end(), std::cout << _1 * 2 + 10 << "\n"); // v의 원소 x에 대해 *2+10을 출력(_1은 Lambda라이브러리에서 현재 원소를 의미)
- 일반화 프로그래밍
특성정보 클래스가 여기에 해당한다.
- 템플릿 메타프로그래밍
컴파일 타임 단정문, 부스트 MPL 라이브러리 등이 여기에 포함된다.
MPL에는 타입 등의 컴파일 타임 개체를 STL 자료구조로 관리할 수 있도록 지원한다.
// 세 개의 타입(float, double, long double)을 담는 컴파일 타임
// 컨테이너를 list 빗스하게 만들고, 이것을 floats라고 부름
typedef boost::mpl::list<float, double, long double> floats;
// 기존의 floats에 들어 있는 타입 집합은 물론이고 그 집합의 앞에 int가 삽입된
// 새로운 타입 리스트를 만들고, types라고 부름
typedef boost::mpl::push_front<floats, int>::type types;
타입을 담아 관리할 수 있는 컨테이너 덕분에, TMP의 활용도 더욱 쉬워졌다.
그리고 그러한 컨테이너를 타입리스트라고 부른다.
- 수학 및 수치 조작
유리수, 4원수 및 8원수, 최대 공약수 및 최소 공배수, 난수 등이 포함된다.
- 정확성 유지 및 테스트
암시적 템플릿 인터페이스를 형식화해 주는 라이브러리와 테스트 우선 프로그래밍을 가능하게 해 주는 라이브러리가 있다.
- 자료구조
타입 안전성을 갖춘 공용체, 투플 라이브러리가 여기에 해당한다.
- 타 언어와의 연동 지원
C++과 파이썬 사이의 걸림돌 없는 상호운용을 가능하게 하는 라이브러리도 지원한다.
- 메모리
고성능 고정 크기 할당자를 지원하는 풀 라이브러리, TR1에도 포함된 가지각색의 스마트 포인터가 이 범주에 들어간다.
TR1에 속하지 않은 스마트 포인터 중 하나가 scoped_array이다.
동적으로 할당된 배열에 대해 동작하는 auto_ptr 같은 스마트 포인터이다.
- 기타
CRC 점검, 날짜 및 시간 조작, 파일 시스템 횡단 등을 지원하는 라이브러리가 여기에 속한다.
부스트에서 배포하는 라이브러리는 정말 많은 일을 도와주고 있다.
하지만 GUI 개발 지원라이브러리, 데이터베이스 연동 등 모든 것을 지원하지는 않는다