Post List

2015년 1월 4일 일요일

그 밖의 이야기들

컴파일러 경고를 지나치지 말자

class B {
public:
  virtual void f() const;
};

class D : public B {
public:
  virtual void f();
};

위 Code는 warning: D:f() hides virtual B::f() 라는 경고를 유발한다. 당연하다는 듯이 넘어가는 사람들이 많은데, 지금 재선언 된것이 아니라 가려졌다는 사실을 목 놓아 외치는 중이란걸 명심해야 한다.

 * 컴파일러 경고를 쉽게 지나치지 맙시다. 여러분의 컴파일러에서 지원하는 최고 경고 수준에도 경고 메세지를 내지 않고 컴파일되는 코드를 만드는 쪽에 전력을 다 하십시오.
 * 컴파일러 경고에 너무 기대는 인생을 지양하십시오. 컴파일러마다 트집을 잡고 경고를 내는 부분들이 천차만별이기 때문입니다. 지금 코드를 다른 컴파일러로 이식하면서 여러분이 익숙해져 있는 경고 메세지가 온 데 간 데 없이 사라질 수도 있습니다.

TR1을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자.

 TR1의 라이브러리를 이루는 알맹이들은 총 14개 이다.

 - 스마트 포인터(smart pointer) : tr1::shared_ptr, tr1::weak_ptr 등...
 - tr1::function : 함수호출성 개체(callable entity)의 표현을 가능하게 해 주는 템플릿이다. 원래는 완벽히 똑같은 시그너처끼리의 호환만 가능하지만 tr1::function을 사용하면 매개변수 및 return type에 대해서도 변환이 가능한 다른 타입의 시그너처와도 호환이 가능하게 된다.
 - tr1::bind
 - 해시 테이블(hash table) : tr1::unordered_set, tr1::unordered_multiset, tr1::unordered_map, tr1::unordered_multimap
 - 정규 표현식(regular expression)
 - tr1::tuple : pair 템플릿이 신세대 버전. 2개 뿐 아니라 몇 개라도 담을 수 있다.
 - tr1::array : begin, end 등 멤버 함수를 지원하는 배열. 동적 메모리를 쓰지는 않음
 - tr1::mem_fn : 멤버 함수 포인터를 적용시키는(adapt) 용도에 쓸 수 있는, 문법적으로 천하통일을 이룬 템플릿.
 - tr1::reference_wrapper : 기존의 참조자가 객체처럼 행세할 수 있도록 만들어 주는 템플릿.
 - 난수 발생 : rand보다 몇 배는 우수한 난수 발생 기능
 - 특수 용도의 수학 함수 : 라게르(Laquerre) 다항식, 베셀(Bessel) 함수, 완전 타원 적분(complete elloptic integral) 등...
 - C99 호환성 확장 기능
 - 타입 특성정보(type trait)
 - tr1::result_of : 어떤 함수 호출의 반환 타입을 추론해 주는 템플릿

 * 최초에 상정된 표준 C++ 라이브러리의 주요 구성요소는 STL, iostream, 로케일 등입니다. 여기에는 C89의 표준 라이브러리도 포함되어 있습니다.
 * TR1이 도입되면서 추가된 것은 스마트 포인터(tr1::shared_ptr), 일반화 함수 포인터(tr1::function), 해시 기반 컨테이너, 정규 표현식 그리고 그 외의 1개 구성요소입니다.
 * TR1 자체는 단순히 명세서일 뿐입니다. TR1의 기능을 사용하기 위해서는 명세를 구현한 코드를 구해야 합니다 TR1 구현을 구할 수 잇는 자료처 중 한 군덱 바로 부스트입니다.

 부스트는 늘 여러분 가까이에

 아직 Morden C++을 사용하지 못하고 구버전의 C++ 컴파일러를 사용할 경우 많은 부분, Morden C++의 많은 부분이 부스트에 있는 경우가 많다. C++ 표준화위원들과 부스트는 밀접한 관계가 있다.

http://boost.org

 부스트 라이브러리 군단은 크게 십수개의 범주로 나뉘어 있다.

 - 문자열 및 텍스트 처리
 - 컨테이너
 - 함수 객체 및 고차(higher-order) 프로그래밍 : 람다(Lambda) 라이브러리 등...
 - 일반화 프로그래밍 : 텍사스 소때처럼 득실득실한 특성정보(traits) 클래스...
 - 템플릿 메타프로그래밍(TMP) : 컴파일 타임 단정문, 부스트 MPL 라이브러리 등...
 - 수학 및 수치 조작 : 유리수, 4원수(quaternion) 및 8원수(octonion), 최대 공약수 및 최소공배수, 난수 등
 - 정확성 유지 및 테스트
 - 자료구조
 - 타 언어와의 연동 지원 : C++ 과 Python 사이의 걸림돌 없는 상호운영을 가능하게 해줌
 - 메모리 : Pool 라이브러리 등
 - 기타 : CRC 점검, 날짜 및 시간 조작, 파일 시스템 횡단 등을 지원하는 라이브러리 등

 * 부스트는 동료 심사를 거쳐 등록되고 무료로 배포되는 오픈 소스 C++ 라이브러리를 개발하는 모임이자 웹사이트입니다. 또한 C++ 표준화에 있어서 영향력을 있는 역할을 맡고 있습니다.
 * 부스트에서 배포되는 라이브러리들 중엔 TR1 구성요소에 들어간 것도 잇지만, 그 외에 다른 라이브러리들도 아주 많습니다.



댓글 없음:

댓글 쓰기