Thanks to all of you who came and helped to make this special seminar such a great success!
We were pleased to be able to meet so many of you and see a great crowd of enthusiastic people excited about C++. Now we're looking forward to doing it again sometime in the future, somewhere in the world -- watch this site for details.
Special Seminar Event:
Stroustrup & Sutter on C++ #2
March 13-14, 2006 Santa Clara, CA, USA
We’ve packed these two days with informative, leading-edge, and still highly practical and pragmatic material. The seminar is structured with talks and panels, and liberal break times so that the instructors and attendees can mix and eat and chat together. Bjarne will reprise his popular "Speaking C++ as a Native" talk from S&S #1, otherwise this seminar contains new talks not presented at the first S&S event.
In addition to lots of information you can use today, this program also contains important forward-looking information about what's coming soon in the next version of the C++ Standard, C++0x, and related efforts, where the instructors are the lead designers of several of the new core features and ready to share their personal experience.
|Bjarne Stroustrup is the creator and original implementer of the C++ programming language, and the College of Engineering Professor of computer science at Texas A&M University. He also retains a link to AT&T Labs - Research as a member of the Information and Systems Software Research Lab. Over the years, he has written a few books (including The C++ Programming Language and The Design and Evolution of C++), written a lot of papers, and given some interviews.|
|Herb Sutter is a leading authority on software development. During his career, Herb has been the creator and principal designer of several major commercial technologies, including the PeerDirect peer replication system for heterogeneous distributed databases, the C++/CLI language extensions to C++ for .NET programming (now an international standard), and most recently the Concur concurrent programming model. Currently a software architect at Microsoft, he also serves as chair of the ISO C++ standards committee and is the author of four acclaimed books and hundreds of technical papers and articles on software development topics, including the widely-referenced article "The Free Lunch Is Over" which coined the title phrase and the term "concurrency revolution."|
Monday, March 13, 2006
On Monday, we begin in the morning with a 25th-anniversary keynote placing C++ in historical and future context and setting the stage for all that follows. Then we quickly delve into what newly ISO-adopted C++ libraries are available today and how to get the most out of them now, how best to leverage C++'s multi-paradigm strengths, and how the industry sea change we know as the concurrency revolution is being addressed in C++.
8:15-8:30am Welcome (Herb Sutter)
8:30-10:00am 25 Years of C++: Evolving a Language In and For the Real World (Bjarne Stroustrup)
25 years since I began work on the C++ programming language, and 20 years since its first commercial release, the C++ programming language is used by millions of programmers. Developing such a language is a challenging business. I will present a personal view of some of the factors that were and still are critical for C++'s sustained success. Many of the key ideals and principles that were applied – with varying degrees of success – involve non-technical concerns. Real-world language evolution differs significantly from “green field” and "blue sky" design, especially since it requires long-term evolution in a world of shifting external pressures rather than specifying an ideal design once and for all.
10:00-10:30am Break & mingling
10:30am-12:00pm The New ISO C++ Libraries (Herb Sutter & Bjarne Stroustrup)
The ISO C++ committee has accepted and finalized the first round of extensions to the C++ standard library, known as the Library Extensions Technical Report #1 (TR1). From basic building blocks like shared_ptr, tuple, and function, to new containers and a set of advanced math functions, this is a set of facilities directly applicable to a broad range of programmers. Many of them are available today for you to use, via Boost and other libraries. In this talk, the presenters give a tour of TR1 and demonstrate selected important facilities, best practices for using them, and a liberal dose of context and commentary.
Noon-1:30pm Lunch & mingling
BEST OF S&S: A reprise of Bjarne's popular talk at the first Stroustrup & Sutter seminar
1:30-2:45pm Speaking C++ as a Native: Multi-paradigm Programming in Standard C++ (Bjarne Stroustrup)
Multi-paradigm programming is programming applying different styles of programming, such as object-oriented programming and generic programming, where they are most appropriate. This talk presents simple example of individual styles in ISO Standard C++ and examples where these styles are used in combination to produce cleaner, more maintainable code than could have been done using a single style only.
2:45-3:00pm Break & mingling
3:00-4:30pm The Concurrency Landscape, C++(0x), and the Concur Project (Herb Sutter)
Changes in the hardware landscape are directly affecting the way we write software: The free lunch of ever-greater single-threaded throughput is over, and only concurrent applications can exploit the continued exponential performance growth in modern mainstream CPUs. Unfortunately, none of today’s mainstream languages and environments deal well with concurrency, and ISO C++ doesn’t even mention threads. This talk provides a summary of the issues, how the ISO C++ committee is dealing with them in C++0x, and how it all fits into a context and roadmap for our industry over the next five years. The second part of the talk will consider my Concur project: By providing active objects, futures, and parallel loops and algorithms, the Concur project aims to: a) define higher-level abstractions; b) for today’s (imperative) languages; c) that evenly support the range of concurrency granularities; d) to let developers write correct and efficient concurrent apps; e) with lots of latent parallelism (and not lots of latent bugs); f) that can be mapped to actual hardware at run time to reenable the free lunch.
4:30-4:45pm Break & mingling
4:45-5:30pm Grill the Experts: Ask Us Anything! (Bjarne Stroustrup & Herb Sutter)
This is your opportunity to get "thought leader" answers to your favorite C++ questions! We strongly encourage you to submit your questions in advance, preferably by email or in writing at the beginning of the seminar. Audience questions will also be taken from the floor. Both instructors will answer as many questions as time permits. (Note: We'll talk about everything except future directions in C++. That is the focus of the second day.)
Tuesday, March 14
On Tuesday, we devote the morning to genericity, specifically template evolution in C++0x with Bjarne's concepts proposal, and a detailed side-by-side comparison of three modern genericity mechanisms: C++ templates (including C++0x concepts), .NET generics, and Java generics. We'll then wrap up the seminar with best ways to use C++'s strong mechanisms for abstraction, and delve beyond the usual exception-safety topics to show the best practices to apply and the clearest ways to think for building robust and reliable C++ code.
8:30-10:00am C++0x: A "Concept"ual Overview (Bjarne Stroustrup)
A good programming language is far more than a simple collection of features. My ideal is to provide a set of facilities that smoothly work together to support design and programming styles of a generality beyond my imagination. Here, I outline rules of thumb (guidelines, principles) that are being applied in the design of C++0x. For example, generality is preferred over specialization, novices as well as experts are supported, library extensions are preferred over language changes, compatibility with C++98 is emphasized, and evolution is preferred over radical breaks with the past. Since principles cannot be understood in isolation, I present the new features that are proposal – or already accepted – for the support of generic programming, such as the key notion of “concepts” to provide a type system for template parameters (so that we can get much better error messages and better overloading). Other proposals include generalized initialization (initializer lists, generalized constant expressions), auto (to avoid needless repetition of type names), decltype (“son of typeof”), and template aliases (son of “templated typedefs”).
10:00-10:30pm Break & mingling
10:30am-Noon Genericity in C++, .NET, and Java (Herb Sutter)
This talk compares and contrasts the generic type facilities of ISO C++ templates (including C++0x concepts), .NET 2.0 generics, and Java 5 generics. We will analyze their respective strengths and weaknesses (yes, they do all have strengths and weaknesses), see what kinds of problems they are designed to solve, and analyze when and where each is appropriate. We’ll also put them through their paces with live code-writing and demonstrations of the three facilities. C++ templates will be demonstrated in C++ and Java generics in Java (of course), and .NET generics in both C++ and C#.
Noon-1:30pm Lunch & mingling
1:30-2:45pm Abstraction and the C++ Machine Model (Bjarne Stroustrup)
C++ was designed to be a systems programming language and has been used for embedded systems programming and other resource-constrained types of programming since the earliest days. The aim was – and is – to support elegant high-performance code. This paper will briefly discuss how C++’s basic model of computation and data supports time and space performance, hardware access, and predictability. If that was all we wanted, we could write assembler or C, so I show how these basic features interact with abstraction mechanisms (such as classes, inheritance, and templates) to control system complexity and improve correctness while retaining the desired predictability and performance.
2:45-3:00pm Break & mingling
3:00-4:30pm Error-Safe C++: More Than Just Exception Safety (Bjarne Stroustrup & Herb Sutter)
Much has been written, especially by us, on writing exception-safe code. In this talk we’ll summarize the ground rules (some of them new) for writing exception-safe code, including how to use exceptions, best practices of RAII, and dealing with constructor exceptions. But we’ll also cover error safety in all cases, because the main difficulty in writing exception-safe code has little to do with exceptions in particular, but with error handling in general: Why are the “exception safety” guarantees really error safety guarantees that apply to all kinds of error reporting, not just exceptions? What really is an error – how can we define that rigorously, in order to distinguish between errors and non-errors? What error-safety guarantee should any function provide? Why should you prefer to use exceptions to report errors, but when should you not use exceptions? When should you translate error codes or exceptions to a different error reporting model? We will answer these and other questions to provide guidelines for writing robust, industrial-strength C++ code.
4:30-4:45pm Break & mingling
4:45-5:30pm Discussion on Questions Raised During the Seminar (Herb Sutter & Bjarne Stroustrup)
This panel is set aside for follow-up comments and discussion on issues that are raised during the seminar. During the other talks and panels, or during between-session chats, questions often come up that the instructors want to research. Some of the resulting information will be of general interest, and this final panel provides the needed convenient opportunity to promulgate it to everyone.