CLion

CLion 2019.3: 성능개선을 비롯하여 오랫동안 기다려온 여러 개선사항을 중심으로 품질 향상에 집중한 릴리스!

올해 마지막 주요 업데이트인 CLion 2019.3이 출시되었습니다!

IDE 성능을 향상하고 주요 버그를 수정하는 일은 언제나 JetBrains 팀의 최우선 과제입니다. 이번 업데이트에서는 사용자를 위해 특정 영역의 성능을 개선하고, UI 멈춤 현상을 없애고 (완전히는 아니지만 많은 부분이 해소됨), 에디터 및 통합 기능을 향상하는 데 특히 중점을 두었습니다.

CLion 2019.3 릴리스

이 버전으로 업데이트하려면 Toolbox App, 스냅 패키지(Ubuntu), JetBrains 웹사이트 또는 2019.2의 최신 빌드의 패치 업데이트를 사용하면 됩니다.

CLion 2019.3 다운로드

주요 내용을 간략히 살펴보려면 아래 목록을 살펴보세요. 특정 세부 정보에 관심이 있으시면 다음을 읽어주세요.

또한 새로운 기능을 소개하는 Phil Nash의 짧은 동영상에서도 이번 릴리스에 관한 자세한 개요를 확인할 수 있습니다.

IDE 성능

이번 릴리스에서는 특히 IntelliJ 플랫폼과 CLion의 IDE 성능 개선에 집중하여 많은 작업을 진행했습니다.

IntelliJ 플랫폼에서는 IDE 시작 시간을 단축하기 위해 여러 가지 중요한 아키텍처 변경 내용을 적용했습니다. 이러한 변경에는 다음을 비롯해 다양한 항목이 있습니다.

  • 하나씩 순서대로 실행되던 프로세스 일부를 병행 처리
  • 초기 클래스 로드 속도를 높이는 방식으로 클래스 재구성
  • macOS에서 글꼴 로드 최적화

CLion에서는 UI 멈춤 현상을 없애기 위해 심혈을 기울였습니다. 여전히 약간의 멈춤 현상이 남아 있지만(주로 복잡한 C++ 프로젝트 중 일부에서 발생) 그 외에는 많이 사라졌습니다. 이 작업은 다음 릴리스에서도 계속 진행 될 예정입니다. 이 외에도 일부 기본 알고리즘을 수정하여 심볼 빌드/업데이트 단계를 최적화했습니다. 내부 계산에 따르면 특정 프로젝트, CPU, 환경에 따라 10~50% 정도의 성능 향상을 기대할 수 있습니다.

또한 JetBrains 팀은 현재 IDE에서 제공하는 핵심 기능 중 일부를 재작업하여 성능을 개선했습니다. 우선 Rename(이름 변경) 리팩토링이 이제 코드 외 사용 위치(예: 주석 및 문자열 리터럴 내 사용 위치)의 이름을 바꾸고 싶은지 먼저 물은 후, 모든 사용 위치를 검색합니다. 이 기능이 작동하려면 Rename에 대한 코드 내 위치 모드가 해제되어 있어야 합니다(Settings(설정)/Preferences(기본 설정) | Editor(에디터) | General(일반) | Refactorings(리팩토링) | Enable in-place mode(코드 내 위치 모드 사용)).

모든 IDE 또는 스마트 텍스트 에디터에서 가장 널리 사용되는 기능은 무엇일까요? 그것은 바로 코드 완성 기능입니다! 그래서 CLion에서 코드 완성 속도를 높이기 위해 추가적인 코드 완성 제공자를 구현했습니다. 이 제공자는 Clangd를 기반으로 하며 LLVM, Boost, Qt, Eigen 등의 무거운 작업 대부분에서 다른 제공자보다 빠른 속도를 선사합니다.
Code completion on Eigen
측정 결과에 관한 자세한 내용을 확인해 보세요.

디버거 업데이트

CLion에는 GDB 및 LLDB 디버거가 통합되어 있습니다. 이번 릴리스에서는 이 통합 도구를 더 사용자 친화적으로 개선하고 품질을 높였습니다.

LLDB의 경우, 포함된 버전을 9.0으로 업데이트하고 번들에 포함된 pretty printers에서 대대적인 정리 작업을 수행했습니다. 그 결과, 이제 표준 컨테이너가 더 정확하게 시각화됩니다. macOS에서는 libstdcxx보다 libc++에 대한 지원이 훨씬 뛰어납니다. 만약 macOS에서 libstdcxx를 사용 중이신 경우 알려주시고 사용하고 있는 툴체인도 명시해 주세요. 개선 방안을 고민해 보겠습니다. Ubuntu에서 유일한 차이점은 정렬되지 않은 연관 컨테이너입니다. 자세한 비교는 여기에서 확인하세요.

또 CLion은 이제 GDB 및 LLDB 모두에 대해 프로젝트 루트에서 .gdbinit/.lldbinit를 읽을 수 있도록 지원합니다 (이전에는 사용자의 홈 디렉터리에서만 이러한 파일을 읽을 수 있었음). 그 덕에 컴퓨터에 있는 전체 프로젝트에 영향을 미치는 일 없이 디버거의 동작을 조정할 수 있습니다. 단, 이 동작을 활성화하려면 홈 디렉터리에서 .gdbinit/.lldbinit를 명시적으로 허용해야 합니다:

  • GDB:
    • 전체 적용 시:
      set auto-load local-gdbinit on
      add-auto-load-safe-path /
    • 프로젝트별:
      set auto-load local-gdbinit on
      add-auto-load-safe-path C:\work\myproject\.gdbinit
  • LLDB: settings set target.load-cwd-lldbinit true

일반적인 사용 사례에서는 다음과 같이 프로젝트의 일부 데이터 유형에 사용자 지정 pretty printer를 제공합니다.
lldbinit

마지막으로, ssh를 통한 원격 디버그를 지원하는 새로운 Remote GDB Server(원격 GDB 서버) 구성이 추가되었습니다. 이전에 추가된 GDB Remote Debug(GDB 원격 디버그) 구성의 주요 이점은 CLion이 실행 파일을 원격 호스트에 업로드하고 gdbserver에서 자동으로 프로그램을 실행한다는 것입니다. 자세한 내용은 JetBrains의 온라인 도움말을 참조하세요. 이로써 로컬로 실행되는 CLion에서 원격으로 연결하는 방법은 이제 Full Remote(완전 원격) 모드(원격 빌드 및 실행 시)와 원격 디버그 옵션 2개(원격 호스트에서 디버그만 수행되는 경우)로 총 세 가지가 되었습니다.

CMake의 활용도 증대

CMake는 CLion에서 기본 프로젝트 모델로 알려져 있습니다. 수많은 CLion 사용자가 이 기능을 많이 사용하고 있으며 일부 사용자는 프로젝트를 CMake로 변환하여 CLion에서 작업하기도 합니다. 이러한 성원에 대한 감사의 표시로, 이번 릴리스에서는 CLion 내 CMake 통합 도구의 가장 큰 두 가지 단점을 해결했습니다.

해결한 문제 한 가지는 물론 Ninja 생성기에 관한 것입니다. 또한 이제 CMake에서 사용 가능한 모든 생성기를 이용할 수 있습니다. 다음과 같이 CMake Profiles(프로파일) 설정에서 CMake options에 해당 생성기를 전달하기만 하면 됩니다.
Ninja generator
구현은 CMake File API를 기반으로 하며 CMake 3.15 이상에서 사용할 수 있습니다.
이 기능이 출시된 후 바로 사용해 보신 많은 EAP 사용자분들께 감사의 말씀을 전합니다. 많은 분들이 제공해 주신 피드백 덕에 공식 출시 전에 여러 문제를 해결할 수 있었습니다.

JetBrains가 해결하려 했던 또 다른 문제는 일부 CMake 설정을 CLion에서 새로 생성된 프로젝트에 전체적으로 적용되도록 구성할 수 없었던 점이었습니다. 그 예로는 생성 경로 또는 일부 환경 설정을 위한 템플릿이 있습니다. 하지만 이제 CMake Defaults로 이 작업을 수행할 수 있습니다! File(파일) | Other Settings(기타 설정) | Preferences/Settings for New Projects…(새 프로젝트 설정/기본 설정)을 사용해 보세요.

마지막으로 또 한 가지 불편했던 문제를 이번 릴리스에서 해결했습니다. 일부 CMake 구성이 유효하지 않고 다시 로드하는 데 실패하는 경우에도 CLion은 실패하지 않고 가능한 모든 유효한 구성을 성공적으로 다시 로드합니다. 일반적으로 이 기능은 현재 원격 구성이 연결되어 있지 않고 다시 로드하려는 여러 로컬 구성이 있는 경우에 사용됩니다. 이전에는 전체를 다시 로드하는 프로세스가 그냥 실패했지만 이제 성공적으로 로컬 구성이 다시 로드됩니다.

헤더/소스 파일 간 전환

헤더와 소스 파일 간 전환하기 위해 CLion은 이제 Go to Header/Source(헤더/소스로 이동)라는 더 효과적이고 정확한 경험적 지식 기반 액션을 제공합니다. IntelliJ 플랫폼의 더 광범위한 이동 기능인 Go to Related Symbol(관련 심볼로 이동) 액션 대신 사용해 보세요.

새 액션에서는 단일 대상 파일을 찾으려고 시도한 후, 500ms 내에 실패하면 새 항목이 추가된 대화형 팝업을 표시합니다(백그라운드에서 작업이 계산되므로 UI가 정지하지 않음). 사용자는 거기에서 탐색할 위치를 선택할 수 있습니다.

Go to Header/Source 검색은 몇가지 경험적 지식을 기반으로 합니다. 예를 들어 가장 최근에 전환된 파일은 항상 목록의 맨 위에 있으며 동일한 디렉터리에 있는 파일 중 이름이 일치하는 파일이 다음에 옵니다.
Go to Header/Source
한 가지 명심해야 할 제한 사항이 있습니다. 현재 이 검색은 직접적인 포함자/피포함자로만 대상이 제한됩니다. 이는 다른 대상에 있는 동일한 심볼의 간섭을 피하는 데 도움이 됩니다.

코드 커버리지

이번 릴리스에서는 주로 버그, 기술적 문제, 성능 문제를 해결하는 데 중점을 두었지만 몇가지 기능도 추가했습니다. 그 중 코드 커버리지는 이슈 트래커에서 가장 많이 투표된 요청 중 하나로서, llvm-cov/gcov도구를 통합하여 이를 구현했습니다.

사용자는 커버리지를 사용하여 유닛 테스트 및 일반 구성을 실행할 수 있습니다. 특정 커버리지 컴파일 옵션을 전달하는 것만 잊지 마세요. CLion은 사용자의 CMake 파일 및 컴파일 옵션을 직접 수정하지 않으므로 이 설정은 수동으로 지정해야 합니다.

측정 결과는 별도의 Coverage(커버리지) 도구 창이나 에디터에서 바로 확인할 수 있습니다. 커버리지는 왼쪽 gutter에 색상으로 표시됩니다.
Code Coverage
자세한 내용은 온라인 도움말을 참조하세요.

C++20의 Concepts

JetBrains는 최근 두 번의 릴리스 주기 동안 Clangd 기반 언어 엔진을 실험했습니다. 아이디어는 Concepts를 지원하는 Saar Raz의 clang 브랜치인 실험적 브랜치를 통합하여 그것을 기반으로 몇가지 고유한 기능을 구축하는 것이었습니다. 이 아이디어는 2019년 5월 텔아비브에서 개최된 Core C++ 컨퍼런스에서 Saar를 만났을 때 처음 논의되었으며 이제 CLion 2019.3에서 이 협업의 결과를 제공하려 합니다.

CLion의 Clangd 기반 엔진은 C++ 20의 Concepts를 올바르게 구문 분석하고 강조 표시하도록 지원합니다. 또한 Clang의 몇가지 코드 검사와 CLion 팀이 구현한 Unused concept(사용되지 않는 컨셉) 검사도 추가되었습니다.

가장 인상적인 작업은 코드 완성 기능에서 구현되었습니다. CLion은 이제 std::is_base_of<MyBase, T>, std::is_same<Other, T>, same_as<T, U>에 제약되는 타입뿐만 아니라 동일하게 제약되는 템플릿 타입 매개변수를 완성할 수 있습니다.
Concepts completion
이 외에도 Rename(이름 변경) 리팩토링, Go to Definition(정의로 이동), Find Usages(사용 위치 검색) 탐색 액션도 지원됩니다. JetBrains의 관련 블로그 게시물을 확인하시면 더 많은 샘플을 찾고 컴파일러에서 C++ 20의 Concepts 지원을 활성화하는 방법을 알아볼 수 있습니다.

Clang 과 관련한 많은 작업을 비롯하여 JetBrains 팀과 생산적으로 협업해주신 Saar Raz 씨에게 감사드립니다.

기타 수정 및 개선 사항

철자 검사기(Spell Checker)는 주석, 문자열 리터럴, 코드 내 문서를 정확하고 읽기 쉽게 유지하는 데 도움이 되는 IDE의 필수 부분입니다. CLion 2019.3에서는 CMake 파일 및 Doxygen 주석의 철자를 검사할 수 있습니다.
Spell Checking
WSL 외에 이제 WSL2도 지원합니다. IDE의 구성 프로세스는 동일하게 유지되었습니다. 단, 이 두 하위 시스템 간에는 사용자 환경에 약간의 차이가 있으니 유념해 주세요.

아직 초기화되지 않았거나 이미 소멸된 리소스에 가상 함수가 액세스할 수 있는 상황을 포착하기 위해 virtual functions called from constructors or destructors(생성자 및 소멸자에서 호출된 가상 함수)라는 새로운 검사가 추가되었습니다.
소멸자에서의 가상 함수 호출

Microsoft 서식 지정 및 이름 지정 규칙이 사전 정의된 코드 스타일 옵션으로서 추가되어 Google, LLVM, Qt, GNU, Stroustrup 및 기타 스타일과 함께 목록이 한층 다양해졌습니다.

또한 CLion은 IntelliJ 플랫폼을 기반으로 하기 때문에 VCS 개선 사항이 추가되고 수십 가지 UI 문제도 해결되었습니다. CLion을 Rust IDE로 사용하는 분들을 위해 IntelliJ Rust 플러그인이 대규모로 업데이트되었다는 사실을 알려 드리게 되어 기쁩니다. 이에 관해서는 별도의 블로그 게시물을 제공할 예정이므로 계속적인 관심 부탁드립니다.

여러분이 이 글을 읽으신 후 새로운 릴리스를 사용해보고 싶은 즐거운 마음이 들었으면 좋겠습니다. 이번 릴리스에 대한 의견이 있으시면 언제든지 보내 주세요!

CLion 2019.3 다운로드

CLion 팀
JetBrains
The Drive to Develop

본문은 Anastasia KazakovaCLion 2019.3: A Quality-Targeted Release Focused on Performance and Some Long-Awaited Enhancements를 번역한 글입니다.

Discover more