Boost (C++ 라이브러리)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Boost는 C++ 프로그래밍 언어를 위한 광범위한 오픈 소스 라이브러리 모음이다. 스마트 포인터, 파일 시스템 추상화, 템플릿 메타 프로그래밍 등 다양한 기능을 제공하며, 효율성과 유연성을 위해 템플릿을 광범위하게 사용한다. Boost는 Boost 소프트웨어 라이선스에 따라 배포되며, 대부분 헤더 파일 기반으로 제공되어 별도의 빌드 과정 없이 사용할 수 있다. Boost는 C++ 표준화에 큰 영향을 미치며, C++11, C++17 등 최신 C++ 표준에 Boost 라이브러리의 많은 기능이 포함되었다.
더 읽어볼만한 페이지
- 제네릭 프로그래밍 - 다형성 (컴퓨터 과학)
다형성은 프로그래밍 언어에서 이름이 여러 자료형에 사용되거나 객체가 여러 타입으로 취급되는 능력으로, 코드 재사용성과 유연성을 높이며 임시 다형성, 매개변수 다형성, 서브타이핑 등으로 분류되고 객체 지향 프로그래밍의 중요한 특징이며 정적, 동적 다형성으로 구현된다. - 제네릭 프로그래밍 - 표준 템플릿 라이브러리
표준 템플릿 라이브러리(STL)는 알렉산더 스테파노프의 주도로 탄생한 C++ 라이브러리로서, 제네릭 프로그래밍을 지원하기 위해 컨테이너, 반복자, 알고리즘, 함수 객체 등의 핵심 구성 요소로 이루어져 있으며, HP에서 무료로 공개한 구현을 기반으로 다양한 구현체가 존재한다. - C++ 라이브러리 - D-Bus
D-Bus는 2002년에 시작된 프로세스 간 통신 시스템으로, 시스템 버스와 세션 버스를 통해 정보 공유, 모듈성, 권한 격리를 제공하며, 일대일 요청-응답 및 발행/구독 통신 방식을 지원한다. - C++ 라이브러리 - Botan
Botan은 다양한 암호화 알고리즘을 지원하는 암호화 라이브러리이며, RSA, ElGamal, AES, SHA-256 등 널리 사용되는 알고리즘을 포함하여 공개키 암호화, 공개키 서명, 키 교환, 블록 사이퍼, 스트림 사이퍼, 해시 함수 등을 제공한다. - C++ - 헤더 파일
헤더 파일은 프로그래밍 언어에서 코드 재사용성, 모듈화, 컴파일 시간 단축에 기여하며 함수 프로토타입, 변수 선언 등을 포함하고 `#include` 지시어로 소스 코드에 포함되어 사용되는 파일이다. - C++ - 소멸자 (컴퓨터 프로그래밍)
소멸자는 객체가 메모리에서 제거되기 직전에 호출되는 멤버 함수로, 객체 자원 해제 및 정리 작업을 수행하며, C++ 등 여러 언어에서 구현되고 메모리 누수 방지에 기여한다.
Boost (C++ 라이브러리) - [IT 관련 정보]에 관한 문서 | |
---|---|
일반 정보 | |
![]() | |
개발자 | 알렉산더 스테파노프 (Alexander Stepanov) 데이비드 머서 (David Musser) |
최초 릴리스 | 1999년 9월 1일 |
안정화 버전 출시일 | }} |
프로그래밍 언어 | C++ |
장르 | 라이브러리 |
라이선스 | Boost Software License |
웹사이트 | Boost 공식 웹사이트 |
2. 디자인
Boost 라이브러리는 광범위한 C++ 사용자와 응용 분야를 대상으로 한다. 스마트 포인터와 같은 범용 라이브러리부터 ''Boost FileSystem''과 같은 운영 체제 추상화, 템플릿 메타 프로그래밍(MPL) 및 특정 도메인 언어(DSL) 생성(Proto)과 같이 주로 다른 라이브러리 개발자 및 고급 C++ 사용자를 대상으로 하는 라이브러리에 이르기까지 다양하다.[7]
Boost는 자체 자유 오픈 소스 라이선스인 Boost 소프트웨어 라이선스에 따라 라이선스가 부여된다.[11] 이는 BSD 라이선스 및 MIT 라이선스와 유사한 허가형 라이선스이지만, 이진 파일 형태로 재배포할 때 저작자 표시를 요구하지 않는다.[12] 이 라이선스는 2008년 2월부터 OSI의 승인을 받았으며,[13][14] 자유 소프트웨어 재단에 의해 자유 소프트웨어 라이선스로 간주되고 GNU 일반 공중 사용 허가서와 호환된다.[15]
데이비드 아브라함스(David Abrahams)는 Boost의 창립자 중 한 명이며, 현재 커뮤니티에서 활동하고 있다.[10] 니콜라이 조수티스(Nicolai Josuttis)는 C++에 관한 여러 저서를 집필했으며, 2001년 Boost array 라이브러리에 기여했다.[10]
Boost는 C++ 프로그래밍 언어를 위한 다양한 라이브러리들의 집합이다. 이 라이브러리들은 다음과 같은 광범위한 분야를 다루고 있다.
효율성과 유연성을 보장하기 위해 Boost는 템플릿을 광범위하게 사용한다. Boost는 C++에서 제네릭 프로그래밍 및 메타 프로그래밍에 대한 광범위한 연구와 작업의 원천이었다.[7]
3. 라이선스
4. 관련 인물
5. 구성 요소
Boost는 템플릿을 광범위하게 사용하여 효율성과 유연성을 보장하며, C++에서 제네릭 프로그래밍 및 메타 프로그래밍 연구에 기여했다.[7]
대부분의 Boost 라이브러리는 헤더 파일 기반으로 인라인 함수 및 템플릿으로 구성되어 별도 빌드가 필요 없다. 일부는 독립적으로 존재한다.[8][9]
5. 1. 선형 대수
Boost는 '''uBLAS'''라는 선형대수 라이브러리를 제공하며, BLAS 레벨 1, 2, 3의 연산을 구현한다.[17]
```cpp
#include
#include
#include
using namespace boost::numeric::ublas;
/* "y = Ax" 예시 */
int main()
{
vector
x(0) = 1; x(1) = 2;
matrix
A(0,0) = 0; A(0,1) = 1;
A(1,0) = 2; A(1,1) = 3;
vector
std::cout << y << std::endl;
return 0;
}
5. 2. 난수 생성
Boost.Random은 분포에 의존하지 않는 의사 난수 생성기와 확률 분포를 제공한다.[17] 메르센 트위스터 생성기를 이용한 정규 분포 샘플링 등을 지원한다.
다음은 메르센 트위스터 생성기를 이용하여 정규 분포를 통해 샘플링하는 방법을 나타낸 코드이다.
#include
#include
double SampleNormal(double mean, double sigma)
{
// 비결정론적 난수 생성기를 시드로 사용.
boost::random::random_device seed_gen;
// 메르센 트위스터 난수 생성기 생성.
typedef boost::random::mt19937 MyGenerator;
MyGenerator rand_gen(seed_gen);
// 가우스 확률 분포 선택.
typedef boost::random::normal_distribution
MyDistribution dist(mean, sigma);
// 함수의 형태로 난수 생성기를 분포에 바인딩한다.
boost::random::variate_generator
// 분포에서 샘플링한다.
return sampler();
}
더 자세한 내용은 [https://www.boost.org/doc/libs/release/libs/random/ Boost Random Number Library]에서 확인할 수 있다.
Boost.Random의 일부 기능은 C++11 표준 라이브러리에 포함되었다.
5. 3. 텍스트 파싱
Boost.Spirit은 바쿠스-나우어 표기법에 최대한 가깝게 C++(C++) 프로그램 형식으로 직접 파서를 기술할 수 있는 Boost에서 가장 복잡한 라이브러리 중 하나이다.[17]
쉼표로 구분된 숫자를 읽는 파서의 예시는 다음과 같다.
```cpp
#include
#include
#include
#include
#include
using namespace std;
using namespace boost::spirit;
// Parser comma-separated numbers
bool parse_numbers(const char* str, vector
{
return parse(str,
// Start grammar
(
real_p[push_back_a(v)] >> *(',' >> real_p[push_back_a(v)])
)
,
// End grammar
space_p).full;
}
```
자세한 내용은 [https://www.boost.org/doc/libs/release/libs/spirit/ Spirit User's Guide]에서 확인할 수 있다.
5. 4. 정규 표현식
Boost.Regex는 정규 표현식을 이용하는 라이브러리이다. 필터, 검색, 파싱, 텍스트 처리에 필요한 각종 함수를 가지고 있다.
정규 표현식의 종류로 PCRE, POSIX 기본 정규 표현식과 POSIX 확장 정규 표현식을 사용할 수 있다.
Boost.Regex의 서브셋은 C++11의 표준 라이브러리로 채택되었다.
Boost.Xpressive는 동적 정규 표현식과 정적 정규 표현식을 제공한다.
다음은 "나는 2052/10/30에 태어났다."라는 문자열에서 연, 월, 일을 추출하는 정규 표현식을 보여주는 프로그램 예시이다. 두 경우 모두 출력 결과는 같다.
```cpp
#include
#include
#include
using namespace boost::xpressive;
int main()
{
// 기존의 char[] 타입 문자열 리터럴의 내부 표현은 처리 시스템에 따라 다르며, Shift_JIS의 0x5c 등, 경우에 따라 문제를 일으킬 수 있으므로 UTF-8 문자열 리터럴을 사용해야 한다.
// 그러나 C++20 이후에는 UTF-8 문자열 리터럴의 타입이 char8_t[] 타입이 되므로 명시적인 캐스팅이 필요하다.
// 또한, Microsoft Visual C++ 환경에서는 기본적으로 UTF-8 문자열을 콘솔에 출력할 수 없다.
std::string str = "私は2052/10/30に生まれた。";
sregex rx = sregex::compile(R"((\d{1,4})/(\d{1,2})/(\d{1,2}))");
smatch m;
if (regex_search(str, m, rx)) {
// 여기서는 range-based for 구문을 사용하고 있으므로 C++11 이후를 지원하는 컴파일러가 필요하다.
for (const auto& e : m) {
std::cout << e << std::endl;
}
}
}
```
```cpp
#include
#include
#include
using namespace boost::xpressive;
int main()
{
std::string str = "私は2052/10/30に生まれた。";
mark_tag years(1), month(2), days(3);
sregex rx =
(years = repeat<1, 4>(_d)) >> '/' >>
(month = repeat<1, 2>(_d)) >> '/' >>
(days = repeat<1, 2>(_d));
smatch m;
if (regex_search(str, m, rx)) {
std::cout << m[0] << std::endl;
std::cout << m[years] << std::endl;
std::cout << m[month] << std::endl;
std::cout << m[days] << std::endl;
}
}
5. 5. 그래프 알고리즘
Boost.Graph는 그래프 이론에 대한 다양한 관점과 알고리즘을 제공하는 Boost 라이브러리이다. 그래프 개념을 유연하고 효과적으로 구현하며, 위상 정렬 등의 알고리즘을 지원한다.[17]
다음은 위상 정렬 알고리즘의 예시이다.
```cpp
#include
#include
#include
#include
#include
#include
#include
int main()
{
using namespace boost;
// 그래프 유형
typedef adjacency_list
property
// 정점 처리
typedef boost::graph_traits
// 정점 체인을 위한 컨테이너
typedef std::vector
// 간선 표현 유형
typedef std::pair
// 그래프의 간선
Pair edges[6] = {
Pair(0,1), Pair(2,4),
Pair(2,5),
Pair(0,3), Pair(1,4),
Pair(4,3)
};
// 개수
Graph G(edges, edges + 6, 6);
// 정점의 숫자 핸들을 얻기 위한 사전
boost::property_map
// 정렬된 정점을 저장하기 위한 컨테이너
container c;
// 알고리즘 실행
topological_sort(G, std::back_inserter(c));
// 결과 출력: 컨테이너에서 그래프의 정점 디스크립터 정렬,
// 정점의 일련 번호 가져오기
std::cout << "위상 검사:";
for (container::reverse_iterator ii = c.rbegin(); ii != c.rend(); ++ii)
std::cout << id[*ii] << " ";
std::cout << std::endl;
return 0;
}
```
자세한 내용은 https://www.boost.org/doc/libs/release/libs/graph/ The Boost Graph Library를 참조.
5. 6. 멀티스레딩
Boost.Thread는 플랫폼에 독립적인 스레드 추상화를 제공한다. POSIX 스레드를 기반으로 객체 지향화된 형태이다.[17]
#include
#include
void hello_world()
{
std::cout << "Hello world, I'm a thread!" << std::endl;
}
int main()
{
// hello_world 함수를 호출하는 새로운 스레드를 시작한다.
boost::thread my_thread(&hello_world);
// 스레드가 종료될 때까지 기다린다.
my_thread.join();
return 0;
}
Boost.Thread의 서브셋은 C++11 표준 라이브러리로 통합되었다.
6. C++ 표준 라이브러리와의 관계
Boost는 C++ 표준화 위원회 위원들에 의해 설립되었으며, 현재도 많은 위원들이 구성원으로 남아 있다. 이러한 이유로 Boost 커뮤니티는 C++ 표준화에 큰 영향력을 가지고 있다. 실제로 표준화 위원회가 발표한 TR1의 2/3 이상이 Boost 라이브러리를 기반으로 하고 있다. Random, Regex, Thread 등은 모두 C++11 규격의 표준 라이브러리로 정식으로 도입 및 표준화되었다. 그 후 Optional이나 Any 등이 C++17 규격으로 도입되면서 계속해서 영향을 주고 있다. 이로 미루어 볼 때, Boost는 새롭게 고안된 기능을 표준화하기 전 시험 운용하는 장소라고도 할 수 있다.
참조
[1]
웹사이트
Old Versions
https://www.boost.or[...]
2017-04-11
[2]
웹사이트
List of Boost libraries
https://www.boost.or[...]
[3]
웹사이트
Boost Software License
https://www.boost.or[...]
2022-01-06
[4]
웹사이트
Library Technical Report
http://www.open-std.[...]
JTC1/SC22/WG21 - The C++ Standards Committee
2012-02-01
[5]
웹사이트
A Threading API for C++
http://www.open-std.[...]
[6]
웹사이트
StackOverflow.com site
https://stackoverflo[...]
[7]
서적
C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond
Pearson Education
2004-12-10
[8]
웹사이트
Asio web site
http://think-async.c[...]
[9]
웹사이트
Spirit web-site
http://boost-spirit.[...]
[10]
웹사이트
Boost Mailing Lists (A.K.A. Discussion Groups)
http://www.boost.org[...]
2020-04-28
[11]
웹사이트
Boost Software License - Version 1.0
https://www.boost.or[...]
2023-12-22
[12]
웹사이트
Boost Software License
http://www.boost.org[...]
2016-08-01
[13]
웹사이트
Boost mailing list archive
http://thread.gmane.[...]
[14]
웹사이트
Boost Software License 1.0 (BSL-1.0) {{!}} Open Source Initiative
http://opensource.or[...]
2008-02-05
[15]
웹사이트
Various Licenses and Comments about Them - GNU Project - Free Software Foundation (FSF)
https://www.gnu.org/[...]
[16]
웹사이트
Version 1.87.0
https://www.boost.or[...]
2024-12-24
[17]
문서
乱数 - boostjp
https://boostjp.gith[...]
[18]
문서
オブジェクトにユニークなIDを付ける - boostjp
https://boostjp.gith[...]
[19]
문서
動的型 - boostjp
https://boostjp.gith[...]
[20]
웹인용
Old Versions
http://www.boost.org[...]
2017-04-11
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com