C++26 Features: The Most Important New Updates

원본 영상: C++26 Features: The Most Important New Updates
채널: CppCon

개요

프로그래밍 언어는 한번 정해지면 그대로 사용하는 도구가 아니다. 강연은 우리가 사용하는 언어와 도구 뒤에서 연구와 변화가 계속되고 있다는 이야기로 시작한다. 발표자는 개발자가 이러한 변화를 접하고, 도구가 어떻게 발전하는지 살펴보는 일이 중요하다고 강조한다.

이번 강연의 주제는 C++26의 주요 변화다. 발표자는 Herb Sutter가 C++26을 “C++11 이후 가장 매력적인 릴리스”라고 평가했다고 소개한다. 정적 리플렉션과 계약 같은 큰 기능부터, 특정 요소에 접근하거나 컨테이너의 크기를 관리하는 구체적인 예제까지 함께 살펴본다.

정적 리플렉션: 열거형 값의 이름을 얻는 예제

리플렉션 소개에서는 열거형 값에 대응하는 이름을 반환하는 함수가 활용 사례로 등장한다. 발표자는 이를 더 유용한 예제로 제시하며, 프로그램에 선언된 요소의 정보를 활용하는 모습을 설명한다.

열거형 값의 이름을 반환하는 함수 예제

계약: 조건과 평가 전략을 함께 살펴보기

계약 설명에서는 사전조건, 사후조건, 단언문을 다룬다. 이어서 이를 평가하는 전략으로 ignore, observe, enforce, quick enforce의 네 가지를 소개한다. 계약의 조건을 표현하는 방식과 그 조건을 평가하는 방식을 함께 살펴보는 대목이다.

나눗셈 예외를 잡아 값이 없는 optional로 바꾸는 상수 평가 사례

23:38 - 나눗셈 예외를 잡아 값이 없는 optional로 바꾸는 상수 평가 사례

계약의 네 가지 평가 전략

여러 요소 중 원하는 위치에 접근하기

튜플과 유사한 구조를 다루는 예제에서는 지정한 인덱스의 요소를 반환하는 함수를 소개한다. 여러 요소를 담은 객체에서 필요한 위치의 값을 꺼내는 작업을 통해, 요소 접근을 표현하는 문법을 살펴본다.

튜플과 유사한 구조에서 지정한 인덱스의 요소를 반환하는 예제

실행 제어: 스케줄러에서 시작하는 예제

실행 제어 라이브러리 설명은 추상적인 개념을 소개한 뒤 구체적인 예제로 이어진다. 발표자는 예제를 구성하기 위해 가장 먼저 필요한 것으로 스케줄러를 제시한다.

리플렉션, 계약, 실행 제어 라이브러리, 정의되지 않은 동작을 줄이는 개선의 개관

02:13 - 리플렉션, 계약, 실행 제어 라이브러리, 정의되지 않은 동작을 줄이는 개선의 개관

스레드 풀 스케줄러에서 센더를 만들고 작업을 연결하는 예제

29:02 - 스레드 풀 스케줄러에서 센더를 만들고 작업을 연결하는 예제

inplace_vector: 용량과 원소 수를 구분하기

inplace_vector 예제에서는 용량을 3으로 정하고 원소 두 개로 초기화한 상태를 보여준다. 이때 용량은 3이고 초기 원소 수는 2다. 정해진 용량과 현재 담긴 원소 수가 서로 다른 값이라는 점을 구체적인 사례로 살펴본다.

제곱 변환과 짝수 필터 사이에서 cache_latest를 활용하는 변화

47:24 - 제곱 변환과 짝수 필터 사이에서 cache_latest를 활용하는 변화

용량이 3이고 두 원소로 초기화한 inplace_vector 예제

포화 산술: 표현 범위를 벗어난 결과 제한하기

발표자는 포화 산술을 계산 결과가 표현 가능한 범위를 벗어났을 때 최댓값이나 최솟값으로 제한하는 방식으로 설명한다. 계산 결과를 어떤 경계 안에 머물게 할 것인지가 이 기능을 이해하는 핵심이다.

std::polymorphic를 이용한 파생 객체와 컨테이너의 복사

53:08 - std::polymorphic를 이용한 파생 객체와 컨테이너의 복사

표현 범위를 벗어난 계산 결과를 경계값으로 제한하는 포화 산술

정리

강연은 C++26의 변화를 기능 이름뿐 아니라 구체적인 작업과 연결해 소개한다. 열거형 값의 이름을 얻고, 계약의 평가 전략을 구분하며, 여러 요소 중 지정한 위치에 접근하는 사례가 그 예다. 컨테이너의 용량과 원소 수, 수치 계산의 표현 범위처럼 코드를 작성할 때 구분해야 하는 개념도 함께 다룬다.

function_ref를 가벼운 비소유 호출 가능 객체 뷰로 소개

54:25 - function_ref를 가벼운 비소유 호출 가능 객체 뷰로 소개

이러한 예제는 계속 변화하는 C++를 이해하는 출발점이 된다. 각 기능이 어떤 작업에 쓰이는지 살펴보면, 새로운 문법과 라이브러리를 자신의 코드에서 검토할 때도 구체적인 질문을 세울 수 있다.

출처

CppCon — C++26 Features: The Most Important New Updates