Microsoft Visual C++

This study of Microsoft Visual C++ was begun in earnest late in 2005. The version examined was from Visual Studio 2003, this having been at the time the latest version I had from an MSDN subscription. The study ran to nearly 1000 pages before being abandoned late in 2006 due to illness.

The only substantial editing since then has been two rounds of more or less mechanical reformatting to fit the material to the expectations of the present website. Though the whole study is now here, editing during transfer from its old website may have introduced glitches. There is also a problem with pages that were being worked on when the study was unexpectedly stopped: it is not at all clear what state I thought they were in then.

Many pages are just drafts or sketches. Many are nothing but placeholders. The study is published as a work in progress, even though many pages will likely never be worked on again. Your understanding is to be that these are rough notes which may be better to have now rather than wait for the perfection of one man’s unpaid work. Exercise more than usual caution.

Should you be curious, you are of course welcome to look around. Please check the Browser Advice first, especially if your browser does not show a Table of Contents in a left-hand frame.

If you find anything that you would like to see revised or updated, then write to me to encourage my effort.

Microsoft has long published a suite of software tools with which programmers in general may write programs in the C and C++ languages for execution on Microsoft’s operating systems.

Even operating systems as thoroughly well entrenched as Microsoft’s surely do not become so, or stay so, if all the other software for the computer must, or would better, come from the same manufacturer as the operating system. One might think therefore that everyone, including Microsoft, benefits if programmers outside Microsoft are well supported in directing their ingenuity and innovation towards Microsoft’s operating systems as platforms for all the unknowable variety of uses that anyone might think to find for a computer.

If such thinking is correct, then of all Microsoft’s products programming tools such as Visual C++ would be the ones for which Microsoft’s documentation is the most accurate and complete. And perhaps the documentation of Visual C++ truly was excellent once upon a time. Even if so, the documentation has not kept pace with development of the software. Much is demonstrably incorrect. It looks like quite a lot could be added to or corrected, perhaps even usefully, should someone with sufficient expertise have sufficient incentive for the study and the write-up.

Monopolistic Advantage

All other things being equal, Microsoft’s programmers who use Visual C++ to write programs for execution on Microsoft’s operating systems should have the same knowledge of Visual C++ as have other programmers who use Visual C++ to write programs for execution on Microsoft’s operating systems.

Of particular interest is that the development kits for Microsoft’s operating systems have long assumed the use of Microsoft’s tools. Of course, Microsoft has no monopoly in the market for programming tools, not even in the market of tools for writing programs that run on Microsoft’s operating systems. Also, it is entirely natural that Microsoft’s own programmers would use Microsoft’s own programming tools for writing not just Microsoft’s operating systems but also the many Microsoft programs that run on those operating systems.

Yet since Microsoft has been ruled to have monopoly control in the market of operating systems that run on personal computers, there seems at least some potential for anti-competitive advantage if Microsoft’s programming tools have features that are undocumented for most programmers but which enable Microsoft’s programmers to write software that works better with Microsoft’s operating systems. Anyone can suspect, but nobody outside Microsoft can know until someone looks.

To have at least some suspicion on this point seems not at all unreasonable. As a topical example at the time of writing, consider Microsoft’s promotion of Profile Guided Optimization (PoGO). This is said to be new, and even important, for 64-bit computing. Yet as a feature of Visual C++ it is certainly old, just not documented. Signs of it, or of something very like it, being used by Microsoft to improve the performance of 32-bit executables in Microsoft’s products start roughly with the release of Internet Explorer 4.0 and Windows 2000 (which, perhaps not coincidentally, is when much of the furore about Microsoft’s anti-competitive practices finally acquired sufficient commercial significance to prompt prosecution by governments).

Standing on Its Own

As an aside, but a strongly-felt one, I note that Microsoft Visual C++ is arguably no longer a product in its own right. It is nowadays sold in its full-performance version only to those who will also buy tools for several other programming languages—even for languages that the programmer hasn’t the slightest use for and needn’t ever have learnt. With Microsoft Visual C++ Professional Edition being long discontinued, the only C/C++ compiler that Microsoft still sells as a self-standing product is the Standard Edition, which is badly hobbled, most notably by being non-optimising. That this hobbling is not mentioned (today, 30th September 2005), at all, let alone prominently, on what is apparently Microsoft’s main web page for the Visual C++ product is presumably just an oversight.

On the other hand, perhaps it is no oversight at all but someone’s careful economy with the truth. Even the packaging for Microsoft Visual C++ .NET Standard Edition does not state honestly and directly that the compiler inside the box is non-optimising. The only indication is indirect, where “Build high-performance applications using the C++ optimizing compiler” is listed among reasons to buy Microsoft Visual Studio .NET Professional Edition instead. The (prospective) customer is apparently left to infer that this reason would not be worth listing except that the compiler in the Standard Edition is not an optimising compiler. If it’s honourable, or even just a good business decision, to sell only a reduced-performance C/C++ compiler to programmers unless they will also buy a bundle of tools for other languages, then why not be up-front about it?