CLion 2022.3 EAP: Wsparcie modułów C++20


Moduły C++20

Moduły to nowa funkcja w C++20. Zostały wprowadzone w celu zmniejszenia wielu problemów związanych z używaniem plików nagłówkowych poprzez odizolowanie deklaracji i ograniczenie ich widoczności do modułu. Możliwe też że wykorzystywanie modułów pomoże skrócić czas kompilacji.

Większość modeli projektów w C++ nie działa z modułami. CMake rozpoczął pracę w tym kierunku i oferuje wstępne wsparcie. Na przykład teraz działa z modułami, gdy używany jest generator programu Visual Studio.

Jak działają moduły w CLion

Niezależnie od podejścia użytego w trakcie kompilacji modułów w projekcie, CLion 2022.3 EAP teraz:

  1. Zbiera informacje ze wszystkich plików .ixx, .cppm i .mxx.
  2. Analizuje instrukcje eksportu modułu {nazwa} i tworzy mapowania między {nazwa} a nazwami plików modułów.
  3. Przekazuje te mapowania do aparatu języka opartego na Clangd i używa ich do zapewnienia pomocy w kodzie i podświetlania kodu.

Informacje zebrane z modułów są zachowywane między kolejnymi uruchomieniami CLion. Jeśli kod lub nazwa modułu zostanie zaktualizowana, CLion automatycznie przeanalizuje zmiany.

Asysta dla modułów w CLion 2022.3 EAP obejmuje:

  • Podświetlanie składni dla nowych słów kluczowych modułu (import, eksport i moduł),
  • Uzupełnianie symboli z modułów,
  • Nawigacja do deklaracji/definicji symboli z modułów,
  • Znajdź Zastosowania i refaktoryzacje działa jak zwykle wewnątrz modułów. Można także wypróbować wczesną wersję refaktoryzacji Zmień nazwę, Zmień podpis i Wyodrębnij, które działają poza granicami modułów. Na razie działają tylko dla plików otwieranych w CLion.

Błędy/ograniczenia dotyczące modułów:

  • CLion nie obsługuje modułów ze standardowej biblioteki MSVC.
  • Import nagłówków nie jest jeszcze obsługiwany.
  • Obecnie nie ma akcji dodawania nowego modułu z widoku projektu.
  • Uzupełnianie kodu nie jest dostępne dla słów kluczowych i nazw modułów w instrukcjach importu.
  • Obecnie nie jest możliwe przejście do modułu z nazwy modułu w instrukcji importu.
  • CLion nie uważa plików .cpp za moduły, więc na razie lepiej używać innych rozszerzeń (na przykład .cppm).

Import wyników profilowania

Wcześniej można było eksportować wyniki profilowania w CLion na macOS. Teraz funkcjonalność zostaje rozszerzona na wszystkie platformy, a także umożliwiany jest import wyników profilowania z powrotem do CLion. Jest to przydatne podczas profilowania na zdalnym lub osadzonym celu i importowania wyników lokalnie w CLion. Import już przechwyconych wyników dostępny jest przez Uruchom | Otwórz Profiler Snapshot, i wybierając nowy plik lub jeden z ostatnio otwieranych.

Wyniki są eksportowane do pliku .collapsed. Ten plik zawiera ślady połączeń w formacie używanym przez skrypt FlameGraph. Format jest ustandaryzowany i przedstawia kolekcję stosów wywołań, gdzie każdy wiersz jest listą ramek oddzielonych średnikami, po których następuje licznik.

Nawigacja Przejdź do źródła działa poprawnie w przypadku profilowania danych i działa nadal po imporcie/eksporcie.

Nowy sposób pracy z projektami w WSL2

CLion 2022.3 oferuje alternatywny sposób pracy z projektami uruchomionymi w systemach plików WSL2. Zamiast uruchamiać pełne IDE w systemie Windows, backend w IDE uruchomi się bezpośrednio w samym WSL2. Następnie można się z nim połączyć w ten sam sposób, w jaki można połączyć się z dowolną zdalną maszyną podczas korzystania ze zdalnego programowania w CLion. Może to zapewnić lepszą wydajność IDE podczas pracy z projektami w WSL2.

Inne zmiany:

  • W ustawieniach profile CLion CMake utworzone z ustawień predefiniowanych CMake są teraz wyświetlane w tej samej kolejności, co w pliku CMakePresets.json.
  • Kontynuowane jest ulepszanie wyróżniania argumentów poleceń CMake w tej kompilacji EAP.
  • Wprowadzono kilka ulepszeń do wskazówek dotyczących parametrów.
  • Atrybuty CUDA nie są już podświetlane na czerwono, gdy używane są zdalne łańcuchy narzędzi.
  • Widok wątku RTOS działa teraz również dla symetrycznego wieloprocesowego przetwarzania (SMP). Działa to tylko wtedy, gdy rdzenie procesora są identyczne.