본문 바로가기

반응형

c++20

(19)
[C++20] 날짜와 시간(Date and Time utilities) 들어가며 C++은 가장 유명한 프로그래밍 언어중 하나지만 명성에 걸맞지 않게 유틸리티에 대한 지원이 인색하다. 특히 다른 언어에서 지원하는 문자열과 캘린더 관련 기능들은 항상 C++말고 다른 언어를 이용해 개발하고 싶은 마음이 들게 한다. 하지만 C++11 부터 점점 개선되기 시작하더니 C++20에는 보다 꽤 쓸만한 기능들이 여럿 추가 되었다. 본 포스트에서는 C++20에 추가된 날짜와 시간에 관련된 유틸리티 기능의 집합인 chrono 라이브러리를 살펴 보도록 하겠다. 자주 쓰이는 용어 본격적으로 chrono 라이브러리를 살펴보기에 앞서 자주 사용되지만 우리에게 익숙하지 않은 용어 몇가지를 먼저 살펴 보도록하겠다. 이미 알고 있을 수도 있겠지만 개념 정리한다고 생각하고 가볍게 읽어 보자. 에포크 타임(e..
[C++20] 모듈(module) 컴파일 성능 비교 들어가며 C++의 프로젝트의 규모가 점점 커짐에 따라 프로젝트 빌드 속도도 그에 비례해 늘어나게 된다. 심한 경우는 오타하나 수정했는데 빌드하느라 몇 십분이 소모되기도 한다. 아무것도 하지 못하고 빌드 프로그래스바만 바라보고 있어야 한다는 것은 엄청난 인력과 시간의 낭비가 아닐 수 없다. 여기에 나와 같은 고민을 하든 분들을 위한 반가운 소식이 있다. C++20 스펙에 추가된 모듈(module)을 사용하면 단순 헤더 파일을 사용하는 것 보다 훨씬 빠른 컴파일 속도를 얻을 수 있다고 한다. 모듈이 궁금하신 분들은 '[C++20] 모듈(module)' 포스트에서 보다 자세한 내용을 확인 할 수 있다. 이번 포스트에서는 이 모듈이 어떻게 헤더파일을 사용하는 것 보다 빠른 컴파일 속도를 제공하는지에 대해 간단하..
[gcc] Ubuntu 20.04에서 최신 버전 gcc설치하기 들어가며 본 포스트는 포스트가 작성되는 시점의 최신 버전인 gcc 11을 대상으로 작성되었다. 추후 상위 버전의 gcc가 릴리즈 된다고 하더라도 버전 숫자만 바꾼다면 적용하는데 별다른 어려움이 없을것이다. 1초 완료 가이드 Ubuntu 20.04에는 기본적으로 gcc 9.3.0 버전이 설치 되어 있어 module과 같이 최근에 추가된 C++20 스펙을 사용하지 못한다. gcc를 이용해 C++20의 기능을 제대로 사용하기 위해 gcc-11 이상 버전으로 업그레이드가 필요하다. gcc의 C++20 지원 스펙을 확인하려면 [여기]를 확인하자. $ gcc --version gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 이런 저런 설명 필요 없고 나는 그냥 Ubuntu에서 gcc-11 ..
[C++20] 당신이 모듈(module)을 써야만 하는 이유 들어가며 C++의 모듈(module)은 concepts, ranges, coroutine과 더불어 'Big Four'이라고 불려지며 C++20 스펙에 추가된 네 가지 주요 요소 중에 하나다. 모듈은 기존 헤더 파일을 대체할 수 있을 뿐만 아니라, 컴파일 시간 개선, 매크로 격리(macro isolation, 용어가 생소하지만 뒤에 설명이 나온다)등을 제공한다. 간단하게 정리하면 #include 전처리 방식을 대신할 수 있는 새로 도입된 개념으로써 java의 package나 C#의 namespace와 동일한 역할을 한다. 모듈의 도입으로 C++에 어떠한 변화가 생겼는지 알아 보기 위해 우리는 기존 C++은 어떤 모습이었는지 먼저 살펴 볼 필요가 있다. 기존 C++의 구조를 보기 위해 그 유명한 "Hello..
[C++20] 모듈(module) 모듈(module) 이란? C++20 이전의 C++에서는 필요한 함수 또는 클래스를 불러오기 위해 #include 전처리문을 이용해 왔다. 이런 헤더 파일 방식의 문제는..많지만 그 중에 필자가 가장 크리티컬하게 생각하는 부분은 #include 전처리문을 가리키고 있던 파일의 내용 그대로 치환해버려 헤더에 있는 필요하든 필요하지 않든 상관 없이 정의 되어있는 모든 기능을 포함하게 된다는 것이다. 예를 들어 cmath 헤더 파일에서 정작 내가 필요한 기능은 acos함수 하나 뿐이지만, acos를 사용하기 위해서 나는 헤더에 정의된 모든 함수들을 인클루드하고 컴파일 해야만 한다. 이미 현재 다른 언어들에서는 필요한 기능만을 가져 올 수 있는 기능을 제공하고 있지만 C++은 이번 C++20 스펙의 module..
[Visual Studio] 2019 v16.10 릴리즈 비주얼 스튜디오 2019 v16.10과 v16.11 프리뷰 1 버전이 2021년 5월 25일 릴리즈 되었다고 발표했습니다. 이번 포스트에서는 2019 v16.10 GA(Generally Available) 버전에 어떤 기능들이 추가되었는지 소개하는 시간을 가져 보도록 하겠습니다. 비주얼 스튜디오 2019 다운로드 [여기] 비주얼 스튜디오 개발자 커뮤니티 [여기] 비주얼 스튜디오 최신 릴리스 버전으로 업데이트 방법 [여기] 비주얼 스튜디오 2019 버전 16.10 릴리스 정보 [여기] C++ 이제 C++20의 모든 기능들을 비주얼 스튜디오에서 사용 할 수 있습니다. /std:c++latest 스위치를 활성화 시키면 되며, 활성화 방법은 [여기]를 참조하세요. 아직 몇몇 기능들은 수정 될 가능성이 있어 /s..
[C++20] 어트리뷰트(Attribute) attribute는 C++11 부터 지원되는 기능으로써 자료형, 객체, 코드등에 대하여 속성(attribute)을 설명하는 단일화된 표준 문법을 제공한다. 예를 들어 GNU와 IBM에서는 __attribute__(...))가 있었고, MS 비주얼 스튜디오에는 __declspec()이 제공하던 기능들이 C++11 부터 언어 자체에 포함 된 것이다. attribute는 컴파일러에 추가 정보를 전달하는 것으로써 자료형, 객체, 코드등에 대하여 속성을 지정하여 구현된 내용이 속성과 부합하지 않는다면 경고 또는 에러를 출력한다. 컴파일 타임에 코드의 내용을 분석해서 attribute와 맞지 않는다면 컴파일 에러 또는 경고를 발생 시키므로 주석보다는 가능하다면 attribute를 사용하도록 하자. atturbute..
[C++20] Feature Test Macro Feature Test Macro는 C++에서 제공하는 기능을 현재 사용 중인 컴파일러가 지원하는지 그렇지 않은지 여부를 테스트하기 위한 전처리 명령어(매크로)다. Attributes __has_cpp_attribute( attribute-token ) 현재 사용하는 컴파일러가 attribute-token에 지정된 attribute를 지원하는지 체크 #if, #else, #ifdef, #ifndef를 이용해 컴파일 타임에 지원 여부 체크 가능 int main() { #if __has_cpp_attribute(carries_dependency) std::cout
[C++20] 코루틴(Coroutine) - co_return 코루틴을 종료하기 위해선 co_return을 호출한다. Task foo() { co_return; } co_return은 값을 리턴 할 수도 있고, 아무런 값도 리턴하지 않고 단순히 코루틴을 종료하기만 할수도 있다. 값을 리턴하느냐 그렇지 않느냐에 따라 코루틴 함수의 리턴 타입이 가져야 하는 요구사항이 달라진다. 코루틴의 리턴 타입에 어떠한 것들이 필요한지 아래 예제를 통해 알아 보도록 한다. 컴파일러는 co_return 키워드를 만나면 아래와 비슷한 코드를 생성한다. Task foo() { promise.return_void(); co_await promise.final_suspend(); } 컴파일러는 co_return 대신에 promise와 co_await를 생성한다. foo() 함수는 아무것도 리..
[C++20] Concepts 이번 포스트에서는 C++20에 추가된 아주 강력한 기능 중 하나인 concept이라는 것에 대해 알아 보도록 한다. 들어가며 이번 포스트에서는 C++20에 추가된 Concepts에 대해 살펴 보도록 하겠다. 이 글을 읽는 여러분은 아래 세 가지를 배우게 될 것이다. Concepts를 만드는 방법 C++에서 제공하는 표준 Concept 'Requires 절' 문법 Concept란? 먼저 많은 분께 생소한 개념인 Concept에 대해 알아 보자. C++20 공식 문서에 따르면 C++의 Concept 이란, "타입이 가져야 하는 요구 조건을 정의하는 문법"이라고 소개하고 있다. 영어로는 "Named sets of requirements", 즉 "이름을 가진 요구조건의 집합"이다. "타입이 가져야 하는 요구 조..

반응형