experimental

C++ Modules conformance improvements with MSVC in Visual Studio 2019 16.5--Cameron DaCamara

Did you try it yet?

C++ Modules conformance improvements with MSVC in Visual Studio 2019 16.5

by Cameron DaCamara

From the article:

C++20 is right around the corner. Along with the new standard comes the much anticipated Modules feature! The compiler team initially announced that we were working on the Modules TS back in 2017 and since then we have been hard at work improving the feature and improving compiler conformance around this feature. We finally feel it is time to share some of the progress we have made on the conformance front for Modules...

The C++ Lifetime Profile: How It Plans to Make C++ Code Safer--Daniel Martín

A way to make C++ safer.

The C++ Lifetime Profile: How It Plans to Make C++ Code Safer

by Daniel Martín

From the article:

High amounts of low-level systems are written in C++. Memory access in C++ is virtually unrestricted, which means that bugs in C++ programs can corrupt it and cause crashes or security problems. For this reason, we call C++ a memory-unsafe programming language — in contrast to memory-safe languages like Java, Rust, and Swift.

In this blog post, I’ll talk about the C++ Lifetime Profile, explaining what it is, how it intends to reduce the problems typically caused by the memory-unsafe characteristics of C++, what the status of the current implementation of the Lifetime Profile is, and what the current limitations are...

C++ coroutines: The problem of the DispatcherQueue task that runs too soon, part 4--Raymond Chen

The series continue.

C++ coroutines: The problem of the DispatcherQueue task that runs too soon, part 4

by Raymond Chen

From the article:

Last time, we made another attempt to fix a race condition in C++/WinRT’s resume_foreground(Dispatcher­Queue) function when it tries to resume execution on a dispatcher queue. We did this by having the queued task wait until await_suspend was finished before allowing the coroutine to resume, and we found a nice place to put the synchronization object, namely in the awaiter, but even with that fix, we introduced additional memory barriers into the hot code path.

But it turns out all this work was unnecessary. We just had to look at the problem a different way.

The purpose of storing the result of Try­Enqueue into m_queued is so that await_resume can report whether the lambda was queued or not. But we can infer that information another way: The fact that our lambda is running means that got got queued. Because if the lambda were not queued, then it would never have run in the first place...

C++ coroutines: The problem of the DispatcherQueue task that runs too soon, part 3--Raymond Chen

The series contine.

C++ coroutines: The problem of the DispatcherQueue task that runs too soon, part 3

by Raymond Chen

From the article:

Last time, we fixed a race condition in C++/WinRT’s resume_foreground(Dispatcher­Queue) function when it tries to resume execution on a dispatcher queue. We did this by having the queued task wait until await_suspend was finished before allowing the coroutine to resume. The hard part was finding a place to put the synchronization object, and we ended up putting it in the queued task’s lambda...