“Systems programming” is a category of programming that requires high speed, demanded by such applications as operating systems, network servers, and databases. For many years, and even today, C is the go-to programming language for such work — but over the years, a growing number of other languages have been joining this space, most notably C++, and more recently D, Go, and Rust. What do each of these languages have to offer, and what do the languages’ designers prioritize in their designs? This panel brings together Bjarne Stroustrup (C++), Rob Pike (Go), Andrei Alexandrescu (D), and Niko Matsakis (Rust) to discuss what they think about programming languages, language design, community, and future directions.
If you’re teaching people how to program in C++, then the odds are good that you’re doing so by starting with C, and then building on top of that. This, argues Kate Gregory, makes for lots of problems. It means that you only get to the interesting parts of C++ long after the first day of the class. It reflects the history and evolution of the language, rather than the way in which people use (and should use) it today. And it means that you teach your students to deal with things in a way that is good for C, but bad for C++. If you teach programming, in any language, then this talk offers a fascinating perspective on what and how to do so.
Everyone who uses a computer benefits from high-quality C and C++ compilers. For many years, the standard open-source compiler was GCC. But in the last few years, a new set of a compilers have become popular. You might have heard the terms “LLVM” and “Clang,” for example. But what are these technologies? How are they different from GCC and other compilers? What benefits to they provide? And what is their future?
In this talk, Alp Toker describes Clang, a modern C, C++, and Objective-C compiler. How is it different from its predecessors, and what advantages does it give to programmers using it? Even if you’re a user of dynamic, high-level languages, this talk gives a good introduction and overview of the architecture of a compiler, and the considerations that go into its writing and maintenance.