C++20 - Feature List 동결 - 모듈, 코루틴, Concepts 채용, Contracts은 연기

출처

ISO C++ 위원회는 2020년 2월까지 공개 예정인 C++20 이라고 불리는 차기 C ++ 표준 기능 목록을 종료했다. C++20은 C++의 중요한 개정판으로 모듈, 코루틴, Concepts을 새로운 주요 기능으로 제공한다.

최근 쾰른에서 열린 회의에서 ISO C++ 위원회는 피드백 수집을 위해 모든 국가 표준 기관에 제출하는 C++ 20 초안의 마지막이 되는 변경에 합의했다.
마지막으로 추가된 것은 std::format, C++20 동기화 라이브러리, 향상된 스레드 등이다. 이들과는 대조적으로 Contracts은 드래프트에서 제외되고, C++23 / C++26까지 연기 되었다.

C++20에서는 새로운 텍스트 형식 API로 std::format이 도입되었다. 1} std::format은 printf 함수 제품군과 같은 유연성을, 메시지와 인수를 분리한 자연적인 호출 형식으로 실현하는 동시에, iostreams 과 동등의 안전성과 확장성을 구비하는 것을 목표로 다음 같은 기술을 가능하게 한다.

string message = format("The answer is {}.", 42);

C++20에서는 효율적인 atomic 대기와 세마포어, 래치, 배리어, 락 프리 정수형 등의 지원을 포함하여 동기화 및 스레드 조정의 개선도 이루어진다.

지금까지의 회의에서 표준 위원회는 모듈과 코루틴, Concepts 등 언어의 사용 방법의 근본적인 전환을 기대하는 몇 가지 중요한 기능의 도입에 동의했다.

모듈 지원은 이름 공간에 직교하는 것으로, 헤더 파일과 소스 파일의 분리를 필요로 하는 대규모 코드 기반을 논리적 부분으로 구조화 하는 것을 허용한다. 이 방법은 함수를 내보내는 간단한 모듈을 정의하고, 다른 파일에서 이것을 이용할 수 있다.

// math.cppm
export module mod1;

export int identity(int arg) {
    return arg;
}

// main.cpp

import mod1;

int main() {
  identity(100);
}

코루틴운 중지 및 재개 가능한 함수이다. 코루틴은 스택리스 이다.
즉, 중지하면 호출자에게 돌아 간다. 코루틴에서는 새롭게 3개의 통신이 지원된다.
“co_await”는 호출자에게 값을 반환하지 않고 실행을 일시 중지한다.
“co_yield”은 중단하고 값을 돌려 준다.
“co_return”은 실행을 종료하고 값을 돌려 준다.
이러한 세 가지 오퍼레이터에 의해 비동기 작업, 제너레이터, 지연 함수의 작성이 가능하게 된다. 다음은 제너레이터기의 예이다.

generator<int> iota(int n = 0) {
  while(true)
    co_yield n++;
}

또 하나의 중요한 기능인 Concepts은 등식 추론(equational reasoning)의 기반이 될 것이다. Concepts을 사용하여 템플릿 인수를 컴파일 할 때 유효성 검사를 수행하고, 유형의 속성에 따라 함수 디스패치를 할 수 있게 된다.

Contracts 이외에도 리플렉션 메타 클래스, 실행자, 속성 등 중요한 언어 기능이 C++20 에는 포함 되지 않고, C++23 / C++26 으로 연기되었다.

자세한 내용은 full trip report를 참조하기 바란다.


이 글은 2019-09-22에 작성되었습니다.