오랜만에 Boost가 새롭고 강력한 무기를 들고 나타났다.
Boost는 C++ 차기 표준 라이브러리 작업을 위한 다양한 실험과 검증을 하는 목적으로 만들어진 라이브러리이다. 그래서 사실상 표준 확장 라이브러리라고 불러도 무방하다. 몇몇 라이브러리는 TR1에 포함되었고 몇몇은 TR2에 등록되기 위한 준비를 하고 있다.
이번 릴리즈에 새롭게 추가된 라이브러리를 살펴보자.
Foreach Library
sequence를 순회하는 코드를 단순하고 쉽게 작성할 수 있게 만들어주는 라이브러리이다. C#의 foreach와 비슷한 사용을 보여준다.
int sum = 0;
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
sum += i;
}
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
{
sum += i;
}
C#의 foreach 사용
int sum = 0;
int[] array = new int [] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
foreach (int i in array)
{
sum += i;
}
int[] array = new int [] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
foreach (int i in array)
{
sum += i;
}
C++의 BOOST_FOREACH
int sum = 0;
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
BOOST_FOREACH(int i, array)
{
sum += i;
}
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
BOOST_FOREACH(int i, array)
{
sum += i;
}
Statechart Library
복잡한 유한 상태 머신(finite state machines)을 읽기 쉽고 유지 보수하기 쉬운 코드로 만드는 라이브러리이다. (유한 상태 머신은 게임 개발에서 간단한 인공 지능을 구현하는데 사용되고 있다.)
TR1 Library
TR1의 C++0x 표준 확장 라이브러리의 첫번째 Technical Report를 말한다. Boost의 라이브러리 중 TR1에 편입된 라이브러리는 이제 std::tr1 네임스페이스를 가지고 사용할 수 있다. 사용하는 방법은 여기를 참고한다.
TR1
- Reference Wrappers
- Smart Pointers
- result_of
- Function Object Binders
- Polymorphic function wrappers
- Type Traits
- Random Number Generators and Distributions
- Tuples
- Fixed Size Array
- Hash Function Objects
- Regular Expressions
- Complex Number Additional Algorithms
- Smart Pointers
- result_of
- Function Object Binders
- Polymorphic function wrappers
- Type Traits
- Random Number Generators and Distributions
- Tuples
- Fixed Size Array
- Hash Function Objects
- Regular Expressions
- Complex Number Additional Algorithms
Typeof Library
C++ 표준에서는 주어진 expression으로 부터 type을 구하는 typeof operator가 없다. - 일부 컴파일러에서는 확장 구현으로 제공하기도 한다. - Boost의 Typeof 라이브러리는 typeof operator를 라이브러리 레벨에서 구현한 것이다.
* C++ 표준 위원회의 typeof에 관한 논의를 보고 싶다면 다음 문서를 참고
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1607.pdf
Xpressive Library
object-oriented regular expression template 라이브러리이다. 기존의 Regex 라이브러리와 다른 점은 Regular expression을 runtime-time에 분석될 수 있는 문자열로 작성할 수 있을 뿐만 아니라 compile-time에 분석될 수 있는 expression template으로 작성할 수도 있다. 이런 정적인 Regular expression의 장점은 expression의 검사를 컴파일 시점에서 할 수 있다는 것과 expression 분석이 컴파일 시점에서 이루어지기 때문에 실행속도가 빠르다.
새로운 추가 라이브러리 뿐만 아니라 기존 라이브러리의 업데이트도 포함하고 있다. 자세한 내용은 Boost 사이트를 방문해서 살펴보길 바란다. 개인적으로 관심있는 내용 몇가지만 간단히 요약하고 이 포스트를 마친다.
Filesystem Library
TR2 등록을 위한 준비 작업
국제화를 위한 template class를 제공 (basic_path, basic_filesystem_error, basic_directory_iterator, basic_directory_entry)
Function Library
small buffer optimization으로 성능 개선
Signals Library
singal 호출의 성능 개선
Smart Pointers Library
allocator 지원
