Description

Visual Studio 2012 RTM'd recently and MSDN subscribers are now writing code in the latest iteration of VS! C++ developers will be pleased with the improvements in VC11. From the compiler to libraries to IDE features, VC++ in VS 2012 represents the best version of VC++ to date, chalk full of new features and modern capabilities.

Now that VC11 has shipped, what's next? What are some of the things the VC team are working on? What's the plan for shipping new features faster?

The Discussion

Hakime

At 20:26

"yes it's running on LLVM..."

I don't really understand what you mean by that. Objective C does not "run on" anything whatsoever, it's a totally native language and hence gets compiled to native code. I think your are getting wrong what LLVM is or you probably got confused by what it originally meant. I think the confusion comes from the old LLVM acronym. The acronym of LLVM was once for "Low Level Virtual Machine" but it really didn't describe properly what LLVM is. The acronym was abandoned already a while ago now and LLVM does not stand for anything. It's just usually called "The LLVM Project". Surely, LLVM can be used to JIT compile code for a given lamguage but Objective C being solely native, LLVM compiles natively Objective C.

@Hakime: This is true (LLVM is the compiler infrastructure (front end and back end...)). That said, the point was that Obj-C is a dynamic native programming language and the machine code LLVM produces (or LLVM GCC) is managed by a runtime infrastructure. Sorry for mincing words/concepts in the quoted statement you shared... I'm well aware that LLVM is a compiler...

The Objective-C language defers as many decisions as it can from compile time and link time to runtime. Whenever possible, it dynamically performs operations such as creating objects and determining what method to invoke. Therefore, the language requires not just a compiler, but also a runtime system to execute the compiled code. The runtime system acts as a kind of operating system for the Objective-C language; it's what makes the language work. Typically, however, you don't need to interact with the runtime directly.

Thank you for another Going Native episode, along with STL's C++ series' are now the BEST and most enjoyable videos on C9 to me since Going Deep isnt exactly interesting lately focusing only on Async/Rx with a lack of Erik/Jim Radigan.

@Hakime:LLVM/Clang uses a runtime ... http://compiler-rt.llvm.org/ learn and weep ALL native program code other than OS Kernel code specifically developed to be used inside the kernel uses a "runtime", and even then, since I don't have access to Windows kernel code it probably also creates it's own "runtime" at its very core, but it's all self-contained and doesn't have any external dependencies to classify the kernel's core as a "runtime".

DevDiv: The closer you stick to implementing C++11 to it's official specification, the better you will be. And PLEASE focus on the CORE LANGUAGE before you spiff it up with the flashy libraries you mentioned. I'll love seeing it complete to the best of Microsoft's ability and finally once again be the best compiler available from day's long past.

And I'm going to say... I actually dislike the way AMP was implemented... It's results are impressive but the way you focus on array_view's just feels... bad... and yes OpenCL's Warp focused structure feels bad too

DevDiv: the closer you stick in using C++ in the IDE, the better will be for us VS IDE users. Since the adoption of .NET with VS2010, the IDE does have performance problems.

C# is a very good tool if you want to optimize for programmer's productivity (I enjoyed using it with WinForms to build some database front-ends), but for projects like VS IDE you have to go native and use optimized C++ to offer a quality experience for the UI: fast start-up times, snappy UI also for large solutions, etc.

In Microsoft you have stellar C++ devs (just as an example: STL is famous here for his quality lessons): please make some of them at work for the VS IDE.

(Or in the meantime you may make it possible to use the new improved C++11 compiler and libraries with older faster IDEs like VS2005/2008.)

@Charles: I believe the exact same can be told about C/C++: the language requires not just a compiler, but also a runtime system to execute the compiled code, it is just called the C runtime. Possibility to link the runtime into the executable is just a slight difference. So by your logic, VC11 generated code is managed as well, because of CRT..

@Lrdx: no, this can't be said about C/C++. CRT actually stands for the C Run-Time Library. It's just an implementation of the C standard library. It does not execute your code. In fact you can generate C/C++ executables without linking to the CRT. Then you just have the core language, but not the standard library.

@Lrdx_or_anyone_for_that_matter why would you want to discuss such issues with charles? He "ain't" programmer, he doesn't have necessary knowledge. All he does is those silly "good for nothing" videos.

@Lrdx: new and delete are implemented using HeapAlloc and HeapFree, their implementation is not part of the core language after all, they're actually functions. You're able to use the whole WinAPI without any CRTs - so yeah, implement your own new/delete and there you go.

Try to distinguish between a "runtime" and a "runtime library". Not the same thing.

@Kris: Well duuuh! If you write an own runtime, you don't need any runtime library. But you still need something. If you don't write, you just use one supplied with the compiler, and that won't make your language of choice (let it be Obj-C, C++ or anything) 'managed'.