부스트는 현장에 당장 투입할 수 있을 정도로 품질도 우수하고, 실탄 부담도 적은 동시에 속알맹이도 들여다볼 수 있게 오픈 소스이고, 게다가 어지간한 플랫폼과 컴파일러에서 모두 돌아가는 C++ 라이브러리입니다. 또한 부스트는 C++ 개발자들의 단체를 뜻하기도 합니다. 웹사이트 주소는 http://boost.org입니다.
물론 C++만 다루는 개발자 단체 및 웹사이트는 부스트 말고도 많지만, 부스트는 다른 곳에서는 절대로 따라올 수 없는 차별첨이 두 개나 있습니다. 첫째, 부스트는 C++ 표준화 위원회와 밀접하고 영향력 있는 관계를 유지하고 있는 곳으로 유일합니다. 원래부터 위원회에 속해 있던 회원들 몇 명이 세운 곳이기도 하고, 표준 C++에 추가될 수 있는 기능들의 시험 장소로 사용되면서 실제로 C++에 도입되기도 합니다.
부스트만의 차별점 두 번째는 라이브러리 승인 과정입니다. 이곳의 승인 과정은 공개 동료 심사(public peer revies)에 기반을 두고 있습니다. 여러분이 만든 라이브러리를 부스트에 한 번 내 보고 싶다면, 일단 부스트 개발자 메일링 리스트에 글을 올려서 여러분이 만든 라이브러리가 얼마나 관심을 끄는지를 알아봅니다. 어느 정도 됐다 싶으면 여러분 것에 대해 사전 검사(preliminary examination)가 시작되는데, 부스트 사이트에서 말하는 소위 "토론-수정-다시 제출, 이 과정을 만족할 때까지 반복(Disscuss, refine, resubmit, Repeat until satisfied)"의 고리를 열심히 돌게 됩니다.
이 과정이 끝나면 라이브러리를 공식적으로 제출하기 위한 형식을 갖추게 되는데, 이때 심사 관리자가 여러분의 라이브러리가 부스트의 최소 요구사항을 만족하는지를 확인해 줍니다. 이 과정 이후에 비로소 여러분의 것이 부스트의 쟁쟁한 개발자 모임에 공식 심사 대상으로 제출되고, 심사는 지원자들이 맡게 되어, 이들은 주어진 심사 기간 동안 여러분의 제출물(소스 코드, 설계 문서, 사용자 문서 등)을 검토하면서 여러 사항에 주안점을 두어 평가를 진행합니다. 각각에 대한 의견을 담은 심사 결과는 부스트 메일링 리스트를 통해 공개적으로 올라옵니다. 그렇기 때문에 심사를 진행하는 당사자와 그 외의 사람들이 그 심사 결과를 보고 다른 의견을 나눌 수도 있게 되지요. 심사 기간이 끝날 무렵이 되면, 심사 관리자는 그간의 의견을 취합하여 여러분의 라이브러리에 대해 승인(accepted), 조건부 승인(conditionally accepted), 혹은 기각(rejected)을 결정합니다.
이러한 동료 심사 시스템 덕택에 함량 미달의 라이브러리가 부스트에 발을 들여 놓는 일이 효과적으로 차단되었을 뿐만 아니라, 라이브러리를 한 번 제대로 만들어 보고 싶은 사람들에게 업계 수준의 교차 플랫폼 라이브러리를 설계, 구현하고 문서화하는 방법이 자연스럽게 전수되는 효과를 낳았습니다. 부스트의 이름하에 배포되는 라이브러리로서 승인이 되려면 최소한 두 번 이상의 공개 심사를 받는 것이 관습입니다.
현재 부스트에서 배포되는 라이브러리는 수십 개이고, 지금도 새로운 것들이 속속 추가되고 있습니다. 기존의 라이브러리가 없어지는 경우도 더러 있는데, 대개 기존의 기능을 지원하되 기능이 더 좋고 설계도 더 깔끔하게 빠진(이를테면 융통성 혹은 효율에서 더 우수한) 라이브러리가 나와서 이것으로 대체되는 경우입니다.
부스트에서는 분야와 깊이를 가리지 않고 정말 많은 부분에서 활약하고 있는 라이브러리 군단을 크게 십수 개의 범주로 나눌 수 있습니다.
문자열 및 텍스트 처리 주요 구성요소로 타입 안전성을 갖춘 printf 비슷한 서식화 기능, 정규 표현식 및 토큰화와 구문분석 기능이 있습니다.
컨테이너 STL 양식의 인터페이스를 제공하는 고정 크기 배열, 가변 크기 비트세트, 다차원 배열 등이 포함되어 있습니다.
함수 객체 및 고차(higher-order) 프로그래밍 TR1의 기능을 구현하는 데 사용된 몇 개의 기반 라이브러리가 여기에 해당됩니다. 람다(Lambda) 라이브러리를 예로 들 수 있는데, 이 라이브러리는 별도의 준비 없이 즉석에서 함수 객체를 생성해 주는 기막힌 기능을 제공합니다.
일반화 프로그래밍 특성정보(traits) 클래스를 만나실 수 있습니다.
템플릿 메타 프로그래밍(TMP) 컴파일 타임 단정문, 부스트 MPL 라이브러리 등이 여기에 포함됩니다. 대표적인 예로 타입 등의 컴파일 타임 개체를 STL스러운 자료구조(타입리스트(typelist)라고 알려진 컨테이너)로 관리할 수 있도록 지원합니다.
수학 및 수치 조작 유리수, 4원수(quaternion) 및 8원수(octonion), 최대 공약수 및 최소 공배수, 난수 등이 포함됩니다.
정확성 유지 및 테스트 암시적 템플릿 인터페이스를 형식화해 주는 라이브러리와 테스트 우선 프로그래밍을 가능하게 해 주는 라이브러리가 있습니다.
자료구조 타입 안전성을 갖춘 공용체(크기와 쓰임이 가지가지인 "어떤" 타입도 담을 수 있는 자료구조), 튜플 라이브러리가 이 범주에 들어갑니다.
타 언어와의 연동 지원 C++과 파이썬 사이의 걸림돌 없는 상호운용을 가능하게 하는 라이브러리도 지원합니다.
메모리 고성능의 고정 크기 할당자를 지원하는 풀(Pool) 라이브러리, 가지각색의 스마트 포인터가 이 범주에 들어갑니다. TR1에 속하지 않은 스마트 포인터 중 하나가 scoped_array인데, 동적으로 할당된 배열에 대해 동작하는 auto_ptr 같은 스마트 포인터입니다.
기타 CRC 점검, 날짜 및 시간 조작, 파일 시스템 횡단 등을 지원하는 라이브러리가 주요 구성요소입니다.
이렇듯 부스트에서 배포하는 라이브러리는 정말 많은 일을 도와주고 있습니다. 하지만 드넓고 거친 프로그래밍의 모든 세계를 망라하고 있는 것은 아닙니다. 원하는 라이브러리를 실제로 지원하는지 부스트 사이트에 들어가서 실제로 확인해봅시다. 설령 원래 찾으려고 했던 것을 못 찾았다 해도, 아쉬움이 생길 시간도 없이 분명히 재미있는 흥밋거리들이 있을 것입니다.
부스트는 동료 심사를 거쳐 등록되고 무료로 배포되는 오픈 소스 C++ 라이브러리를 개발하는 모임이자 웹사이트입니다.
또한 C++ 표준화에 있어서 영향력 있는 역할을 맡고 있습니다.
부스트에서 배포되는 라이브러리들 중엔 TR1 구성요소에 들어간 것도 있지만, 그 외에 다른 라이브러리들도 아주 많습니다.