Microsoft Visual C++

This study of Microsoft Visual C++ was begun in earnest late in 2005 and ran to nearly 1000 pages before being abandoned late in 2006 due to illness.

A year later I faced up to moving it here to the new site. The whole study is now here, but editing during transfer may have introduced glitches. There is also a problem with pages that were being worked on when the study was stopped: it is not immediately clear now what state I thought they were in then. You may do better to view the study at its old site.

Regarding its presence at this site, 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.

At either site, many pages are just drafts or sketches. 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 rough notes may or may not be better than nothing if the alternative is to wait for the perfection of one man’s unpaid work. Exercise more than usual caution.

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

Microsoft has long published a suite of software tools with which programmers in general, having no particular connection with Microsoft, may write programs in the C and C++ languages for execution on Microsoft’s operating systems. In theory, or perhaps only in the idealised world of the naive, Microsoft’s programmers who use Visual C++ to write programs for execution on Microsoft’s operating systems have the same knowledge, all other things being equal, of Visual C++ as have other programmers who are also in this (openly competitive) business of writing programs for execution on Microsoft’s operating systems.

One might therefore think that of all Microsoft’s products, tools such as Visual C++ would be the products for which Microsoft’s documentation would be the most accurate and complete. 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. The better the documentation of tools such as Visual C++, the better that programmers outside Microsoft can direct 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, it is all the more surprising that quite a lot could be added to or corrected in Microsoft’s documentation of the Visual C++ suite, perhaps even usefully, should someone with sufficient expertise have sufficient incentive for the study and the write-up.

Monopolistic Advantage

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.

However, 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 for 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 who won’t also buy tools for other languages, then why not be up-front about it?