Developer Support

Advocacy and Innovation

Recommended patterns for CancellationToken

Whether you're doing async work or not, accepting a CancellationToken as a parameter to your method is a great pattern for allowing your caller to express lost interest in the result. Supporting cancelable operations comes with a little bit of extra responsibility on your part. Optional CancellationToken ...

Immutable Object Graph updates

In my last post, I introduced a T4 template that constructs efficient and quite capable immutable objects based on the simplest mutable type definition. I also mentioned that the published sample is (necessarily, ala T4 style) open source and hosted online. Two outsiders have already submitted pull requests that have been accepted. Some ...

Simple immutable objects

We’re all familiar with immutable collections now. But immutability is only as immutable as it is deep. And an immutable collection of mutable objects may not provide the depth you’re looking for. So how can one create an immutable object? Suppose you would define the mutable version like this: An immutable version might be ...

Immutable collection algorithmic complexity

I received some feedback from my recent BCL blog post on the prerelease of the immutable collections that my algorithm complexity table left a few important entries out. Here is the table again, with more data filled in (particularly around list indexer lookup and enumeration): A noteworthy trait to call out here is that where a List<...

The cost of context switches

Context switches are not free. But how expensive are they? I wrote a small program to find out, and I’m sharing the program and its results here. I focused on purely context switches (no work is actually performed between context switches). So it’s not a real-world scenario, but it really brings out the hidden costs. Below are the results...

Update to Visual C++ 2012 Debugger launch extension template

A few days ago I posted about an updated Visual C++ 2012 debugger extensibility project template.  Since then, I realized it had a couple of issues that prevented it from working out of the box.  With those fixed, I also added a demonstration of how to read project properties that aren’t specifically dedicated to debugger ...

Enable C++ and Javascript project system tracing

I’ve previously posted on how to enable logging in the C++ project system in Visual Studio 2010.  In Visual Studio 2012 we’ve changed the way the Common Project System (aka “CPS”) emits trace messages so below I introduce an updated xml snippet that works in Visual Studio 2012.  Since CPS is now the project system driving JavaScript ...

Visual C++ 2012 Debugger Extensibility

Back in Visual C++ 2010 we introduced debugger extensibility so that third party vendors can either add new debugger engines or new ways of launching existing debugger engines for C++ projects.  In Visual C++ 2012 this debugger extensibility has been updated.  Any previous extensions that were compiled against Visual C++ 2010 will...

Immutable collections with mutable performance

In my last post, I detailed the differences among read/write, read only, frozen and immutable collection types.  I described how immutable collections come with a hit to the garbage collector due to the garbage they generate during mutations.  I have a very positive update on that topic. My previous implementation for the ...