SW 그리고 아빠 엔지니어링 중...

아는 만큼 보이고, 경험해봐야 알 수 있고, 자꾸 써야 내 것이 된다.

L C++

40년간의 C++ 표준 변화 요약

보리남편 김 주부 2023. 8. 8. 12:57
40년간 C++ 표준의 변화를 약식으로 정리된 내용을 번역한 글 입니다.

C++98

  • 80년대 말에 Bjarne Stroustrup 과 Margaret A. Ellis가 유명한 Annotated C++ Reference Manual (ARM) 책을 저술
  • 이 책의 목적은 두가지
    • 너무 많은 C++ 독립 구현체들이 있었기 때문에 ARM은 C++의 기능을 정의
    • C++ 표준인 C++98 (ISO/IEC 14882)의 기초가 됨
  • C++98은 몇몇 중요한 기능들을 포함
    • Templates
    • STL(Standard Template Library) : 컨테이너, 알고리즘, 스트링, IO Stream들을 포함

C++03

  • C++03 (14882:2003) 에서는 아주 작은 기술 수정이 이뤄짐
  • 커뮤니티에서는 C++98 을 포함한 C++03을 "레거시 C++" 이라고 부름

TR1

  • 2005년에 재미난 일이 생김. TR1(Technical Report 1)이 발간
  • TR1 은 C++11 을 위한 큰 발걸음이자 Modern C++로 향하는 첫걸음
  • C++ 표준 위원회 멤버들의 Boost 프로젝트에 기반
  • 차세대 C++ 표준에 들어갈 13개의 라이브러리를 포함 (정규식, 난수, std::shard_ptr 같은 스마트 포인터, 해쉬테이블등)

C++11

  • 다음 C++ 표준이었지만, 우린 Modern C++ 이라고 부름. 이 이름엔 C++14 와 C++17 을 포함
  • C++11 은 C++ 을 개발하는 방식을 완전히 바꿔버림
    • TR1의 컴포넌트 뿐만 아니라 move-semantic, perfect forwarding, variadic templates, constexpr 등을 가져옴
    • 스레딩 기반의 메모리 모델과 Threading API 가 포함

C++14

  • 작은 C++ 표준. read-writer locks, generalized 된 lambdas 와 constexpr 함수 도입

C++17

  • 크지도 작지도 않음
  • 2개의 뛰어난 기능을 포함 : Parallel STL 과 표준화된 파일시스템
    • 약 80개의 STL 알고리듬이 실행 정책을 통해 실행 가능 (병렬, 순차, 벡터)
  • Boost 에서 많이 영향을 받음. 파일 시스템과 3개의 데이터 타입(std::optional, std::variant, std::any)

C++20

  • C++20은 C++11과 마찬가지로 우리가 C++ 프로그래밍하는 것을 바꿔 버림
  • 특히 큰 4가지
    • Ranges : Ranges 라이브러리를 이용하면, 컨테이너에서 직접 알고리듬을 표한하고 파이프 기호로 알고리듬을 조합하여 무한 데이터 스트림에 적용 가능
    • Coroutines: C++에서 비동기 프로그래밍이 주류가 되게 해줌. 협동작업, 이벤트 루프, 무한 데이터 스트림 및 파이프라인의 기반이 됨
    • Concepts: 템플릿을 생각하고 프로그래밍 하는 방식을 바꿈. 템플릿 인자에 대해서 제약을 걸거나 타입 검사등을 할 수 있게 해주고, 컴파일시에 확인가능
    • Modules: 헤더 파일의 한계를 넘게 해줌. 다양한 것을 약속해줌. 예를 들어 전처리기가 필요없어지고, 궁극적으로 빌드 시간이 단축되고 패키지를 더 쉽게 빌드 할수 있게 됨

C++23

  • 2023년 7월 현재 C++23이 최종 투표를 앞두고 있음
  • 작지만 언어 자체에 매우 영향력 있는 기능인 "Deducing this"를 추가
    • 파이썬과 비슷하게, 멤버함수에 implicit하게 전달된 this 포인터를 explicit 할 수 있음
    • 이를 통해서 복잡한 테크닉인 CRTP(Curiously Recurring Template Pattern), 또는 Overload 패턴 구현이 간단해짐
  • C++23 라이브러에도 중요한 추가들이 있음
    • import std; 로 스탠다드 라이브러리를 직접 임포트 하거나, std:print 및 std:println 에서 C++20 포맷 스트링을 적용 가능
    • 성능상 std::map 을 대체하는 std::flat_map
    • std::optional 인터페이스가 Composability를 위해 Monadic 인터페이스로 확장됨
    • 새로운 데이터타입인 std::expected
    • 다차원 span 인 std::mdspan
    • 숫자들의 스트림을 생성하기 위한 코루틴인 std::generator

 

원문


https://www.modernescpp.com/index.php/c23-the-next-c-standard/

 

C++23: The Next C++ Standard – MC++ BLOG

To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing

www.modernescpp.com

회사 또는 개인적으로 어느버전까지 쓰고 계신가요?

 

728x90