05 January 2022

C++ standard, Runtime and XP

C++ standard has been evolving much more like Java, or rather no more like C evolution, C++20 module remind me of Java 11 it make C++ "appreance" no more like what it used to be... I wonder how far Windows XP could get the lastest C++ standard toolchain. Lets revisit C++ standard progression

C++98 (formally C++03) has been what XP supported by Microsoft (with its peculiarity and quirks) from the free VS2005 to 2010 express editon.

C++11: GCC 5 (2015) Clang 3.8 and Embarcadero BCC 10.1 (2016) MSVC 2015
C++14: GCC 5 (2015) Clang 3.4 (2014) MSVC 2017
C++17: GCC 11 (2021) still missing from_chars FP mode because Win32 has no uselocale()
             MSVC 2019 16.4 shared_mutex (not available in XP target, only C++14 shared_timed_mutex)
C++20: MSVC 2019 16.10 (2021) since 16.8 its runtime breaks XP for the first time (last: 14.27.29114)

While those compilers arrive at the same state around 2015, now we see Clang lagged behind, GCC is struggling and MSVC is geting faster and faster.

In Windows XP context though, GCC seems the only hope for any "sort of" C++20 support considering they have the principle of having as cross-platform as possible rather than as native as possible codebase. Clang libc++already break XP when implementing C++17FS.

How about C runtime?
Now called UCRT, apparently it also strangely break XP too. Being versioned as Windows SDK's the last XP compatible is 10.1.18362.1, starting with 10.1.19041 ucrtbase.dll through api-ms-win-core-memory-l1-1-0.dll redirector is asking dll.VirtualAlloc, dll.VirtualQuery and dll.VirtualProtect from kernel32.dll which previously not prefixed with "dll." weird... Note that Visual C++ runtime installer usually bundled with much older 10.0.10586 UCRT (from Windows 10 1511).

No comments:

Post a Comment