Modern C++에 대해 알아보자

2 분 소요

Modern C++란?

Bjarne Stroustrup에 의해 개발된 초기 C++은 컴퓨터에 최적화 되어 빠른 속도를 기대할 수 있었지만, 프로그래머가 프로그램을 만들면서 신경써야 할 부분이 굉장히 많았고 언어에서 제공해주는 라이브러리 등의 기능이 풍부하지 않았기 때문에 비공식적으로 개개인이 만든 함수나 모듈 형태로 이용했습니다.

C++은 1983년에 탄생한 언어이지만 1998년 최초의 표준인 C++98이 완성되었고, C++98의 문제점을 개선하여 2003년에 C++03을 발표합니다. 현재 C++라고 부르는 경우 일반적으로 C++98, C++03을 의미하는 경우가 많습니다.

이후 C++ 표준 위원회는 8년간 많은 기능을 추가하고 변화를 준 C++11을 2011년에 발표합니다.

C++11을 시작으로 기능을 개선하거나 새로운 기능들을 C++에 추가하기 시작했으며 3년 주기로 제공하는 표준안 C++14, C++17, 가장 최근의 C++20을 두고, 일반적으로 Modern C++이라고 부릅니다.

Modern C++는 3년마다 제정됩니다

본래 C++98은 1989년에 시작되어 1994년에 출시될 것으로 예상했으나 1998년에 제정되었습니다.

C++11역시 2000년대의 한 시점에 공개될 것으로 예상해서 C++0x라고 불렸으나 2009년까지 출시되지 못했습니다. 그래서 다시 2010년대의 한 시점에 공개될 것으로 예상해 C++1x로 변경했고, 2011년 8월 12일에 들어서 국제 표준으로 확정되면서 C++1x는 최종적으로 C++11이 되었습니다.

결과적으로 각각 4년, (C++0x이면 2009년까지는 출시되었어야 하므로)2년씩 지연된 셈입니다.

이것은 기능에 중점을 두고 릴리즈를 했던 사례 중 하나인데, 기능이 완료되어야 릴리즈 할 수 있고 따라서 기능이 완료되지 않는 경우 출시 기간은 지연되게 됩니다.

C++ 표준 제정이 지연되면서 표준을 만드는 사람들과 위원회 내부에서도 제정 시기에 의구심을 가졌고, 컴파일러를 만드는 회사의 입장에서도 다 만들어둔 기능이 표준 규격에 의해 변경되면 적극적으로 구현할 이유가 없었기 때문에 C++컴파일러 구현도 늦어졌습니다.

이런 점으로 볼 때 C++98과 C++11은 ‘기능’에 중점을 두고 릴리즈를 했으나 이후부터는 ‘기간’에 중점을 두고 릴리즈를 합니다.

C++98, C++11 표준화를 진행하며 얻은 당해본😢경험으로 ‘언제(기간)’ 출시할 것인지에 더 중점을 두었고, C++표준 위원회는 3년마다 표준을 출시하기로 결정합니다.

이것을 ‘기차 모델’이라고 부르는데, 3년간 새로운 기능을 개발하고 발표하며 3년간의 개발 동안 추가되거나 개선되지 못한 기능은 3년 뒤에 다시 발표하는 방식입니다. 예를 들어 C++20에서 스펙이 완성되지 못한 경우라 할지라도 C++20 출시 시기를 미루지 않으며 계획했던 기간에 완성하지 못한 내용은 C++23에서 완성하는 것으로 변경합니다.

이러한 이유로 Modern C++는 3년을 주기로 개선되고 있습니다.

  • 현재 C++ 표준은 3년 단위로 제정되고 있습니다. 제정 기간과 관련된 자세한 글은 여기를 참고하세요.

이러한 Modern C++은 2011년도에 표준화된 C++11부터를 나타내며, 마이너 업데이트인 C++14를 포함합니다.

Modern C++은 이후부터는 3년마다 새로운 표준을 내놓는 ‘기차 모델’을 따릅니다.

TS(Technical Specification)가 충분한 논의를 거쳐 합의되면 다음 버전에 포함 되고, 이것을 트렁크에 포함되었다고 합니다.

< 이미지 출처 : https://isocpp.org/std/status >

변화되는 부분

Modern C++는 대략적으로 다음의 특징을 갖습니다.

(개선되는 과정에서 일부의 함수는 더 이상 사용하지 못하도록 제외되기도 합니다.)

각 버전별 기능 정리는 여기를 참고하세요.

C++ Informal name 핵심 언어 기능 및 사용 가능 라이브러리 위키 참고
1998 ISO/IEC 14882:1998 C++98    
2003 ISO/IEC 14882:2003 C++03    
2011 ISO/IEC 14882:2011 C++11 https://en.cppreference.com/w/cpp/11 https://ko.wikipedia.org/wiki/C%2B%2B11
2014 ISO/IEC 14882:2014 C++14 https://en.cppreference.com/w/cpp/14 https://ko.wikipedia.org/wiki/C%2B%2B14
2017 ISO/IEC 14882:2017 C++17 https://en.cppreference.com/w/cpp/17 https://ko.wikipedia.org/wiki/C%2B%2B17
2020   C++20 https://en.cppreference.com/w/cpp/20 https://ko.wikipedia.org/wiki/C%2B%2B20

참고 자료

카테고리:

업데이트: