Microsoft's Commitment to C++

Description

Just be back from TechEd Europe, where I had a couple good C++ Sessions in my Track. One thing people frequently asked us is what is Microsoft's Commitment to native C++ Developers? So I decided for to make a short interview with Ale Contenti Principal Development Manager in the C++ Team.

Ale had also delivered a session on ALM for C++ at TechEd and if you are looking for the mentioned Code visualization and Layer validation for C, C++ it's part of the Feature Pack.

The Discussion

freefly

"We can do more!"Yes .. you guys can do more..!!!!. but I dont really see it for sometime now...I was wondering why did you guys post this video !!! Just to reiterate and show that Microsoft is committed to what C++ ???honestly .... total disappointment !!!

@freefly - what kind of videos would you like to see from the C++ team? the fact is we sometimes get customers who don't realize how important C++ is to the company and we like to take these ad-hoc opportunities although I understand you might have been looking for some meatier announcements. stay tuned till we're ready to show off some of our new stuff in the next VS, we really hope it will impress!@lukas - can you elaborate? what kind of BI scenarios? I admit when I think of BI, I think of Excel and SQL so I'd love to learn more about where C++ has done well here in the past and how it's dwindling. Is there any particular reason as far as you know?

@Boris Jabes = Take a look at the resource editor in VC toolbar , icon editors... etc it is like ghost from the past even before VC6. Many people has been asking for it to change, but all we back is to use some partners software instead... Managed C++ is like orphaned.. dont know where it is heading to ? VC++ development is no more supported for Windows Phone 7... list goes on... I dont really have to pick everyone of them....

@freeflykind of obvious, c++ isn't owned by microsoft so it gets a lower priority to F#, C# and all the other slow and crappy languages from microsoft.microsoft wont admit this of course but we all know it because it's so obvious.Example: do a count of how many c++ videos have been released this month on channel9 compared to a language microsoft own.I see only one c++:ish series (the STL series, which rocks btw)channel9 have become a PR bs site for microsoft products, it's disgusting.I thought channel9 was supposed to be for the developers of all kinds.

I can understand the delay with the C++ standard and related developments... I can live with less videos and stuff on the MSDN around C++ but looking at where Managed C++ and innovation around C++ in general is too disappointing... In our company we had a C++ windows mobile project that was using DirectShow and DirectDraw etc and some image processing related stuff, we had to stop developing further because there is no support for C++ development in Windows phone 7.

Thanks for replying.First of all, when it comes to C++/CLI we definitely messed up. We simply underestimated the cost of getting our new IntelliSense engine to handle the language extensions in time for VS2010 but we are working on it as we speak and we will rectify that missed feature. We still believe it's very powerful and differentiating technology for doing .NET interop and we're proud of it. We use it extensively inside VS and in other MS products. We did make the call to focus on the core language rather than try to "keep up" with every innovation in C# (e.g. LINQ). At some point we want people to use those languages for those tasks. That said, it's still going to be the most effective interop technology we have and it's not going anywhere.

Our mantra as Ale points out in the video is "power & performance" and we want to remain the absolute best at this: in terms of control, codegen, parallelim, etc... If you look at VS2010, I don't think we've been stagnant. On the language side, we are active members of the C++ committee and while it can never move as fast as C#, C++0x is a huge improvement that brings countless modern techniques to the language. In fact, our new lambda expressions are less verbose than Java's and provide exactly the kind of control a C++ developer loves! :)

On the library side, we took advantage of these language changes to deliver the parallel patterns library (PPL, ConcRT), which is all native, STL-like and helps a C++ developer take advantage of all that multi-core power on desktops today. Going forward, we think DirectX-based apps are a big deal for us and I really hope you will be happy with some of the improvements we're going to bring for building native, high- performance, differentiated client apps.

@obvious: name your C++ topics and we'll try to make videos about 'em. @freefly: would love to learn more about your app, feel free to email me.As for the resource editor, it's definitely a sore spot in our day & age. I can't promise anything there yet.

Commitment to C++? Feedback from customers?When customers ask about C++/CLI on MS Connect, MS says that the behavior is "by design". I'd rather use notepad to write my programs after spending $2000 on a copy of VS2010.

[quote]1 day agoCommitment to C++? Feedback from customers? When customers ask about C++/CLI on MS Connect, MS says that the behavior is "by design". I'd rather use notepad to write my programs after spending $2000 on a copy of VS2010.[/quote]Been there done that :(

@Boris Jabes [MSFT]: "name your C++ topics and we'll try to make videos about 'em." Oh where to start, some examples: 1. Gotchas and good practicies when developing windows apps using C++ / C++0x 2. Optimization techniques both code and profiling and what not to optimize, etc..3. Multi-threading, sharing information among threads, ex using the observer method, describing what methods are best / recommended for which scenario, talk about the extra over-heads of each method etc..honestly i don't know where to start :s so many C++ topics i want you to talk aboutbut those i mentioned above are on the top of the list

Can i begin to expect videos soon about these topics or should i delay my nerdy excitement a few months ?

PS: "we'll _try_ to make" aherm...I'll say "Do, or do not. There is no 'try'" ;)PS2: where did the font styles go, another bug ? :(

@elroy - can you point me to the thread on Connect? Lacking IntelliSense for C++/CLI was an unfortunate resource-based cut we had to make in VS2010 but we are actively working on fixing that at our best speed!

@Boris: do you guys at Microsoft really consider C++/CLI the best option for doing interop between native C++ and managed code? How do you think it compares to COM? I've used both lately and I feel COM scales better (e.g. trying to mimic class hierarchies and their polymorphic behaviors using C++/CLI is really complicated, while with COM this is handled with no additional effort).

I am not very concerned about CLI. Everytime I investigate capabilities of CLI, it comes up short. CLI is great for Web clients and Office macro development. I have developed Visual user interfaces that are more capable and user friendly than CLI applications. CLI is great for simple user interfaces and most users interfaces are simple. C++ is far more capable and I hope that the capabilities will continue. The CLI interfaces help with development because the power of Office and other tools can be accessed to make development improvements faster. I have developed application servers that support multiple users and parallel processing. CLI does not provide adequate support for high performance servers nor parallel processing performance. Checkout the Visual C++ Intel libraries that support vector math processing.

@Boris Jabes [MSFT]:At some point we want people to use those languages for those [LINQ] tasks.With those words, you have thrown in the towel. What made C++ a great language in the 1990's is that, with one language, you could write ANYTHING that ran on the Windows stack, from device drivers to TCP/IP middleware, to desktop apps, to Internet web page (ActiveX). Anyone who was a Windows software developer knew C++, or they died.Now you are repositioning C++ only for performance reasons, to take advantage of the latest OS features, and to maintain large codebases. Boring, boring, boring. That cuts out 90% of the people who used C++ in the 1990's. Do you really want to position C++ as a boutique, specialized language that 90% of the population ignores, like LISP or APL?What you should be doing instead is what the Qt people are doing --- advancing the state of the art in C++ that keeps it relevant for the 90% of the devs you are now ignoring.You don't have to take my word for it. Just watch your own video and see the lack of fire and passion in your own voices. Then read the comments here to rediscover what fire and passion are. Wake up!David ChingVisual C++ MVP

I'll admit I'm not the hardcore C/C++ programmer I used to be since making the switch to C# way back in 2002. That said, I did have the need to write a quick text parser quite a few weekends ago and decided to give it a try with VS2010.

To say I was disappointed would be an understatement. Details escape me (except for the lack of Intellisense) right now but in all aspects from creating the project to coding to debugging, C++ felt like a second class citizen with minimal support.

Back when VC++ was truly _visual_ it was a great language with a good programmer interface. In the last release that I bought everything had to be done by the programmer! No more Wizard! At least for me, the Wizard cut development time considerably by making most things easy and ensuring that I didn't forget some thing.If you're really committed to VC++ bring back the Wizard(s)! It is much more likely that you're going to spend your development time / energy / resources on C# because that's highly propritory....

I’ve written more than two million lines of C++ over my life and I’m utterly impressed with VS10 and the corresponding version of the compiler.

C++ is not for everybody and it's not the language for every application but as Ale Contenti explains in the video clip, if you need performance, small footprint and semantic power, C++ offers a feature set which is unrivaled by any other language.

@Boris Jabes {MSFT]:Something I'd love to see is a faster MIDL compiler. We have a bunch of C++ COM projects, and it seems like most of the compile time is spent by MIDL compiling the IDLs. I'd bet there's lots of room for improvement there. Just my $.02.

I agree w/ cpprules, VC++ is well-attended to by Microsoft - it was not meant to be a visual language in the first place. The forms designer is a retrofit over C++ and works fine. If you need RAD, use C# or VB. If you need performance, C++ is your language. What lacks, in my opinion, is information on where Microsoft stands with COM, MFC and other technologies (e.g. ATL, DirectShow, etc). They continue to support it, and these technologies are really not dying, but there are only tidbits of relevant information exiting infrequently from Microsoft. And this unnerves those less in the know.

@Boris Jabes: You have been a really good sport about answering hostile questions in a civil manner! Thanks for putting up this interview, it IS appreciated.

@freefly: Agreed - not sure what the overall message was supposed to be. Anyway, Ale - adding new features is great, but without addressing these first, you are going to start (continue?) losing users: social.msdn.microsoft.com/.../a6d500a2-d4ea-43e2-8460-9283ea5c1d89.We desperately need help in VS2010 SP1. I am sure you have seen the postings in the link above, but if not please review them carefully. These are very real issues hurting our productivity. Our development experience in VS2010 is very disappointing compared to VS2005, especially considering the price of the tool.

I was a hard-core c++ developer for 12 years. Loved it. Then in 2002 C# came along and c++ from MS went almost silent. 8 years later there is still very little coming out of MS on c++. Don't take a leak on my leg and tell me it's rain. The language is as solid as ever. Still the fastest performance out there. But whats dying out are the c++ programmers. More are leaving c++ than are taking it up. Sure, I can undersand _why_ intellisense for c++ didn't make it into VS2010. But it still makes it feel like it's a distant priority for MS. VS2010 has been out almost a year. Personally, I moved on to C# back in 2002. I keep watching c++ and hoping for a return of support, and MS keeps disappointing.

I think you need to re-evaluate what constitutes a large VC++ sln. Our medium size apps are ~120 projects not 50. Please, before adding more features to VC, consider fixing the following existing features:

Local variables in the debuggerWaiting until the ‘next release’ for this fix is unacceptable.

Go to DefinitionThis feature does not work for projects of any significant size. Actual example of using this feature: In a class header. Select go to definition for a member function. Wait ~5min for parsing 377000 files (O(n^2) problem I think, we typically have 4-5000 source files + boost & Qt includes). A definition for the symbol 'xxx' could not be located

Debugger Step Forwards/Into etcStepping over even the simplest line like a = b + c; takes a considerable amount of time, 1-2seconds for an operation that should be effectively instant. Additionally there is no mechanism to skip past functions who’s prototype was included though angle brackets (#include <xxx>). Try stepping though a boost signal some time.

Internal compile error when building on WinXP 32bit machinesI realise that XP is really old and you are trying to let it die but this show stopper highly reproducible compiler crash has greatly slowed the deployment of VS2010 at our company.

In closing, as a multi platform company we have some developers pushing non Visual Studio environments and it is becoming progressively harder to disagree with them. Esspecaly as Microsoft seem to be including more and more C++ features only in the more expensive tiers.

The video is also heavily commented on the Visual C++ blog: https://blogs.msdn.com/b/vcblog/archive/2010/12/05/microsoft-tells-what-s-next-on-c.aspxMost of the comments are pretty harsh (IDE slowness and memory usage, missing features and bugs, lack of modern frameworks) and I have to say I agree with most of them.Let's be idealistic: what I think is needed is a reset of the IDE and the advent of new modern frameworks to develop C++ applications. Don't know where to start? Look at the amazing job you have done with VC6, you can do it again!

Hi everyone,First of all, I'm very sorry for not keeping up with the thread, I hope you don't think it's because we don't like hearing the feedback. I just don't have a notifier for the thread updates (and it's not like we all don't get enough email right?).I'm going to try and answer some of the things but I feel like I won't be able to do all the comments justice using this measly text box. I'll start with David Ching's comment. I really don't think C++ is a niche language nor does our team. We think the world's coolest software is written in C++, in fact, go ahead and name software you've installed on your machine that you love and I'll bet it's 80+% in C++. We think LOB apps in the enterprise are less our bread & butter though. Of course, banks do crazy cool stuff with C++ to get performance but mostly what we see is that they tend to prefer the features of managed languages (easier to write automation against, etc etc etc). This doesn't mean we want the C++ IDE or Framework experience to be 2nd class. We firmly believe the best UI on client apps are built by C++ devs and we hear you loud & clear that MFC doesn't cut it in our day & age. Heck, the most immersive experiences on my PC are in games and they build all their UI up from scratch in C++ right? We are not ready to share our plans for the next release but like I said, this is a piece of feedback we are actively listening to.In conclusion David, we still believe C++ is the language that lets you do *anything* on Windows. But it's not really a "belief" is it? It's just plain fact. My comment about LINQ is that we believe if you had to trade high-level language syntax to talk to databases vs. the ability to have access to all corners of the machine you would choose the latter (if you're pulling data off an accelerometer, do you really want something like LINQ between you and the hardware?). Not having LINQ in our language doesn't mean we don't have OLEDB & co. right? A C++ developer can connect to any database a C# developer can, and with less voodoo in the middle.

@com asked whether I believe that C++/CLI is the best way to do interop. My answer is that it's the most *flexible*. Of course, if you have a COM component already, I would definitely just use COM interop. It's really nice. Of course, the overhead between COM interop calls to managed code vs. straight C++/CLI or PInvoke calls is more than one order of magnitude (in the thousands of cycles I think) so that's why believe it was and continues to be essential to provide something like C++/CLI: rich OO and C++ support with all the low-level performance of P/Invoke.

@londey our test solutions for performance are over 30,000 files and 10 millions lines of source code. the SDF it generates is over 1GB. even with that kind of benchmark we still miss some key things when we ship. perhaps we are simply incompetent but the combinatorial explosion of user solutions makes it hard to make things accurate and fast for everyone (e.g. can we use PCH to make performance better? obviously some percentage of our users still don't use them...). I won't deny we need to continue to improve the system though and I appreciate your specific pieces of feedback there.Can you clarify the "local variables" problem? i'm pretty sure that works for me. For gotodef, we have some fixes coming in SP1, can you try out the beta and let us know if it helps (feel free to email me, there might still be time for us to make sure the scenario works on your box). are your debugger bugs logged on connect?

@Boris I would like to see more videos on the following topics:- Compiler architecture and evolutions (front end and back end)- C/C++ runtime libraries design and evolutions- ATL futureIt would also be great to get videos with the Windows teams where they explain how they work with C++ and the different libraries you provide. I think that showing how C++ is used inside Microsoft and especially in Windows (but also in other softwares like Office, SQL Server and so on) is the best way to prove that the language is still a first class citizen!

I find it interesting that Apple spends the last couple of years building a C/C++/ObjC/ObjC++ compiler, a standard library and a brand new debugger from scratch and still has the resources to add C99 support....yet, the largest software company in the world can't find a developer or two to implement C99 in their compiler.

I'll tell you my problem with your developer landscape....

My company develops for Macintosh and Windows. We write our engine in C++ and put an ObjC wrapper around it to implement the UI layer. The approach works great. There is no performance penalty for mixing in ObjC and C++. There are a few gotchas in dealing with exception handling in the legacy 32 bit environment, but not something that can't be handled with a little macro magic. I had one developer assigned into figuring out how to wrap a .NET GUI around our engine on Windows. We finally gave up on the concept. The extra complication in having to intermingle native and managed code was too much of a hassle....and I read that it cost 70 cycles or so every time you wanted to cross the native/managed boundary. I have no idea why your guys thought it was a great idea to run desktop code on a virtual machine. I could deal with writing C# code, but that stupid VM was the killer. I wasn't going to invest weeks and months of engineering time into a project only to find that it was dog slow due to that VM. If you want me to invest in developing for .NET for my desktop apps, then you will need to dump the VM and run code on the native processor just like Apple does.

I'll finish off by stating that cross platform code is very important to me. You can keep my compiler business going forward by going out of your way to be code-compatible with gcc. Here is one example....

I had to add this ifdef to support VC++ because you don't make size_t and ssize_t separate types from the other integer types like gcc does. Now, I'm sure there is some ambiguity in the c++ standard you'll cite in response. My answer is that I'm not really interested in ambiguities in the C++ standard. I want my code to build on both compilers without me having to stick conditional compile statements all over the place. So, if there is an ambiguity, make it a point to align yourself with gcc.

Also, implement full support for exception specifiers. They are a feature of the language. I think they are useful. I use them religiously. I get rewarded with a boatload of warning messages telling me you don't support them. That doesn't amuse me.

you could also make your #pragma's more compatible with gcc. that would be a big help. Make your compiler and standard libraries as friendly to unix-originated code as possible.Also, would it kill you to supply the appropriate typedefs for uint32_t and such? Even if you don't fully support c99, you could add in useful standard typedefs. Ignore this statement if they have been added to VS2010. I haven't checked since VS2008.that's my feedback.-James

Why is "interop" always mentioned when talking about C++/CLI? What about straight developing? I can't stand having to remember language quirks, so I prefer to stick with C++ and C++/CLI lets me do that and still write managed code. The thing that stinks, though, is all of the problems with C++/CLI support (wizards, web service debugger, etc.).

We will continue to provide high quality C++ content on Channel 9. I'd imagine, many of you have clicke on our C++ tag. As Boris says, you will see much more native content on 9 in the near future. Stay tuned!

You can post what (and who) you want to see on 9 by sending us mail from the contact form. We will do our best to give you the content you want to see. We have a strong relationship with the C++ team and they are great partners! I look forward to spending much more time in Building 41.

At work - I'm using VS2010 Premium - and day in, day out - the intellisense causes the IDE to bomb which makes your heart skip a beat when you were on a code run writing something... (using C#/EF/MVC and js/jquery).

@Boris Jabes [MSFT]: In your post on Dec 05, 2010 at 9:17 PM, you asked for the thread on Connect where the C++/CLI Intellisense issue was marked as "By Design". That thread is at https://connect.microsoft.com/VisualStudio/feedback/details/501921/. As I understand it, once an issue is marked as closed for any reason, nobody at Microsoft (including the Connect people) pays any more attention to it, regardless of number of upvotes, comments, etc. Just so you know, this is currently the highest voted "Closed" item that has not been fixed or marked as "External" - in other words, it's the most important issue that looks like it's being ignored.

Microsoft, I am a fan of Visual Studio 2010 for managed development in C#. I am really disappointed at it when it comes to C++. For one, you do not have C++/CLI intellisense which is a terrible move. I understand that you are trying to rectify this problem ASAP so I won't stress this detail. Second, I just don't know why I would choose to develop GUIs/Winforms Applications in C++/CLI instead of Embarcadero C++ Builder. C++ Builder allows me to easily write native Windows applications - no .NET framework required - that work out of the box. I can design them rapidly as well - drag n' drop controls - that mimick the way C++/CLI is done without the .NET bloatware. Even though .NET is becoming more popular (is preinstalled by default on more computers nowadays), I still think an enhanced way to develop native Windows GUI applications is necessary. I agree with freefly, the resource designer does need to be updated. In my honest opinion, I think the whole "Visual C++" needs to be revamped to be more up-to-par to C++ Builder. Personally, I think you guys should have bought C++ Builder when Borland was going out of business :).

" this is a piece of feedback we are actively listening to"It doesn't look like you are listening to the feedback at all more like ignoring it by prioritizing other language's like C# above C++. Like C++ would be a second citizen. Please get your priorities straight.

It doesn't really matter what you say now since the thing that matters is the result ( the released products ).

We have all heard what internal people have told us before but when push came to shove the end result didn't have nearly anything of that those internal people told us. ( Not really chocking but still not nice to be lied to either. Is honesty so hard ? )

ATL, C++/CLI, COM+, DirectX, IIS (Plugins), MFC, Win32 (Drivers, Services), Automation, Databases, WinForms/C# Interop with marshalled C++, Surface/Tasklist, Profiling, Debugging (Command-Line & VS), etc. There's always things to talk about, and you can spice them up with talks about C++0x, how it would fit in, and correlaries/usages of foss/public frameworks/solutions (Boost, Allegro) with VS. A mix of light, heavy, and supremo/complicated videos for all stripes of colour would be nice.

Couldn't agree with ddebug more. When I want RAD and Performance I use Delphi or Builder. Why ms can't build a tool to do this with native C++ is beyond me. C# is great for web apps and some things but I would not use it for performance reasons. And why use C++ in VS2010 when you can use Delphi or Builder? Make Visual C++ a true RAD tool for those that want to use it that way.

Hi everybody! Videos are awesome! You should make a video about parallel programming (libraries <thread> and <future>, i ve seen videos about ConcRT)... We use them now on the college.And maybe video about Intel parallel studio 2011. Great studio ! :)