CppCast - Visual Studio 2017 for C++ Developers

Episode Date: March 7, 2017

Rob and Jason are joined by Daniel Moth to talk about the new C++ features of Visual Studio 2017. Daniel Moth joined Microsoft in the UK in 2006, before transitioning to Redmond in 2008 to wor...k as a Program Manager on Visual Studio, which is where he is still working today. Before Microsoft he worked as a software developer in the industry for almost a decade, most of that time building mobile apps. News The C++17 Lands Learn C++ Concepts with Visual Studio and the WSL Partial Ordering: An enigma wrapped inside of a riddle, wherein all compilers agree to be wrong Daniel Moth @danielmoth Links Visual Studio 2017 for C++ Developers - you will love it Top 7 things to be excited about as a C++ developer in Visual Studio 2017 CppCon 2016: Carroll & Moth "Latest and Greatest from the visual Studio Family for C++ Developers" Visual C++ Team Blog Sponsor Incredibuild JetBrains

Transcript
Discussion (0)
Starting point is 00:00:00 This episode of CppCast is sponsored by Incredibuild. Accelerate your C++ build by up to 30 times faster directly from within Visual Studio 2017. Just make sure to check the Incredibuild box in the C++ Workload VS 2017 setup. And by JetBrains, maker of intelligent development tools to simplify your challenging tasks and automate the routine ones. JetBrains is offering a 25% discount for an individual license on the C++ tool of your choice, CLion, ReSharper, C++, or AppCode. Use the coupon code JETBRAINS for CppCast during checkout at JetBrains.com. Episode 92 of CppCast with guest Daniel Moth recorded March 1st, 2017.
Starting point is 00:01:01 In this episode, we discuss the updated C++ Lands map. Then we talk to Microsoft Program Manager Daniel Moth. Daniel tells us all about the new features for C++ developers by C++ developers. I'm your host, Rob Irving, joined by my co-host, Jason Turner. Jason, how are you doing today? Pretty good, Rob. How about you? Doing good. Got a bit of a storm over here in North Carolina, so hopefully power doesn't go out during the show. Or your computer blow up from a direct strike or something. Yeah, that would not be fun. Our internet wires go down. So, you know, fingers crossed nothing happens.
Starting point is 00:02:03 Any news of you? I'm sure I'll be fine. Well, I guess if you don't mind, if I mention that I just had my one-year anniversary of doing C++ Weekly, which was exciting. 52 episodes? 52 episodes straight. Awesome. That's very good. You're much better than we are.
Starting point is 00:02:21 Okay. Well, at the time of our episode, I'd like to read a piece of feedback. This week we got a tweet from the Sweden C++ I guess it's their community or user group And they wrote How can a weekend start better than with an Interesting C++ podcast Bjorn Fahler at this week's CppCast
Starting point is 00:02:39 Thank you for the kind words Sweden C++ developers And We will make sure to get you in touch With JetBrains for the kind words, Sweden C++ developers. And we will make sure to get you in touch with JetBrains for the giveaway. Maybe you can raffle that off at the next Sweden C++ user group. That'd be cool.
Starting point is 00:02:53 So we'd love to hear your thoughts about the show as well. You can always reach out to us on Facebook, Twitter, or email us at feedback at cppcast.com. And don't forget to leave us a review on iTunes. Joining us today is Danieliel moth daniel joined microsoft in the uk in 2006 before transitioning to redmond in 2008 to work as a program manager on visual studio which is where he is still working today for microsoft he worked
Starting point is 00:03:17 as a software developer in the industry for almost a decade most of that time building mobile apps daniel welcome to the show, thank you for having me. So I'm looking at the timeline here, and it says you did mobile development for a decade before 2006. So I'm wondering, what were you doing, Palm development? No, it was more on the Windows CE side of things. So I've always been in kind of the Microsoft ecosystem using Visual Studio from the very early days.
Starting point is 00:03:43 So when Visual Studio.NET 2002 had first come out, there was also a.NET Compact Framework preview at the time, and I was working at what's now a Honeywell company, and we're doing embedded devices. So it was a Windows CE custom display panel board, and I was writing the software for it. It was basically something you put on the wall, Heathrow and
Starting point is 00:04:08 places like that to monitor an HVAC system, heat and ventilation and access control. And the only reason people would interact with that hardware device would be to use the app that I had there. So as part of that I was also doing other Pocket PC kind of apps and
Starting point is 00:04:24 things like that. before that um i'm gonna disappoint you guys my background isn't strong in the c++ world actually before that it was more like vb3 and vb6 and stuff like that doing a com development before uh the dotnet compact framework and mobile and embedded came along so that's kind of like the beginning of of my career if you like How many of us got our start with VB6 professionally? It's probably a few. And we were pushing the limits on that.
Starting point is 00:04:52 We're doing like the comm development and trying to drop down to IAN nodes and trying to query the interfaces to do extreme stuff, all because the team, you know, the larger team was just more comfortable with Visual Basic. but we were bringing consultants in and they were saying, you guys really
Starting point is 00:05:08 need to be using C++ here, you know that, right? We're like, yeah, yeah, yeah, but we'll just get by just a little bit more. It was mostly blind ActiveX servers and components with no UI down at the comms layer, all in VB. Yeah, that's the background.
Starting point is 00:05:24 I also got my start doing some Windows Mobile and Pocket PC development. I'll be honest, I did not miss those days. Well, you know, I don't know when you were doing that, but actually I co-authored the mobile development handbook on mobile development. So, you know, if you're struggling with that, you should have got a copy of my book.
Starting point is 00:05:43 That would have helped. I'm sure it would have. Okay, Daniel, well, we got a couple news articles to go through. Feel free to jump in, comment on any of these, and then we'll start talking to you about Visual Studio 2017, okay? All right. Okay, so this first one is the C++17 lands map. And obviously, we've talked about the old version of the C++ map. And I'm trying to remember the author of this.
Starting point is 00:06:11 Is it Elena, Jason? Do you remember? Yes, that sounds right. But let's double check. It actually says on the blog, Alina. Yeah. Okay. And yeah, she went ahead and she made a C++17 version of the map.
Starting point is 00:06:24 It's beautiful. It's got all new features in it from the last few modern C++ releases. And the exciting thing is, it's not yet, but she said she's going to have posters available. So if you want to get an official poster and hang it up in your office, you'll be able to do that. Really makes me wish I had an office. Just hanging it out and hang it up in your office you'll be able to do that really makes me wish i had an office yeah exactly right behind you there's all that white space uh yeah i don't think the guest room would be where my wife would want the c++ 17 poster right in the bedroom yeah yeah yeah one of my uh one of my colleagues saw this map, and they were saying how they like, you know, in the corner where it says Concepts Shipyard. Yeah.
Starting point is 00:07:12 And I think it used to be Shipwreck. So I think that's an improvement, right, from a shipwreck to shipyards. Yeah. That's what it sounds like. And Daniel, I think Alina actually is one of your colleagues. I believe she works on the Bing team at Microsoft. Oh, I didn't know that. There's only 45,000 or whatever of us here in Redmond, but that's good to know.
Starting point is 00:07:35 Yeah. Okay. Next one is an article from your blog, Daniel, the Visual C++ blog. And this one is about learning C++ concepts with Visual Studio and the WSL. And you can comment more on this. You probably know more about it than I do. But I thought it was pretty cool. Basically, concepts isn't available in MSVC yet.
Starting point is 00:07:55 But if you want to try it out, but you're a Visual Studio developer, there's really good instructions on how to test it out using GCC and the Windows subsystem on Linux? Linux subsystem on Windows. Yeah, I got that backwards. Yeah, yeah, this was Andrew Pardo on my team
Starting point is 00:08:12 came up with the idea of writing this post. And yeah, a lot of people from the past kind of associate Visual Studio with the Microsoft Visual C++ compiler. They kind of think of them together. When in reality, you can use absolutely any compiler that you like in Visual Studio. So in this example, he's using the GCC, and that's how he's able to get concepts.
Starting point is 00:08:34 So that means that if you're already a Visual Studio user and you're experimenting and learning all the other language features, hey, you can just switch and use this. The Windows subsystem for Linux just makes it easier to use GCC without having to have a separate remote Linux box. So Andrew has really good instructions on this blog post on how to go and set that up, if that is of interest,
Starting point is 00:08:56 until we obviously get content support in our compiler, which we absolutely will in time. Sure. I'm reading this, and I'm like, this is the world we live in now where it's considered at least normal or supported or something that we are expected that we can program on GCC through Visual Studio
Starting point is 00:09:15 on the Linux subsystem for Windows. Right. It's interesting times. I love it. It's going to take a while until it becomes normal. Like I know it's, you guys have been ramping up with the open source developments for quite a while now, but it still just seems so new to have this kind of unity between Microsoft and the Linux communities. Oh, yeah, I appreciate that.
Starting point is 00:09:37 For me, it is absolutely very normal at this point. You know, we're at CppCon. Last time, right now on my laptop, it has Microsoft Loves Linux stickers. We had those stickers at CppCon, and they were going like crazy. Everybody was coming like, is this real? And then we just take a sticker. And yeah, on the open source side, around the CppCon timeframe, I think it was GitHub that announced all their stats.
Starting point is 00:09:58 And Microsoft is the number one contributor on GitHub for open source projects. It is interesting times, and for many people it's like, wow, I knew, but for us internally, it is a change, but we're kind of more used to it, and we love it. It's a really good direction that we're on. This is probably a good time for
Starting point is 00:10:18 me to mention that I am hiring, so if people like what we're doing here at Microsoft, they can reach out to me and we can talk about it. Awesome. I'm sure there's someone listening. You're hiring for the compiler team or for Visual Studio, both? C++ team in general.
Starting point is 00:10:32 So I manage the C++ program managers. So if you've met any program manager on the C++ team, they report directly or indirectly to me. So I'm hiring for the right person that wants to improve the C++ experience that we offer to customers from Microsoft. Okay. Okay. And this next article is partial ordering an enigma wrapped inside of a riddle. Jason, I'm wondering what you thought about this article. It was pretty complex going through examples of overload resolution i have to be honest i got lost yeah i don't know about two-thirds of the way down like like i don't know i'm like if i was
Starting point is 00:11:14 writing code that was running into these issues maybe i should refactor i i am wondering you know if you get to the end of the article he basically puts forth one example and says what he thinks should happen according to the standard with overload resolution. But apparently all the compilers, MSVC, GCC, and Clang, all got it wrong, at least according to him. Right. And this is one of those times where I wish we had STL just available to call into and ask him what his opinion on that, because I'm sure he knows what's going on. I mean, for an issue like this, we might need someone who's even more of a language lawyer than STL. What were you going to say, Daniel? I was going to say STL's office is three offices down from where I am.
Starting point is 00:12:01 And Herb's office is just opposite and one more corridor kind of thing uh but you know as i was looking uh looking at this it seems like um i don't know isn't it a bit of a convoluted example to prove uh oh it is yeah yeah so i'm not sure uh what's right or not but yes that's something i would defer to someone that enjoys standardese. Yeah. Absolutely. But his ultimate conclusion that there are more cases where the standard could use clarifying examples, I totally agree with because I have run into these things and posted my own questions like we need a clarifying example here. Yeah. And one thing he points out is that to look at some of these rules, you're jumping back
Starting point is 00:12:42 and forth between different parts of the standard in order to figure out what should be happening. Yeah, that's not good. We ran into that discussion on Slack for how decal types of lambdas are deduced. And you're hitting three or four different parts of the standard at once. And just having one clarifying example would be nice. Yeah, and i think herb wouldn't disagree if you uh spoke to him about can we clarify more things in the standard
Starting point is 00:13:10 i don't know what he would say about this particular example that would be a good question for you guys to ask him the next time you have him on yeah right yeah definitely okay daniel so we are recording this a couple days before the big Visual Studio 2017 release. It's just right around the corner. And it looks like there are a lot of exciting updates for C++ developers. Where do you think we should start? We can start wherever you think would be more interesting to your listeners. I was actually writing the blog post that I'm going to publish next week on the launch day. And the title, the current title, is Visual Studio 2017 for C++ developers.
Starting point is 00:13:48 You will love it. So that's like the strong position that we're taking here. So we can start from where you install it, how you open projects, productivity, anything you want. Well, let's start with installing because that's kind of going to be
Starting point is 00:14:01 the first thing that developers encounter. I totally agree with Rob on that because 2015, if you're a C++ developer, it's kind of a pain. Yes, if you're a C++ developer, it can be a pain. It is a pain you only pay once, hopefully, when you install it. I also think it's a pain probably for other kinds of developers as well. So that is an area where in 2017, we invested heavily. And the first way this is going to manifest for folks is when they go and try and install 2017, they will encounter this new concept of workloads. So instead of having to pick components at the very coarse grains way, you'll have these options, for example, C++ desktop development, or C++ for Linux development, or C++ mobile development, C++ game development, and so on.
Starting point is 00:14:49 And there'll be web development for ASP.NET or something like that, Python. And people can just pick exactly the workload, the scenario, if you like, the target that they're interested in, and install only those bits. And that is really exciting because you're going to install it faster. For example, if you install our Linux development for C++ developers, that installs in under seven minutes on my machine. The desktop C++, which is the one that most people use, that one is more like 15, 16 minutes. I mean, these are times that are nothing like what it was before. So the speed is a great benefit for folks. But it's not just the speed. It's also what I call visual noise. So when you interact with the IDE, if you're not doing C
Starting point is 00:15:40 sharp, for example, you will not see C sharp anywhere. So those components are just not installed. So this isn't just a visual, hey, here's a new UI to pick things. This is actually a re-architecture, rewrite of the installer in terms of what it installs based on the one or more workloads that you pick, which also means the third benefit beyond speed and visual noise that your hard disk will thank you. It's going to be fewer bits there. And today with SSDs being smaller and things like that, that's even more of a reason to be thankful of that.
Starting point is 00:16:14 So yeah, clearer way for you to pick what you want, speed improvement, size improvement, and less visual noise. You only see the things you care about. So I think that's really exciting just from the get-go. Yeah, absolutely. But if you are doing a mixed-language project like C++ and C Sharp, you're still going to get the kind of integration
Starting point is 00:16:33 that you would have had in the past? Absolutely. So you will go and pick your C++ desktop development, then you'll pick your C Sharp desktop development, you might pick your Python one as well, and then you'll get exactly the integration that you would get with the previous versions of Visual Studio,
Starting point is 00:16:51 except you've picked exactly what you wanted. Okay. Yeah, so you don't lose anything. Okay. And one other thing that I think you mentioned, I watched your CppCon video. Installing tool sets from previous compilers, is that something that's new to VS 2017?
Starting point is 00:17:09 Yeah, that's right. So one of the things, beyond the installation experience we just talked about, there's a whole other, if you like, theme of investments that we've been looking at. And that theme is what I'm calling a pain-free upgrade. Because always when you have new things, new shiny things in the next version of Visual Studio, I don't know about you guys, but especially when I was a customer outside of Microsoft, I would always be like, oh, drooling over the new productivity features in debugging and so on. But I always knew that came at the cost of upgrading my project, which inevitably might have some errors or warnings that I have to deal with.
Starting point is 00:17:47 And that's good because usually they make my code better. But you have to go through that pain, if you like, in order to get to the good stuff. So we have a theme of pain-free upgrade. And part of that, one of the things in there, is the thing you just mentioned, Rob, which is when you get the installer for Visual Studio 2017, you can also just check another box when you pick C++ desktop development, and now you get the Visual Studio 2015 toolset. So the compiler and library package that you have in 2015, which means that when you go and work on your project, you can pick in the project properties to use that toolset, and you don't have to change anything.
Starting point is 00:18:25 It's exactly the same compiler that you were using before and the set of libraries, but you get all the benefits of the IDE productivity aspect of things. So that's one option that people can exercise. That's a big one for me because I know where I work, we're still dependent on Visual Studio 2013 for a couple projects. Everything else we can build with 2015. So whenever a new developer starts, we need to tell them, go install 2013 first. That's not what you're going to use most of the time. Then you can install 2015.
Starting point is 00:18:54 So you're saying we don't have to do that anymore. We can just say install 2017 and check those two boxes to get the old tool sets too. Yeah, so just to make sure I'm completely honest there in this specific scenario, you mentioned 2013. So unfortunately, we weren't able, at least with this release, to get 2013 tool set in there. So we would hope that you can move to 2015 and then all you would need is 2017. So if you have projects that are still stuck on 2013, I would say two things. First, get in touch with us in case we can help
Starting point is 00:19:27 move those forward. We actually run labs where we have people like STL and the actual developers on our team do a Skype session and help people move their code forward. Usually it's dependent on third-party libraries, but we help with that
Starting point is 00:19:43 because we take that very seriously. We learn from that. You're getting the help of upgrading. We're getting the help of learning. Oh, that was the blocking issue. How can we document that better? How can we have better tooling? How can we avoid that in the future? So that's the first thing I would say. Then practically speaking, if you're stuck on that, you would need to do what you said today. You install 2013, then you go and install 2017, but then you can remain in 2017 and use the 2013 tool sets in your 2017 projects. It just means you were unable. Yeah, so you can still do that. But it means that you had to install the whole IDE for 2013, instead of just the tool set as we allow you with 2015.
Starting point is 00:20:22 Right. Now, I'm going to play devil's advocate for just a minute here. And are you guys concerned at all that you're going to create like a Windows XP kind of scenario where you'll have people on like the IDE for 2025, but still wanting to use the 2013 compiler? Yeah, so I love devil's advocate.
Starting point is 00:20:40 So please keep doing that. You know, that's my favorite kind of discussion to have. So that is always a risk. We are not, I should say, at this point with the data we have, we're not afraid of that for a few reasons. One is there's so much value in the compiler. We're investing in the compiler heavily. I know today we're talking about Visual Studio 2017, but our compiler gets a lot of investments
Starting point is 00:21:05 and investments across performance, both in the build throughput case and in the runtime performance of the generated code and with security and with conformance, which is our number one priority when it comes to our compiler. So if you're going to go and you're going to use the old tool set
Starting point is 00:21:23 and you're going to be stuck with that, if you like, you're choosing not to get all that value from the latest versions of the compiler. And if that is a choice you want to make, that is fine. You can stay with that. We just don't believe that is a choice you're going to make. We believe you will want to move to the latest compiler. And if you're not, then we're not doing part of our job.
Starting point is 00:21:42 Okay. I wanted to interrupt this discussion for just a moment to bring you a word from our sponsors. IncrediBuild dramatically reduces compilation and development times with unique process virtualization technology. The tech transforms your computer network into a virtual supercomputer
Starting point is 00:21:58 and lets each workstation use hundreds of vital cores across the network. Use IncrediBuild to accelerate much more than just C++ compilations, speed up your unit tests, run more development cycles, and scale your development to the cloud to unleash unreal speeds. Join more than 100,000 users to save hundreds of monthly developer hours
Starting point is 00:22:17 using existing hardware. IncrediBuild is already integrated into Visual Studio 2017. Just make sure to check the IncrediBuild box in the C++ workload in the Visual Studio 2017 setup. So we're going to focus mostly on the IDE stuff, but you did mention conformance there. So maybe we could quickly touch on what the status is of C++ conformance with the compiler being released. Absolutely. Like I said, and I'll say it again, our number one priority when it comes to the compiler is conformance.
Starting point is 00:22:48 So we've caught up a lot. We have talked about that at CppCon, our blog. I think you had guests from the C++ team that have talked about that at various points. We are still going to be catching up as we move forward. And once we catch up, we're going to stay caught up. So that's like a top-level statement. In terms of specifics, if you look at the new
Starting point is 00:23:10 compiler features that were introduced with C++ 11 and C++ 14, you will find in the release with Visual Studio 2017 that we have essentially completed that. So we're caught up for the features that were introduced with those two. Now there's a few
Starting point is 00:23:26 caveats for those that are paying very close attention. For example, things like two-phase name lookup, which is not in any of those. It's a C++ 98 kind of feature. That one is still not there with this release, but it will be later this year with updates to this release.
Starting point is 00:23:42 And someone could also split hairs on the constexpr support because we're doing that through the various library supports. So we cannot ever declare ourselves complete-complete. But as far as the big libraries, constexpr works there.
Starting point is 00:23:57 So we're considering that kind of done from that perspective. But in addition to 11 and 14 and the comment I made about the one remaining 98 feature, we have also implemented a bunch of C++ 17 features, and that's not even complete as a standard. So that's new if you compare us with historical statuses that we had previously. And our goal is this year with the updates to Visual Studio, to be up, you know,
Starting point is 00:24:27 complete on 17 as well, both on the compiler and on the library side. So I'm really happy with how we're progressing towards the goal of conformance. And I hope that the team, you know, sticks with it and will deliver on the goal of later this year being up to date once 17 is finalized as well. So you mentioned compiler updates would be coming out. Are these going to be like service packs or like kind of rolling updates or what should we look forward to? That's a good point, especially for folks that haven't been following closely what we've been doing recently.
Starting point is 00:24:57 And I have a slide on this at CppCon where we basically release quarterly updates. I don't think it's a commitment, but if you look at the pattern, that's really what's going on. So we release quarterly updates to Visual Studio, and in those quarterly updates, we actually update the compiler bits as well.
Starting point is 00:25:19 And we've got options on how to do that every time. We could create another tool set. So it's a choice. You can say, I want to stick with the RTM version or I want to have the update one or whatever it's going to be called version. Or we can just force you to move forward. Hey, now you're going to take the latest. So we have a choice there on what we do.
Starting point is 00:25:37 So yes, you'll be getting compiler updates at least quarterly through the Visual Studio mechanism. And also, I don't know how many of your listeners are aware, but we have the, you can just get the compiler if you want with what we call the Builds queue, the Build tools. We've blogged about that in the past. So you can just that package if you don't want Visual Studio. And furthermore, Andrew has blogged about this, is the Nougat feed. So we have a feed where we put essentially daily bits up there.
Starting point is 00:26:04 Of course, there's no support for those. But if you want to be trying, you know, hot off the press, the latest version of the compiler with anything it has in it and report bugs back to us, you can do that. So yes, we're releasing frequently on all these different vehicles, whether it's through Visual Studio, or through the build tools SKU, which only has the compiler, or through NuGet, which is a very frequent release mechanism. So as a library author, what would be the mechanism
Starting point is 00:26:32 that I would communicate to the user of my library? No, if you want to use my library, you must have the third quarter 2017 compiler release and effectively be able to make an error at compile time or something and communicate that back to the user you would have a dependency on the you would have to refer to the version number that that you've taken a dependency on uh if you want it however that's a good i'm glad you mentioned that because remember um earlier when rob asked about the tool sets
Starting point is 00:26:59 i said we have a theme of investments we've done to ease people moving to the latest bits. Another item that is pertinent to the point you just made is the binary compatibility that we now have for the first time between Visual Studio 2015 bits and Visual Studio 2017 bits. So that means you can actually use these two different compilers and you can link to libraries built from them and you will not have break and change. We've never done that before. So this is between 2015 and 2017 and obviously anything that we do until we are forced to break binary
Starting point is 00:27:35 compatibility again. There's a few things that we'd like to do and they would require breaking binary compatibility and we're shelving them and we're waiting to do them so we can do them all in one go at some point in the future. But for now, that is huge. You can actually mix and match binaries from the two different compilers.
Starting point is 00:27:53 Okay. Very cool. Yeah, so the CRT and STL and so on, we've made sure that binary compatibility in the runtime exists. Awesome. Let's talk about build throughput a little bit. You mentioned that a moment ago. What kind of performance are we seeing there? So with build throughput, we focused mostly, I say mostly because it's improved across the board, but we focus mostly in what we call the inner loop, the edit debug cycle. And we usually refer to that as the edit compile debug cycle. But if you think about
Starting point is 00:28:26 the intent of us when we write that code, you don't want to build, you just want to edit, and you just want to go test that code. The fact that you have to build is tax. You have to wait for the build in order to go and test your code or debug it. And what we found is that for many people, what
Starting point is 00:28:41 dominates that build time where you're just waiting in order to go test the code is the linker. Because you just made a small edit here and now you're waiting for the linker. So in Visual Studio 2015 Update 3, you can go and use the linker option FastLink. I don't know if you guys have used that. So slash FastLink. And that will give you, in some cases that we've measured, two to four times faster linking, which is extremely useful during that inner loop. So what we've done with Visual Studio 2017 is taken that two to four X improvements and made it like 20, 30% faster. So made it even better. And we've turned it on by default.
Starting point is 00:29:21 So you don't have to worry about going and finding that flag and turning it on. So people that move to 2017 inevitably will just notice that increased build throughput when they go and edit something, hit a 5, in order to go and test it or debug it. So that's the biggest thing we've done in that area. Okay. I was just going to ask, but you kind of pre-answered the question, but I'm still curious. You said it's enabled by default in 2017, but it wasn't in update three of 2015. I was wondering if there's any downsides to the fast linking. Yeah, that's a good point. So there is the downside overall. When you do the fast linking,
Starting point is 00:30:01 you don't get the actual full PDB, the full debugging experience that you would if you were to give the bits to someone else. So if you had them on your machine and you were to give them to Rob for him to debug, he'd be missing things. So for that scenario, what you had to do was to go and run a separate tool from the command line when you wanted that capability in order to generate the full debug information when you passed those binaries to someone else. What we've done with 2017 is we've integrated that capability in Visual Studio itself. And there's various prompts to help you and guide you that, hey, if you're doing more than just debugging on this one machine, and you're going to be trying to ship these
Starting point is 00:30:40 things elsewhere, and when you ship them elsewhere, you expect those people to be able to have full debug. Then, hey, go ahead and take this path instead so you can generate the right information. Okay, makes sense. Any other big improvements with throughput? We've done improvements in the front end as well,
Starting point is 00:31:00 but the one I mentioned is really the biggest on the front. Okay. And how about uh the ide any new productivity features for super plus developers i'm guessing this is a big area of improvement it is and it's the one that um uh is the one that typically demos very well right so it's kind of hard to talk about it over the over the podcast but what i would say um before i can mention a few productivity enhancements in there, but we're just talking about built throughput and what's new in the AD. If you think about
Starting point is 00:31:30 productivity, we wanted things to be faster for us, whether it's new features that we use to do things faster than what we did before. So performance itself can be thought of as productivity in that regard. So whether you think of performance itself as productivity or as its own thing, either way, that's one of the things that we've done in the IDE. We've really focused on performance. So build throughput is one way you will feel that because you will feel that as you're using the IDE and you're building. But another area is solution load.
Starting point is 00:31:58 So we have, for example, what is it, like four times faster loading some really large solutions like the chromium which has i don't know almost 2 000 projects or something in it so we've really focused on on on that uh on that performance of loading solutions and there's a couple of ways we've done that one is just pure improvements in the code and other is with deferred loading of projects uh so that you don't have to load everything asynchronously at the beginning. You can just load the main project and then as you go and browse,
Starting point is 00:32:28 if you need to browse to another project, it kind of loads later. So there's some tricks like that, but there's also like real performance improvements there. Then another performance improvement would be with IntelliSense. So hopefully everybody that's using Visual Studio for a while uses pre-compiled headers
Starting point is 00:32:43 because that really helps both the compiler and the language service, which you can think of as another compiler, in having everything be responsive for you. But if you haven't set them up for whatever reason, then we have this capability not in the compiler, but in the language service
Starting point is 00:33:00 in design mode to essentially create something like a PCH in memory for the translation units, the files that you've just had open. So you'll get some preloading and caching there, so you don't have as many delays as you go and add a function. Instead of waiting too long for that to appear in IntelliSense or something like that, it'll just be faster when you get it there.
Starting point is 00:33:21 So that's another area where you're going to feel improvements in the performance. And other areas when you're debugging the. So that's another area where you're going to feel improvements in the performance. And other areas with when you're debugging the actual virtual memory being used. So we've done radical improvements there to bring that down by 50% in some cases. We had one pathological case where it would actually crash out of memory when you're debugging some Unreal projects.
Starting point is 00:33:42 And now that is very comfortable. So that's not my bar. Usually, hey, we used to crash, now we don't, but it just shows the improvements. And I've kind of ruffled through those very quickly, but when you put them together, the build throughput when you're five and the memory consumption and the IntelliSense aspect of it
Starting point is 00:33:59 and the solution loading, as well with startup and shutdown of VS, you really feel the performance difference. And that is a way your productivity will increase with Visual Studio. That's one way. You've mentioned all these IDE improvements and IntelliSense and everything. And I saw a comment from someone, I don't remember, I think it might have been on Twitter, about using the Clang front-end with Visual Studio. And now you've got all these language features that the Visual Studio compiler doesn't support
Starting point is 00:34:31 and the IDE didn't support. So it was, you know, like C++17 kind of features that the IDE wasn't supporting. And I'm wondering if the IDE is staying ahead of the compiler, if you will, so that it's matching the claim front end? Or do you have any plan for that? So, like I said, and like we all know, you can use any compiler you like with Visual Studio.
Starting point is 00:34:52 But you're right, you're using the compiler, that's fine. But how about the IntelliSense, for example, the language service in Visual Studio? Well, that, as you probably know, is powered by EDG, yet another compiler. So it is up to... I didn't know that, as you probably know, is powered by EDG, yet another compiler. So it is up to... I didn't know that, actually. No. Yes, so our language service is yet another compiler.
Starting point is 00:35:11 It's EDG. So if EDG has support for that language feature, and we enable it, because you have all these switches that you can pass to it, then absolutely it's going to work. That is how, if you're familiar with the Clang C2 project that we experimented and released in the last version of Visual Studio,
Starting point is 00:35:30 where we took the Clang front end with our own back end and kind of stitched them together, so you get excellent debugging while still using Clang. Well, the way that you get IntelliSense there is by us turning ADG into Clang mode, and essentially that's how you get the IntelliSense. So the question, hey, will we make our IntelliSense and language service overall in the ADE
Starting point is 00:35:52 support a language feature that we don't have in our compiler, but maybe in another compiler you're using? The answer is, well, if EDG supports it, step one. And step two, we decide to enable it, which would mean testing it, then yes, it would. So there's no principle against that. Okay. So is EDG a compiler from Microsoft?
Starting point is 00:36:13 No, EDG is a compiler out there in the industry. For example, if you're familiar with CUDA C, they're based on EDG, the CUDA compiler. I believe Intel also is based on that front end. So, yeah. Interesting. Now you're making me wonder if I'm not pronouncing it right or something.
Starting point is 00:36:35 So I'm just going to search. No, now that I look it up, I have seen this before, the Edison Design Group compiler. Right. I've heard people refer to it as Edge. Yeah. EDG is how I say it.
Starting point is 00:36:48 So, yeah. I have seen it, but I've never tried it. Right. So that thing is what powers our intelligence. Okay. Okay. What else can we talk about, Daniel? We talked about installation workloads, conformance, build throughput.
Starting point is 00:37:02 What else is big? So I think I should go back to this. There is, you know, you asked me two questions there. What else should we talk about and what else is big? So I think I should go back to this. There is, you know, you asked me two questions there. What else should we talk about and what else is big? So there's something really big in my opinion. But first, I think I want to answer fully the question you asked me earlier on productivity. So I almost deflected that to talk about performance just because we're talking about build throughput at the time. And I thought that's a good package of things to talk about.
Starting point is 00:37:24 But on the productivity side, again, these things demo better. But for the listeners, I'm just going to throw out some things, and they can go and look at them on Channel 9 videos or on our blog that link to them. So we have improved find all references. So that's something that people use a lot. We have revamped that experience completely in terms of what you can do in the UI for grouping
Starting point is 00:37:45 and filtering in terms of loading results faster and more. Again, it's easier to see these things and describe them, so I'm not going to bore you with a description on them. Another area that is really big on navigation, which is important when you're navigating large code bases, whether debugging or trying to add some feature, is what used to be called navigate to is now go to. And you can go and very easily navigate to types or variables or whatever you want, symbols. You can just pick what type of thing you're navigating to, including line numbers if that's what you want to do.
Starting point is 00:38:19 So it's a unified, again, experience with better filtering, better ease of use, faster at your fingertips. So if you search for GoTo, you'll find information on that. We also have a new predictive intelligence. So when you go and type something and the thing that you want isn't coming up because it's such a long list, we now kind of smartly filter that to what we think would be what you want. If you're doing an assignment to an int, why should we show you a variable
Starting point is 00:38:51 that matches what you're typing, but we know it's a double? So we kind of like be smarter in what we're doing there. We call that predictive intelligence and smart filtering. So those are terms you could use to see that in action.
Starting point is 00:39:03 On the debugger side, we have a new run-to-click feature, which is a UI enhancement of something you could do from the context menu. But every time we demo this, people think it's a new feature in Visual Studio because no one has discovered, you know, that really long context menu, what exists. But it allows you to quickly run when you're debugging from one point to the other without setting the breakpoint in between. The run to cursor is what the context menu was known as.
Starting point is 00:39:30 And then also in the debugging space, we have improvements on the exception handling. So, you know, when you hit an exception and you get a model dialogue and you look at what it says, but then you have to get rid of it to go back to your code, but then you want to see it again because it has information and you like all of that mess. So now there is... Yes. Painful, I know. So by the way, as an aside, before I moved to manage the C++ time, I used to
Starting point is 00:39:54 manage the diagnostics team, debugger profilers, IntelliTrace, and so on. So this was a pet peeve of mine then and now we're finally shipping it, so I'm happy about it. So what we've improved is instead of a model dialog, you get a non-model dialog. It's a little pop-up right on the line, which you can dismiss if you want, but very easy to get back by clicking on that line.
Starting point is 00:40:12 And it has more useful information in there. You can easily turn on or off exceptions from it. So that's a nice improved experience. And finally on the exceptions, you know, when you get first chance exceptions, exceptions that were thrown, that will be caught later on. And you're trying to find the root of where they appear, not just where you catch them. Well, in some cases, you just want to filter out exceptions that come from certain modules. And you were never able to do that before. And now we have conditions on exceptions, just like you have conditional breakpoints.
Starting point is 00:40:44 So you can go and say, yeah, only show me exceptions that don't come from this module before and now we have conditions on exceptions just like you have conditional breakpoints so you can go and say yeah only show me exceptions that don't come from this module or only from that module and so on so all of these again these are easier to see but on when we launch visual studio i'm going to be posting the blog posts i've been working on and have links to other blog posts and videos on all of these features that's the best way for you and your listeners to go look at them. But already kind of a rattled out a whole bunch of new productivity improvements that we have there. Okay, so we'll definitely put the link to that blog post in the show notes once we get it. And there's also your CppCon video where you and Steve Carroll went over a lot of those features, right?
Starting point is 00:41:22 Right. And actually, Steve and I will be doing another double show on the live stream on the launch day next Tuesday, and that's going to be recorded. So there'll be even a more recent video, not as long as the CppCon. So we could put both of those videos up if that's something that we think would be useful to folks. Okay. I think there's one more thing I remember from that YouTube video that you didn't mention. Dot to pointer, right? Oh, yeah, yeah, exactly. Yeah. There's so many productivity features. You know, the session I used to do at the various conferences was the tips and tricks,
Starting point is 00:41:55 debugger tips and tricks. And most of them people just didn't know about. You know, I joke around here sometimes, we don't need to invest in productivity. We just need to say, hey, we add the new feature and it's an old feature, and there's people who just think it's new because you just don't know. There's so much in there. Again, when I was on the diagnostics team, one of the most often requested features was is there a way to put a breakpoint and somehow
Starting point is 00:42:16 stop only under a certain condition? And it's like, yes, it's called conditional breakpoints. We've had that forever. And it was because of those requests that in the last release in VS 2015, we went and added a UI pop-up when you set a breakpoint to help people find that, hey, you can configure these things.
Starting point is 00:42:32 So anyway, I'm diverting. So you've talked a lot about how much easier it is to install the compiler. We've got the standalone compiler, we've got the NuGet packages, right? I'm in a situation where the Visual Studio compiler actually works perfectly fine under Wine on Linux.
Starting point is 00:42:52 The problem is getting it installed in Wine under Linux. So if there's any chance that when you push out these compiler packages, you could also just have like a zip file download that I don't have to run an executable or put it through NuGet or something. That would be amazing. That's actually a good point. If you actually email me about that, I see no reason why we couldn't do that. I say email me because I'm going to forget if I don't have this written down somewhere. But the NuGet package, I believe that should serve your purpose.
Starting point is 00:43:22 Because you can go to that feed, and you will get essentially a zip file there like you just unpack it so if you email me I can send you instructions for the Nougat thing if you don't try it on your own and I think that might just work for you and if it doesn't that's definitely a scenario we could enable
Starting point is 00:43:39 I didn't know that you could consider getting that without actually using Nougat to get it I think you can rename a Nougat file NuGet to get it. Yes, you can. I think you can rename a NuGet file into a zip and just extract it, right? I'm not sure on the specifics. I don't want to lie to you. But you can definitely consume the NuGet feed differently. Okay.
Starting point is 00:43:56 Yeah, so ping me on that. And then if you think that's useful, once we get it sorted, you can blog about it or share it with whoever else might be interested too. All right, thanks. Okay, Daniel, anything else we're missing? Have we even gone over yet? Yes. So there's a few things. So one is on that theme earlier, I said we have this theme of investments of pain-free upgrade, right?
Starting point is 00:44:22 So we talked about picking a tool set that comes with it. We talked about the binary compatibility, which is huge. And we also have VC package. So I don't know if you guys have talked about that in the past on your show. That would be a good one to go deep with a couple of devs and PMs on our team here. But in a nutshell, that's the C++ package manager on Windows that we released last year. And this has a whole bunch of libraries in it already. So you get the source there, and then you can build based on your architecture choice and so on.
Starting point is 00:44:53 So one of the things that we've done there is that integrates with Visual Studio if you want. And so if you've been using that, if someone uses that with Visual Studio 2015, when you move to 2017, because you're integrated with VC Package, it will automatically go and get the right version of all the libraries that you've been using, if it knows about them, and automatically get the 2017 version of them. So that is another very easy way for you to move forward. So if people are in 2015 or can get to 2015, going to 2017 is a piece of cake because of these three reasons that we mentioned. So that's another one.
Starting point is 00:45:31 And if you haven't done VC Package, let me know and we can get a couple of guests. It's really exciting what the team has done there. Yeah, I think we've covered some of the blog articles when it first was announced, but we haven't gone deep on it. Yeah, Robert's on our team, Dev and Eric, the PM, one of them or both of them could definitely do a show with you. So then, kind of this stuff that we talked about is about pain-free
Starting point is 00:45:53 upgrades. So the assumption there is you're already using Visual Studio. And, you know, that is a safe assumption in most cases. If I look at the stats, we kind of, you know, are the leading ID out there. But I know you won't believe this. Some people don't use Visual Studio. What? Yeah, it's crazy.
Starting point is 00:46:09 It makes no sense. The people we talk to, we do believe it. I mean, if you're on Windows and you're not using Visual Studio, I don't get it. I mean, it's free, the community edition under certain circumstances, but it's there for you. But yes, we do recognize that some of these people exist.
Starting point is 00:46:26 And we like those people as well, because our mission is to make every C++ developer happy on the planet, especially those that are on Windows. So one of the things that we focused on was what we call Open Folder. So I don't know if you guys have talked about that in the past on your show. A little bit. Yeah, so the idea there is that in order to get into Visual Studio as easy as we've made installation and so on, you still, with 2015, would have to go and create a project, an MSBuild project essentially,
Starting point is 00:46:57 a Visual Studio project, and then add your files there and so on. So what if you're using your own build system, which you might be, right? So you may be using CMake or maybe directly Ninja or Makefiles or whatever. So you have kind of your own system and you just don't want to mess with the Visual Studio way of doing things. So that was like a barrier for people using Visual Studio. And we recognize that and we want those folks, which Open Folder tries to address. So with Open Folder, it's kind of a self-descriptive feature. You just go and say Open Folder and you point to a folder of C++ code
Starting point is 00:47:28 and it will just load it all up and you'll have your intelligence and debugging and you can help there with editing a JSON file so you can give more hints to have the greatest experience you can in Visual Studio. So that is, and we've just started investing there.
Starting point is 00:47:42 We're going to do a lot more. So that is a way that you can get your code in VS to enjoy all the productivity features that we've been talking about and that we've been adding in all these releases. And what's more, we have actually special cased CMake. So if you go and do open folder on a folder of C++ files that has a CMake textless file in it, because you're using CMake solution, we will detect that and we will use that file to give you the best experience we can for that CMake solution in Visual Studio without you having to do something separate in other JSON files and so on. So we have the easy upgrades, but we also have the, hey, you're new to Visual Studio, come on in.
Starting point is 00:48:21 It's going to be very easy for you to get started, to get to the productivity features that we have. So that is another big one. How much configuration does it take to run using Open Folder? Like if you want to set it to a special compiler, if you're not using MSVC? Right. So if you're using CMake, it's whatever you've pointed CMake to be using. And when I'm talking about we're going to do more investments there, we're just going to essentially special case even more systems that are out there. In terms of how much configuration you need to do, it all depends on how complicated your build scripts were in the first place, how much, you know, whatever you have there that's going to be more complicated,
Starting point is 00:48:59 you're going to have to do a bit more work. And it's also a pay-for-play in terms of what you want. You might just be happy with colorization and recognizing of important types or something like that without having full-blown IntelliSense. So you want just basic IntelliSense. So depending on how much you want from Visual Studio, more hints is what you'll have to give us if you just do the vanilla open folder experience. With CMake, of course, we just parse what you've already put in your CMake text list file, so we'll just read that and show you the
Starting point is 00:49:27 best experience possible. And when using Open Folder, can you expect to get every Visual Studio feature you'd be used to when you're using the normal MS build process, like IntelliSense, Debug? Yes, that is absolutely where we're going. In fact, the demo that we're going to
Starting point is 00:49:43 show, for those that watch CppCon video, me and Steve were there where we're going. In fact, the demo that we're going to show, for those that watch CppCon video, me and Steve were there, we were talking about this, and we demoed the productivity features with an MSBuild project, and we demoed OpenFolder and CMake separately. What we're actually going to do on launch day is start with CMake and show all the productivity features within the context of that CMake project. We just weren't in a place to do that last September. But we are now with the release bit.
Starting point is 00:50:08 Okay. Okay. Do you have something else you still wanted to talk about? We didn't get to yet? I can keep going forever because there's so much to this release. But those are the highlights. Okay. If you like.
Starting point is 00:50:23 So, yeah. Okay. Well, it was great having you on the show today, Daniel. Obviously, people can go to Channel 9 or to the Visual Studio Plus blog to get even more details about the release, right? That's right. Yeah, if you come to blogsmsdn.com slash vcblog, I'm sure we'll put that link down there. That's where we kind of share all this news. If somebody is a Visual Studio user and has been listening to this and they discovered a lot of things, that means they haven't been following our blog.
Starting point is 00:50:49 Because we talk about all these things very transparently as soon as they appear. And we get feedback early. And then you can help influence the product. So that is the one place to stay. I'll share the link of the roll-up blog post. I'm going to do the links to everything. And also, I liked earlier that you were asking some feature requests and stuff like that. If anyone out there has feature requests or the direction that we're going, something,
Starting point is 00:51:11 they can email me directly. We can make that happen. If they have bug reports, they should use the other normal channels. But if they're like, hey, I think that C++ from Microsoft could go in this direction or that direction, email me at daniel.moth at microsoft.com. Just email me directly and we can have the discussion. Very cool. Very cool.
Starting point is 00:51:32 Okay, well, thank you so much for your time today, Daniel. Thank you. And in case I forgot to say it, I am hiring for anyone that wants to help us. Thank you. Thanks for joining us. Thank you. Thanks so much for listening in as we chat about C++. I'd love to hear what you think of the podcast.
Starting point is 00:51:49 Please let me know if we're discussing the stuff you're interested in. Or if you have a suggestion for a topic, I'd love to hear about that too. You can email all your thoughts to feedback at cppcast.com. I'd also appreciate if you like CppCast on Facebook and follow CppCast on Twitter. You can also follow me at Rob W. Irving and Jason at Leftkiss on Twitter. And of course, you can find all that info and the show notes on the podcast website at cppcast.com. Theme music for this episode is provided by podcastthemes.com.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.