473,806 Members | 2,967 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Why no C++ in Windows itself?

It is a long time now that I am using "Dependency Walker for Win32" and
navigating through different Dlls in "System32" folder to find my target API
functions. The thing I have noticed is that, 'almost' all system .dll and
..exe
files are written in C and not C++. If C++ is a powerful OO language and
it's much greater than C for large application development, then why haven't
Microsoft used it in its operating system? Is there a compatibility issue
here that I am not aware of? Or something else?
---
Thanks for comments

Jul 21 '05
12 1448
In article <#y************ *@TK2MSFTNGP15. phx.gbl>, phil@private-
citizen.com says...

[ top posting fixed ]
"benben" <be******@yahoo .com.au> wrote in message
news:uK******** ******@TK2MSFTN GP10.phx.gbl...
The GDI system is written in C++, at least.
GDI+, not GDI.


GDI doesn't attempt to present an OO interface like GDI+ does, but
GDI is written (primarily) in C++ as well.

Going back to the original question, I think it's worth considering
the simple age of a great deal of the code -- much of the code in
Windows XP goes all the way back to Windows NT 3.1.

Microsoft had only been selling a C++ compiler for about a year when
Windows NT 3.1 started beta testing. Unless we assume that Windows NT
was written from the ground up in less than a year we have to admit
that they really only had a couple of choices: they could use
somebody else's compiler, or they could write in C. Given how much MS
was betting on Windows NT, I can't imagine them depending on anybody
else's technology to build it.

That pretty much ruled out using C++ except for a few of the last
parts to be written.

It's also been pointed out that the exported functions don't
necessarily reflect the language of origin. For a solid example of
this, I'd advise anybody to use dumpbin to look at the functions
exported from ATL.DLL and note that they all look distinctly C-like.
Looking at the source code (which is distributed as part of VC++ and
VS++) will leave little doubt that it really is written in C++.

--
Later,
Jerry.

The universe is a figment of its own imagination.
Jul 21 '05 #11
Rob
I think a point regarding operating systems is being missed. Any operating
system has 3 key compents process management, memory management and I/O.
Thats it. Everything else is application. The OS allocates memory, loads a
process into said memory and begins execution of said process. After that it
switches context between services interrupts, passing instructions to the CPU
and moving bits about memory.

All of this has to be small and preferrable fast. So its all assembly or C,
because C++ requires a fat runtime and excessive memory management. The guts
of windows primarily reside in nt.dll and kernel32.dll, both under 1MB. These
binary contain the Native API in 100% C wrapped around assembly. The
subsystems that sit on top of this, the most well known being the Win32
subsytem, basically wrap around these native api calls, translating the
low-level system objects like disks, partition, and file descriptors into
things we can visualize like drives, directories etc. Could the Win32
subsystem be implemented in C++, of course. But unless something genuinely
need to be implemented in OOP, why bother.

In my experience, and I use both C and C++ regularly, many developers lock
themselves into one contruct...eith er they hate OOP or they can't do without
it. The result, you get a lot of over-coding from both camps. There are
things you can do in 10 line of C++ that requires hunders of lines of C, and
the inverse is true as well.

Programming languages are tools and like any good mechanic, a programmer has
toolbox too heavy for amatuers to even lift.
"Severian" wrote:
On Thu, 10 Feb 2005 18:07:35 +0000, Tom Widmer
<to********@hot mail.com> wrote:
Severian wrote:
On Wed, 9 Feb 2005 14:07:44 +0330, "Herr Lucifer"
<"\n"HerrLucife r\n@microsoft.c om> wrote:
It is a long time now that I am using "Dependency Walker for Win32" and
navigating through different Dlls in "System32" folder to find my target API
functions. The thing I have noticed is that, 'almost' all system .dll and
.exe
files are written in C and not C++. If C++ is a powerful OO language and
it's much greater than C for large application development, then why haven't
Microsoft used it in its operating system? Is there a compatibility issue
here that I am not aware of? Or something else?
---
IMHO:

For time-critical issues,


Do you mean that C is faster executing? Or that its performance is more
consistent (for a realtime system)? I don't think either statement is
particularly true, though some C and C++ features should be avoided in
code that should run in a bounded amount of time (e.g. no dynamic
allocation, no disk IO, etc.).


Sorry, I wasn't trying to start a language war. I program in both C
and C++, and have seen plenty of good and bad examples of both. I was
comparing well-written C with well-written C++ (not simply C-like code
compiled by a C++ compiler).

But generally, when using the constructs that make C++ a great
language, it is very much simpler to estimate the overhead of C
statements vs. C++ statements. (I'm not talking about C code compiled
by a C++ compiler!)
smaller code size, better memory
consumption,


C does generally produce slightly smaller code, due to the overhead EH
and RTTI in C++. However, both of those may be avoided if desired.


In my experience, you have to know a lot more about C++ (and how it is
implemented on a particular platform) to make it as efficient (memory
and speed-wise) as well-written C.
improved control over efficiency,

How so?


Because, as examples, overloaded operators and virtual functions
introduce non-obvious overhead that is more explicit in C.
improved code
generation,


The code generation is generally worse in C, since I believe that type
based alias analysis isn't as good in C. Is there any other respect in
which you think C can generate better code?


You're probably right, in the general case of compiling simple C++
code; and in some cases (i.e., templates) even when generating complex
code. But once you start using the things that make C++ such a
wonderful language, the generated code tends, in my experience, to
become bloated and wasteful -- and much more difficult to debug.
simpler interface to assembler,

What do you mean?


I am speaking of calling assembly from C++ or vice versa, not inline
assembly, which is quite platform-specific.

One example: since assembly language has no concept of C++ objects,
you have to "deobjectif y" any data you want to access from assembler
(or C for that matter!), or know a lot about how a particular C++
compiler represents objects in memory and write extra assembly
language to work with them.
and easier debugging
(especially the kernel and low-level code)


But macros are far harder to debug than inline functions!


Most modern C compilers include inline functions, though by looking at
code generated by MS and GNU C++, macros are often much more
efficient, and thus often more appropriate for OS code.

The difficulty I was referring to was the semi-invisible things that
C++ does, that require you to know the implementation of classes you
use. Overloaded operators (-> and [] come immediately to mind) make
debugging a loathesome task unless you have access to the source code
for the original class. Even in those cases, it's often difficult to
figure out what exactly is going on behind the scenes.

I've seen well-written C++ code that is a joy to work with, but a lot
more of it is obfuscated (unintentionall y?) to the point of
hair-pulling. Most of Microsoft's C++ falls into the latter category!

When writing C++, I love STL and wish that MS had not tried to make
their own horrid messes first.
the guts of Windows are
mostly written in C.


That I know nothing about, but it certainly sounds true. But I believe
much of the Linux kernel is now written in C++ (as was BeOS). C++ is
primarily a systems programming language - it was specifically designed
for writing OSes (among other things), hence the priniciple of "You
don't pay for what you don't use."


I agree that well-written C++ code (in a _specific_ rather than
generic way) is very appropriate for operating systems, as long as
provisions are made for using the OS API from other languages.
I'd definitely prefer to write an OS in C++ rather than C, and the
resulting OS would probably be faster and better for it (though possibly
not smaller).


I think it boils down to whether the code is well-written or not; the
simpler basis of C makes it easier, in my opinion, to write efficient
and understandable code. That being said, I have worked with and
(hope) I have written efficient and easily maintainable C++ code as
well.

--
Sev

Jul 21 '05 #12
"Rob" <Ro*@discussion s.microsoft.com > wrote in message
news:44******** *************** ***********@mic rosoft.com...
All of this has to be small and preferrable fast. So its all assembly or
C,
because C++ requires a fat runtime and excessive memory management.
A common misperception, but largely untrue. The big exception is C++
IOStreams which IS a huge runtime, but an OS, even one written in C++ would
be unlikely to use IOStreams IMO.
The guts
of windows primarily reside in nt.dll and kernel32.dll, both under 1MB.
These binary contain the Native API in 100% C wrapped around assembly. The
subsystems that sit on top of this, the most well known being the Win32
subsytem, basically wrap around these native api calls, translating the
low-level system objects like disks, partition, and file descriptors into
things we can visualize like drives, directories etc. Could the Win32
subsystem be implemented in C++, of course. But unless something genuinely
need to be implemented in OOP, why bother.


Not quite true. ntdll.dll is nothing but a gateway - there's virtually no
actual code in there. The kernel code is in ntoskrnl.exe (2Mb) plus a
number of kernel-mode DLLs and tons of device drivers.

kernel32.dll is the basic Win32 API (Process/Thread API, File/IO API
mostly). These are generally thin wrappers over the "native API" exposed by
ntdll.dll and are written in C (mostly if not entirely).

The windowing portion of the OS is primarily implemented by user32.dll,
gdi32.dll and win32k.sys, which are written in C (mostly if not entirely).

Many of the other Win32 API components are in fact written in C++.

In all of the OS code there is virtually no assembly language other than
some start up code and the lowest level CPU support code in the HAL.

-cd
Jul 21 '05 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

7
3693
by: sidd | last post by:
Hi All, i have some doubts on .net windows services.. please see if some one could help me understand this.. 1)is it possible to install a windows service which does not have a installer added to it, using installutil.exe OR is it must to have an installer to the service project to be able to
9
7274
by: SP | last post by:
Hi All, I wrote a windows service which is supposed to stop after specified amount of time. I am calling OnStop() after specified time. OnStop() methods executed but I dont see the service stopping. Please advise how to stop the service. Thanks, SP
4
5621
by: Blaxer | last post by:
I have read approximately 30 articles now on various methods to make your vb.net application automatically update itself and I can't see how they apply to a vb.net windows services projects. The goal of the project is to write a windows service in vb.net that runs on many workstations that can automatically update itself from a central web server or share (either or doesn’t matter). I do not want the service to re-install itself each time...
7
362
by: sidd | last post by:
Hi All, i have some doubts on .net windows services.. please see if some one could help me understand this.. 1)is it possible to install a windows service which does not have a installer added to it, using installutil.exe OR is it must to have an installer to the service project to be able to
8
9833
by: =?Utf-8?B?TWlrZVo=?= | last post by:
How Can Windows Service Application Reatarts itself? Thanks.
0
10620
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10369
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10372
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9187
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
0
6877
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5682
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4329
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3851
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
3008
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.