C++ i slutet av 2020

C++ i slutet av 2020

Även om 2020 var ett galet och hårt år hade vi tur - C++20 accepterades och publicerades, och arbetet med nya funktioner fortsätter.

Som vanligt varje år, här är min översikt över året:standardiseringsprocessen, funktioner, implementering, kompilatorer, verktyg, böcker och mer.

Övriga rapporter:

20202019,2018,2017,2016,2015,2014,2013,2012.

Ansvarsfriskrivning: åsikten som presenteras här är min och representerar inte ISO C++-kommitténs åsikt.

En kort introduktion

Här är de viktigaste sakerna för det här året som fick min uppmärksamhet:

  • C++20 avslutat och publicerat!
  • C++20 nästan implementerat i populära kompilatorer!
  • Allt rör sig online!

Läs vidare för att få hela bilden.

Tidslinje

Tabellen nedan hjälper dig att se de viktigaste händelserna:

Datum Event
10 februari - 15 februari Prag ISO-möte
12 mars GCC 9.3
16 mars Visuell studio 2019 16.5
24 mars Clang 10.0
7 maj GCC 10.1
19 maj Visual Studio 2019 16.6
26 maj C++ Builder, Sydney 10.4
23 juli GCC 10.2
5 augusti Visuell studio 2019 16.7
4 september C++20 Draft International Standard Godkänd och redo för publicering
13 september - 18 september CppCon 2020 (huvudevenemang)
12 oktober Clang 11.0
22 oktober Intel Compiler Classic 19.1
10 november Visual Studio 2019 16.8
12 november - 14 november Möte C++ 2020-konferens
1 december Beman Dawes, en av de mest inflytelserika personerna i C++s historia, gick bort, se memorandum @Iso
15 december C++20 Publicerad som ISO/IEC 14882:2020

Kompilatorstöd för C++14

Bara för fullständighetens skull och påminnelsen:

Clang (sedan 3.4), GCC (sedan 5.0) och Intel (version 15.0) har redan fullt stöd för C++14. Visual Studio tillkännagav full överensstämmelse med C++17 (så även med C++14) med VS 2017 15.7.

Kompilatorstöd för C++17

År 2020 kan vi säga att C++17 är tillräckligt stabilt hos stora kompilatorleverantörer. Jag ser en gradvis men synlig övergång till att använda C++17-överensstämmelseflagga i många projekt.

Dessutom med GCC 11 kommer du att använda C++17 som standard C++-dialekt! Se den här informationen:GCC 11 är nu förinställd på C++17-dialekt som standard - Phoronix.

Ändå kan vi ta en titt på en superhändig tabell @cppreference med C++17-stöd, och det finns några "hål" i standardbibliotekets implementeringar:

  • Parallella algoritmer är inte klara i Clang libc++. På GCC (sedan 9) måste du länka mot Intel TBB.
  • Hårdvaruinterferensstorlek är endast tillgänglig i MSVC.
  • PMR är inte redo i Clang libc++.
  • Särskilda matematiska funktioner är inte klara i Clang libc++.
  • Och strängkonverteringar är helt implementerade endast i MSVC, medan Clang och GCC ger partiellt stöd (endast integraltyper). Det verkar som att flyttalskonverteringar är de svåraste att implementera! Se denna utmärkta presentation om detaljerna:Stephan T. Lavavej “Floating-Point <charconv>:Making Your Code 10x Faster With C++17’s Final Boss” .

Resten är klart och du kan läsa om dem alla i mina blogginlägg:

  • C++ 17-funktioner
  • 17 mindre men praktiska C++17-funktioner

Ok, vad sägs om C++20? Vad är status här?

C++20 är klart!

C++ hade tur eftersom det sista ISO "live" mötet ägde rum precis innan COVID-situationen förvärrades och orsakade låsningar i många länder. I februari samlades ISO Comeete och avslutade sitt arbete med C++20! Senare kunde allt hända online - slutomröstning och publiceringsprocessen.

Allt som allt, i september, godkändes C++20

Och i december publiceras nu C++20 på ISO:C++20 Publicerad (ISO/IEC 14882:2020).

Den här utgåvan är mycket viktig eftersom den uppfyller designen och utvecklingen av C++ som specificerats av Bjarne Stroustrup från 1994! Vi har moduler, koroutiner, koncept och mer!

Du kan läsa mer direkt från Brajne:Bjarne Stroustrup om C++20’s betydelse :Standard C++

Och se denna reddit-tråd:C++20 Publicerad (ISO/IEC 14882:2020):cpp med en stor diskussion!

Låt oss ta en titt på några viktiga funktioner. Det verkar som att stora kompilatorleverantörer är supersnabba och det är väldigt nära att ha full implementering av C++20!

Funktion GCC Klang Visual Studio
P0515R3 Trevägsjämförelseoperator <=> 10.0 10.0 VS 2019 16.0
P0734R0-koncept 10.0 10.0 VS 2019 16.3
P0898R3 Concepts Library 10.0 inte än VS 2019 16.3
P0912R5 Coroutines 10.0 8 partiella VS 2019 16.5
P1103R3-moduler 11.0 8 partiella VS 2019 16.8
P0896R4-intervall 10.0 nej VS 2019 16.8 partiell
P0355R7 <chrono> Kalendrar och tidszoner nej 7 partiella nej
P0645R10 <format> Textformatering nej nej nej

Du kan spåra statusen @cppreference.

För mer information och coola, informativa artiklar kan du ta en titt på en lång serie från Rainer Grimm om de senaste funktionerna:

  • std::format i C++20 - ModernesCpp.com
  • C++20:The Three-Way Comparison Operator - ModernesCpp.com
  • C++20:Fördelarna med moduler - ModernesCpp.com
  • C++20:Coroutines - A First Overview - ModernesCpp.com
  • och till och med hans nya bok om C++20:C++20 av Rainer Grimm @Leanpub

Och håll utkik efter några nya artiklar på @CppStories snart :)

C++23 Startad

Efter att arbetet med C++20 har slutförts började kommittén arbeta (mest online) med nästa standard. Och några av de nya funktionerna har redan börjat dyka upp!

Den första språkfunktionen som accepteras är:

  • Ordagrant suffix för (signerad) size_t - P0330R8.

Och det finns flera biblioteksfunktioner:

  • Stacktrace-bibliotek - P0881R7
  • <stdatomic.h> - P0943R6
  • std::is_scoped_enum - P1048R1
  • contains() för basic_string /basic_string_view - P1679R3

Och här är den övergripande planen för den nya standarden - För att djärvt föreslå en övergripande plan för C++23 - P0592

  • Bibliotekets stöd för koroutiner
  • Ett modulärt standardbibliotek
  • Exekutorer
  • Nätverk

Och kanske:

  • Reflektion
  • Mönstermatchning
  • Kontrakt

Förlåt för ett avbrott i flödet :)
Jag har förberett en liten bonus om du är intresserad av Modern C++, kolla in den här:

Ladda ner en gratis kopia av C++20/C++17 Ref Cards!

ISO C++-möten

Februari:Prag, Tjeckien, Europa

Det var det enda mötet 2020, och lyckligtvis lyckades kommittén slutföra arbetet med C++20.

Några anteckningar:

  • 2020-03 post-Prag post tillgänglig
  • Fem fantastiska C++-dokument för ISO-mötet i Prag och C++20-status
  • Resrapport:Winter ISO C++ standards meeting (Prag) – Sutter's Mill

Onlinemöten

Reserapport:Höstens ISO C++-standarder uppfyller (virtuellt) – Sutter’s Mill

Se översikten över tillgängliga månatliga utskick:

  • 2020-09 utskick tillgänglig
  • 2020-08 utskick tillgänglig
  • 2020-07 utskick tillgänglig
  • 2020-06 utskick tillgänglig
  • 2020-05 utskick tillgänglig
  • 2020-04 utskick tillgänglig

Compiler Notes

Kompilatorleverantörer är väldigt upptagna, och vi är glada över att ha många stora och mindre releaser under året! Här är en sammanfattning av ändringarna.

Visual Studio

Den nuvarande versionen är Visual Studio 2019 16.8.3, senast uppdaterad i december - se Releasenotes för VS 2019-versionen.

Det ser ut som att MSVC förmodligen är närmast att implementera fullt stöd för C++20! Teamet kämpade med C++11 och C++14, men när de väl skrev om många av sina backend-delar fick de greppet och nya funktioner är nästan omedelbara :) Grattis!

Några MSVC-nyheter och bloggar:

  • En rundtur i C++-moduler i Visual Studio | C++ Team Blog
  • C++ Coroutines i Visual Studio 2019 version 16.8
  • Stöd för standard C++20-moduler med MSVC i Visual Studio 2019 version 16.8 | C++ Team Blog
  • C++20-funktioner och korrigeringar i VS 2019 16.1 till 16.6
  • MSVC Backend-uppdateringar i Visual Studio 2019 versioner 16.3 och 16.4

Och här är en dokumentationssida om överensstämmelse med C++-standarder (inklusive C++20):Microsoft C++-språköverensstämmelsetabell

GCC

Aktuell stabil version GCC 10.2 23 juli, GCC 10 Release Series Changes

  • Nuvarande C++-stöd i GCC
  • Libstdc++ Status
  • Libstdc++ C++ 2020 Status
  • Nya C++-funktioner i GCC 10 - Red Hat Developer
  • GCC 10.1 släppt

Klang

Aktuell stabil version:11.0 - 12 oktober 2020, Release Notes

  • Nuvarande C++-stöd i Clang
  • libc++ C++20 Status — libc++ 12.0 dokumentation
  • libc++ C++2b Status — libc++ 12.0 dokumentation

Intel-kompilator

Intel Compiler Classic - C++ Compiler 2021 se utgåvan

  • C++14-funktioner som stöds av Intel® C++-kompilatorn
  • C++17-funktioner som stöds av Intel® C++-kompilator
  • Intel OneAPI

Jag följer inte nyheter i kategorin "datorer" så mycket, men det finns en utmärkt översikt från Denis Bakhvalov så ta en titt här:

Datorindustrin i slutet av 2020 som jag ser det. | Easyperf

C++ Builder

Den nuvarande versionen är RAD Studio 10.4 Sydney, släpptes 26 maj och uppdaterades nyligen i november. Se release notes

IDE använder en modifierad Clang-kompilator (version 5.5, se kompilatoranteckningarna) och Dinkumware STL-implementeringen Den fungerar med både Win32- och Win64-appar. C++Builder är en fullfjädrad IDE för att bygga iOS-, Android-, Windows- och macOS-appar från en enda C++-kodbas.

Några nyheter:

  • C++Builder-stöd för ISO C++ i version 10.4 Sydney
  • Kompilera 1 miljon rader av C++ på ~2 minuter med en Ryzen 9 5950x med 16 kärnor
  • Säkrare, snabbare och stabilare sätt för internetanvändare att uppleva webben!

Och det som är intressant är att Embarcadero stödde Dev C++ och de lyckades släppa en ny (och gratis) version av denna coola och lilla IDE! Här är en grundlig översikt över processen:Embarcadero Dev-C++:Successfully Modernizing A Popular Windows C++ IDE. Och här är Github-länken:Embarcadero/Dev-Cpp:En snabb, portabel, enkel och gratis C/C++ IDE

Verktyg

Medan du i teorin kan använda en C++-kompilator och ett anteckningsblock behöver du förmodligen några fler verktyg för att skriva ett riktigt projekt :)

Här är en fin översikt över hela C++ ekosystemet:C++ ekosystem:kompilatorer, IDE, verktyg, testning och mer - C++ berättelser

Och nedan kan du hitta en lista över deras uppdateringar under 2020:

Klangverktyg:

Clang/LLVM driver många fantastiska verktyg! Till exempel:

  • Clang Tidy
  • Clang-Include-Fixer
  • AddressSanitizer
  • MemorySanitizer
  • För Visual Studio kan du använda Clang Power Tools - Visual Studio Marketplace.
    • Utvecklad av Victor Ciura (@ciura_victor)
    • Version 6.5 tillgänglig sedan november 2020. Se ändringsloggen
    • Det finns också en betalversion:Pro-versionen
  • Och du kan också använda kodinspektioner baserade på Clang-tidy:Visual Assist-funktioner:Code Inspection - Whole Tomato Software

IDE och produktivitet

Visual Assist

Den senaste versionen från 11 november.

I år lyckades VA-teamet göra en hel del förbättringar, särskilt inom området kodinspektioner och bättre prestanda för stora projekt.

  • Visual Assist build 2353 är tillgänglig – Tomatsoppa
  • Teknisk djupdykning:Minska minnesförbrukningen i Visual Assist build 2393 – Tomatsoppa

ReSharper C++

  • C++20-jämförelser i ReSharper C++ 2020.3 | JetBrains blogg
  • ReSharper C++ 2020.2:Unreal Engine Project Model, förbättrat C++/CLI-stöd och mer
  • ReSharper C++ 2020.1:Nya C++20-funktioner

CLion

  • CLion 2020.3:Core Dumps Debug and Debug as Root, CTest Support, MISRA Guideline Integration och en bättre Qt-projektupplevelse | JetBrains blogg
  • CLion 2020.2:Makefile-projekt, C++20, förbättrad kodanalys, Doctest och andra förbättringar av stöd för enhetstester

SourceTrail

För en bättre kodförståelse kan du också ta en titt på SourceTrail. 2019 släpptes den som en helt gratisversion! Sourcetrail är nu gratis och öppen källkod – Sourcetrail Developer Blog

Kodanalysatorer:

PVS-studio

PVS-Studio ett verktyg för att upptäcka fel i källkoden för program, skrivet i C, C++ och C#. Det fungerar i Windows och Linux-miljöer.

Den finns nu i 7.11-versionen, se PVS-Studio 7.11 Release:IAR Arm, Diagnostics, GRATIS-GRATIS-GRATIS-GRATIS.

Du kan också titta på mitt blogginlägg:How I Improved My Legacy C++ Project with PVS-Studio - C++ Stories

CppDepend

I år har vi version 2020.1 - CppDepend - Vad är nytt i CppDepend!)

Pakethanterare:

  • Conan - Version 1.32 tillgänglig - Conan 1.32:Ny validate()-metod, första konfigurerbara generator (MSBuildDeps), omdöpt till flera verktygskedjor och generatorer, 2 nya mesonklasser, förbättra Lockfile-stödet för privata krav, stöd för build_requires för att påverka paket-id ( Lösning)
  • Microsoft/vcpkg:VC++ Packaging Tool - öppen källkod C++ Library Manager för Windows, Linux och MacOS.

Konferenser

Hm... hur ska man sammanfatta vad som hände i år angående konferenser... hmmm :)

Allt flyttade online, från CppCon, Meeting C++, C++Now, ACCU, code::dive... och många fler.

Här är en bra sammanfattning från mars:

C++ 2020-händelser påverkade av Covid-19

Ifall här är länken till ISO C++-sidan med alla registrerade konferenser runt om i världen:Conferences Worldwide, C++FAQ.

Community och användargrupper

Användargrupper är en chans för dig att träffa andra C++-programmerare, dela dina erfarenheter och lära dig nya saker. Jag rekommenderar starkt att du besöker sådana grupper regelbundet... eller åtminstone då och då.

Om du inte har en användargrupp nära din plats (men kolla Användargrupper över hela världen), kan du också delta i:

  • C++ Slack-kanal:https://cpplang.now.sh/
  • #inkludera C++

I år fick vi även Meeting C++ Online! Det är ett samtal, en gång i månaden men helt online - så du kan gå med var du vill!

Möte C++ online

Böcker och kurser

Några utvalda böcker som kom i år (eller sent 2019):

Namn Utgivningsdatum
C++20 av Rainer Grimm (pågår) December 2020
C++ Best Practices av Jason Turner December 2020
C++ Move Semantics - The Complete Guide @Amazon Oktober 2020
Introduktion till programmering med C++ för ingenjörer (Wiley - IEEE) av Boguslaw Cyganek November 2020
Prestandaanalys och inställning på moderna CPU:er:Kläm den sista biten av prestanda från din applikation. av Denis Bakhvalov December 2020
Data Parallel C++:Mastering DPC++ för programmering av heterogena system med C++ och SYCL November 2020
Modern C++ programmeringskokbok:Master C++ kärnspråk och standardbiblioteksfunktioner, med över 100 recept, uppdaterad till C++20, 2nd Edition av Marius Bancila September 2020
C++ Lambda Story:Allt du behöver veta om Lambda Expressions in Modern C++ av Bartlomiej Filipek Augusti 2020
Unreal Engine C++ the Ultimate Developer's Handbook:Lär dig C++ och Unreal Engine genom att skapa ett komplett actionspel av Stephen Seth Ulibarri Juni 2020
Windows 10-systemprogrammering, del 1 av Pavel Yosifovich April 2020
Storskalig C++ Volym I:Process och arkitektur av John Lakos December 2019

Popularitet

Låt oss ta en titt på några diagram/statistik:

  • Tiobe visar C++ på fjärde plats. Det är nu 6,91 %... så vi ökade med 0,8 % sedan förra året! Se diagrammet här:Tiobe Index.
  • I StackOverflow-undersökningen är C++ placerad på 10:e plats, över C (men under Java, C# och naturligtvis JavaScript). Förra året blev det 9:e plats..
    • Stack Overflow Developer Survey 2020
  • I GitHub-undersökningen har C++ en 7:e plats och flyttade ner från 6:e plats förra året.
    • Tillståndet för oktober 2020

Din indata och undersökning

För en vecka sedan startade jag en snabbundersökning där jag ville få lite data om C++-användning. Jag fick 427 svar! Tack!

Låt oss göra en sammanfattning och tabeller från dina svar :)

C++ Standard används

Vilken C++-standard använder du dagligen?

Svar 2020 2019 2018
Pre C++11 8,4 % 10,3 % 20 %
C++11 25,5 % 30,3 % 41 %
C++14 28,6 % 35 % 42 %
C++17 64,4 % 62,4 % 44 %
C++20 20,4 % 9,2 % n/a

(Siffrorna för ovanstående summerar inte till 100%)

Som vi kan se är C++17 betydande och C++20 får fler och fler användare och tidiga användare.

Erfarenhet av C++17

Vad är din erfarenhet av C++17?

Svar 2020 2019
experimenterar med C++17 34,9 % 39,4 %
läs bara grundläggande information 9,4 % 13,4 %
används redan i produktionen 52,2 % 41,6 %
känner inte till någon av dess funktioner 1,6 % 2,6 %

I år kan vi se stadiga framsteg i antagandet av C++-standarden.

Erfarenhet av C++20

Vad är din erfarenhet av C++20?

Svar 2020 2019
experimenterar med C++20 35,6 % 29,3 %
läs bara grundläggande information 50,8 % 59,8 %
används redan i produktionen 6,8 % n/a
känner inte till någon av dess funktioner 5,2 % 9,1 %

Använda kompilerare

Vilken kompilator använder du?

Svar 2020 2019
GCC 70,3 % 75,6 %
Klang 49,6 % 58,7 %
MSVC 58,5 % 56,3 %
Intel-kompilator 2,8 % 3,1 %
Borland C++ 3 % 1,2 %

(Siffrorna för ovanstående summerar inte till 100%)

Vilka ytterligare verktyg använder du?

Svar 2020 2019
Debugger 77 % 83,6 %
Desinfektionsmedel 31,9 % 40,4 %
Statisk kodanalys 60,9 % 55,7 %
Profiler 53,4 % 56,8 %
Klangformat 43,3 % 49,3 %
CMake 62,3 % 66 %
Pakethanterare 23,2 % 21,4 %

(Siffrorna för ovanstående summerar inte till 100%), förra året ställde jag inte den frågan.

Det bästa som hände 2020:

Det här var en öppen fråga, och vad jag har sett var de viktigaste sakerna följande (ingen särskild ordning):

  • C++20 ISO-standarden godkändes.
  • Alla konferenser fanns fortfarande kvar, fast online
  • Områden, koncept, moduler, koroutiner
  • Behålla ett jobb eller hitta ett nytt
  • Tillägget av lånekontrollen till Clang.
  • C++17 används i mitt företag/projekt!
  • C++17 parallell stl g++/clang++ stöd
  • Cppcon2020
  • Möte C++ online
  • Nya AMD-processorer!
  • Visuell studio och massor av uppdateringar och ligga i framkant med C++20-stöd

Sammanfattning

Här är de saker som fick min uppmärksamhet i år (beträffande C++):

  • C++20 avslutat och publicerat!
  • C++20 nästan implementerat i populära kompilatorer!
  • Allt rör sig online!

Det var ett fantastiskt år för C++ som programmeringsspråk! Hela framstegen med C++20-standardisering och implementeringsstatus (vi är mycket nära att ha fullt stöd i MSVC). Allt detta hände under detta galna 2020.

Å andra sidan förlorade vi också en mycket framstående C++-expert:Beman Dawes. Han gick med i kommittén 1992, även innan C++98 standardiserades, och från det året bidrog han till många delar av C++ och Standard Library (och Boost). Du kan läsa hans berättelse i den här artikeln @IsoC++.

Vid tillfället önskar jag er allt gott under 2021, och förhoppningsvis kan vi börja återgå till det "normala"!

Din tur

  • Vad tycker du om C++ 2020?
  • Vilken var den viktigaste händelsen/nyheten för dig?
  • Har jag missat något? Låt mig veta i kommentarerna!

Gå med i diskussionen på denna Reddit/r/cpp-tråd .