Entries:
Comments:
Posts:

Loading User Information from Channel 9

Something went wrong getting user information from Channel 9

Latest Achievement:

Loading User Information from MSDN

Something went wrong getting user information from MSDN

Visual Studio Achievements

Latest Achievement:

Loading Visual Studio Achievements

Something went wrong getting the Visual Studio Achievements

Herb Sutter

Herb Sutter herbsutter

Niner since 2012

Herb Sutter is a leading authority on software development. He is the best selling author of several books including Exceptional C++ and C++ Coding Standards, as well as hundreds of technical papers and articles, including the essay "The Free Lunch Is Over" which coined the term "concurrency revolution" and its recent sequel "Welcome to the Jungle" on the end of Moore's Law and the turn to mainstream heterogeneous supercomputing from the cloud to 'smartphones.' Herb has served for a decade as chair of the ISO C++ standards committee, and is a software architect at Microsoft where he has been the lead designer of C++/CLI, C++/CX, C++ AMP, and other technologies.

See more sessions…

  • Modern C++: What You Need to Know

    @Olivier: Thanks, I'll add a slide for next time to show the alternate Python/C++ side-by-side.

    Your Python example:

    defmean(seq):
       return sum(seq) / len(seq)

    C++ example (you could write sum as a one-liner and shorten this up further but I'll stick to only std:: operations):

    auto mean(const Sequence& seq) {
       return accumulate(begin(seq),end(seq),0) / seq.size();
    }

  • Modern C++: What You Need to Know

    There's also a performance-geeky section in the middle. Hope you enjoy it!

  • The Future of C++

    @Debugini: I have also raised the Connect bug feedback issue internally and we are trying to improve the consistency of our responsiveness and communication there too. Thanks for reporting the bugs, we do appreciate it -- we have resolved many Connect bugs in this release (including some listed on VCblog in Stephan's post on Friday) and we'll continue trying to improve here. Sometimes the issue is as simple as a bug being marked unfixed meaning in a specific previous release when it actually has already been fixed subsequently; but we also want to keep improving the number of bugs actually fixed too.

  • The Future of C++

    @Hakime: I agree, and we did -- I first invited Apple to talk about Clang for GN12, but they declined (my impression is that they have various policies about appearing at conferences that they have to follow) and they strongly recommended we invite Chandler instead. That's how I heard about Chandler, and how he came to give the Clang talk. I think he did a great job -- informative and entertaining.

  • The Future of C++

    @MFH: The "out of band compiler update" was misunderstood. At GoingNative 2012 (Feb 2012), we announced that we were going to ship more conformance, and at that point the usual cadence was always every 2-3 years, and we wanted to make sure people knew this did not mean they'd have to wait 2-3 years to see more progress. So we emphasized that we were going to find ways to get conformance features out sooner, not waiting for 2-3 years to pass before shipping anything more, via out-of-band CTP and RTM releases. For OOB CTPs, we followed through on that by shipping an out-of-band CTP in Nov 2012 with variadic templates and other things. For OOB RTMs, it turn turned out that all of VS moved to a faster cycle and turned the crank in just one year, not stay with the old release band, so we didn't need to ship a separate VC++ RTM to escape the old band, but just snapped to VS. What I think happened was that people took the "out-of-band" comment in the GN Feb 2012 talk and then connected the dots to think it meant the VS Updates, which we didn't even know about at that time. The main thing is that we are serious about delivering conformance, weren't going to wait 2-3 years to do so no matter what the rest of VS was scheduled to do, and happily all of VS released faster so we snapped to that train for RTM while also additionally shipping a CTP as promised last November, and as announced yesterday we'll ship VS 2013 with more conformance this year, followed by another CTP with still more conformance soon after RTM.

    @Eul3r: Re 1: My talk was actually scheduled for first thing after keynotes on Wednesday, and was moved to Friday to get a slot in the live broadcast room – so it was moved to Friday because it was important, not because it was unimportant. Remember, the online live audience is even larger than the ~1000 people in the room, and the on-demand audience is far larger still but isn't available until a couple of days later. So the Build organizers felt that this would help the message reach the most people quickly. Re 2: Actually we've grown quite a bit. Several of the things you asked for are available in Channel 9 talks, Build talks (including Build 2012), and VC Blog posts by the folks who build the compiler and optimizer and libraries. Checkout Jim Radigan's talk from last Build (available online) for cool compiler back-end information; he's a wizard. Re 3: See Soma's followup post after the one you mentioned, which was entirely about VC++ conformance. Soma gets it, he's great. Re 4: Thanks! But remember Build is about Windows and Windows Phone – the OS platform – so I don't think one language should have a plenary session (not just keynote). Still, C++ got a key live broadcast slot and I hope you noticed a lot of C++ and native code mentioned throughout.

    @Bryan: Yes, the current plan is for GoingNative 2013 to be livestreamed, and for the sessions to be recorded and made available for free online, just like last year's. It's possible something may change, but that's the plan as of now.

    @Moondevil: One thing that's not visible externally is the feature "pipeline" and lead time. The features you mentioned were worked on 1-3 years before being released. The features you see announced yesterday have likewise been in the pipeline for a while. We try to keep it in mind, but sometimes we forget we're living in your future when we're talking about what we're enthusiastically working hard on right now and then you don't see it for a while until it becomes a shipping product.

    @weierstrass: (Aside: I love your handle! It reminds me of Statistics 333 at school -- the M-Test.) Actually STL and James McNellis are both working on the standard libraries, and we have added compiler devs so as to be able to do more implementation work in parallel. When you extrapolate, note that features on the right hand side of the roadmap are 'generally' smaller... however I agree that one thing this roadmap is going to let you do going forward is track our velocity as we deliver against the roadmap. I hope to have more data and details known and shareable at GoingNative in September.

  • C++ and Beyond 2012: Herb Sutter - atomic<> Weapons, 2 of 2

    @Matthew: True and new in C++11 (and C11 and Java), but nothing to worry about because you'll likely never encounter a processor that can't do single-byte loads and stores.

    @Matthias: The memory model says that compilers/processors/caches can't transform potentially infinite loops into non-infinite loops.

    @Stephan, quick responses:

    • The stop=true; can't be relaxed because otherwise it could float up across the launch (annoying but mostly benign, just causing workers to always immediately stop) or down across the join (oops, program will never terminate).
    • The exchange_explicit can't be relaxed because for example part of "new widget" could float up speculatively out of the if.
    • Yes, VS 2012 atomic code gen is very pessimized for x86/x64; we're fixing it. ARMv7 code gen is already pretty good, modulo ARMv7's own limitations described in the talk.
  • C++ and Beyond 2012: Herb Sutter - atomic<> Weapons, 1 of 2

    @bcosta wrote: "Is it strictly necessary that acquire/release "come in a pairs"? I have heard this a few times. As an example, a single thread that uses a store/release to publish some data where multiple other threads that use a load/acquire to read that data. This is permitted right? I.e. One release can be "viewed" by many acquires or does it need to be strictly one-to-one?"

    That's fine, it's just many loads pairing with the same store... by "they have to come in pairs" we mean you get the ordering guarantees only when a specific load-acquire sees a specific store-release, and is guaranteed to see everything else the storing thread did before the store-release. That's one "pair." The same store-release could be observed by multiple load-acquires, pairing with each one.

  • C++ and Beyond 2012: Panel - Convincing your Colleagues

    @KMNY_a_ha: Thanks for being reasonable, I appreciate it.

    Off-topic: BTW, I've wondered for a while -- is your handle intended to be KMKY_a_ha (K instead of N)? But I agree N makes it more pronounceable and still gives the Abba reference.

  • C++ and Beyond 2012: Panel - Convincing your Colleagues

    @KMNY_a_ha: I'm sorry you're upset that we're behind on C++11. We don't like being behind either, and we know where gcc and Clang are (I use them regularly).

    I also know we have constraints gcc and Clang don't -- such as supporting several first-party OS platforms (which means a once-in-a-decade event like Windows 8 taking over a big chunk of the VC++ product team capacity for two years), several first-party app products like Office and SQL Server (that would be among the world's largest ISVs if they were separate companies), and making sure C++ supports many extra features in one of the world's richest and most complex IDEs (which some will view as 'a waste' if they don't use Intellisense, debugger expression evaluation, static analysis, etc., and some people don't, but the reality is we have to support all that reasonably well and people still want things we don't do like basic refactoring). Besides those obvious taxes, there are many technical constraints that aren't appropriate to talk about publicly, but I'll note they're not the ones people keep guessing at. Smiley

    Gcc and Clang are great compilers, and I personally made sure we gave Clang in particular airtime at GoingNative (thanks again Chandler for the great talk!). They also have smaller ecosystems they have to support directly and thus fewer constraints, or at least different constraints. I may wish I worked on a project without constraints, but I don't have that luxury. So I can either quit the team and gripe about their constraints, or be part of the solution and try to help improve issues ranging from engineering to organizational. I prefer the latter as more productive.

    Re message and renaissance:

    I don't think I've changed what I've said: C++ has indeed had, and is having, a major renaissance at Microsoft and across the industry.

    Inside Microsoft, for starters all the new stuff in Windows 8 is based on a C++ COM-based API, not .NET code as Longhorn (pre-Vista) tried to do. At Build, which you mention, we had far more C++ content than at any PDC (the conference Build replaced) for over a decade, to the point where we had to bend over backwards to ensure .NET developers didn't think they were being abandoned (they weren't). In Visual C++, we probably shipped more feature work in this release than in any previous release I can remember, including ARM targeting, auto-parallelizing and -vectorizing, C++ AMP, C++/CX, a full C++11 stdlib, and other things.

    Outside Microsoft, we have C++11 (first new standard features in 13 years), the Standard C++ Foundation (first ever), isocpp.org (first ever), the huge investment by the industry's biggest players in a brand new C++ compiler (Clang, first reusable OSS C++ compiler ever -- gcc is deliberately nonreusable), more C++ conferences and conference content than we've seen in years, all the C++ consultants I know booked out like they haven't been for years, and more.

    So I see the renaissance ongoing everywhere. That's what I see, anyway, so I say it.

    Re education and bio:

    You should be able to find it, the academic and job summary are posted on isocpp.org and probably other places. BMath CS Hon Co-op, UWaterloo, 1989 -- CS/Info is an honors CS degree (a 4-year degree that actually takes 5 because of co-op interleaving, and I strongly recommend co-op for real-world experience) with heavy math and business -- a credit or two shy in each of the latter two from being a CS-math-bus triple major, nearly no electives. BTW, it looks like I'll be back at my alma mater in February to give an invited talk, anyone who's in the area and interested should check out the UW announcements.

    But really the paper/lettering doesn't matter much after getting your first job or two -- that's when it matters to give prospective employers an idea of what you might be able to do. But after the first job or two, too many people sit on their academic credentials when what really matters then is the design and engineering quality they produced in the real world, and the people they worked with who know their skills and can say so.

    FWIW, some of the world's best C++ compiler implementers I know and whose programming skills put me to shame, who work at multiple top companies you'd recognize, never formally went past high school. (It's rare, but it happens -- it just means more of the responsibility is on the person to be a self-starter and proactive about ongoing learning, with less help to discover the things they need to learn.) That includes at least one highly respected 20-year veteran of the ISO C++ standards committee, still very active and prominent in a room filled with a fair number of PhD's, and we're glad we have him.

  • C++ and Beyond 2012: Herb Sutter - C++ Concurrency

    Just noticed Fernando posted the same question here as on my blog... pasting the answer here too:

    @Fernando: You asked why not just write w.then(x+y+z) instead of w.then(x).then(y).then(z). Two reasons: 1. Writing w.then(x+y+z) burns/occupies a thread while waiting for y and z, while w.then(x).then(y).then(z) does not. 2. An important key is composability: The different .then() calls may be in different code, such as one function doing w.then(x) and returning the future, the separately authored caller tacking on .then(y) and storing it on the heap for multiple threads to observe, and then a helper thread authored by still someone else tacking on .then(z).

See more comments…