Pete Becker is a consultant and computer programmer, recognized as one of the world's foremost experts in the C++ programming language. He has been contributing to the C++ standardization process since its start and has authored several publications, including magazine articles and columns, and a book on the first C++ Library Technical Report (aka TR1).
Becker worked for eight years at Borland International as a quality assurance engineer and manager, library implementor, and development manager. From 1997 to 2005 he was employed at Dinkumware, working on the source code and documentation of their C++ Standard Library and C Standard Library implementations.
Becker has been a member of the ISO/IEC (JTC1/SC22/WG21) C++ Standards committee since its inception in 1991. His work includes a proposal for standard support of dynamic libraries [1] and arbitrary-precision arithmetic [2] in C++. He has been the Project Editor from 2004 until 2011, when C++11 was released.
Becker's reasoning for the support of dynamic libraries are runtime flexibility, application updates, simplification of coding modules, and reduction of system memory requirements. [3]
Syntax proposition was not yet declared. Although, it is clear to all C++ programmers that the syntax should involve the following properties.
// it should be applicable to individual names:
shared int i; // shared linkage
// it should be applicable to a block at file scope, affecting all names declared within the block that would otherwise have external linkage:
shared {
int j; // shared linkage
static int k; // internal linkage
}
// it should be applicable to a class, giving all member functions and all static data members shared linkage:
shared class C {
int c0; // no linkage
static int c1; // shared linkage
void f(); // shared linkage
};
// it should be applicable to an explicit template specialization (but not to a mere template):
template <class T> class D {
int d0; // no linkage
static int d1; // no linkage
void f(); // no linkage
};
shared template <> D<int>;
// D<int>::d1 and D<int>::f have shared linkage [4]
Becker has written several columns and articles, focusing primarily on C++. From 1995 to 2001, Becker was a regular columnist for C/C++ Users Journal. From 2005 to 2006 he wrote a monthly column entitled "The New C++ Not-So-Standard Library", focusing on various aspects of the C++ TR1 library extensions. After C/C++ Users Journal merged with Dr Dobb's Journal, Becker's column reappeared as "The New C++", now focusing on more general aspects of C and C++ programming. [5]
In 2006 he published The C++ Standard Library Extensions: A Tutorial and Reference, a book covering the new functions and components proposed as extensions to the C++ Standard Library in C++ Technical Report 1.
C++ is a general-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significantly over time, and modern C++ now has object-oriented, generic, and functional features in addition to facilities for low-level memory manipulation. It is almost always implemented as a compiled language, and many vendors provide C++ compilers, including the Free Software Foundation, LLVM, Microsoft, Intel, Oracle, and IBM, so it is available on many platforms.
Multiple dispatch or multimethods is a feature of some programming languages in which a function or method can be dynamically dispatched based on the run-time (dynamic) type or, in the more general case, some other attribute of more than one of its arguments. This is a generalization of single-dispatch polymorphism where a function or method call is dynamically dispatched based on the derived type of the object on which the method has been called. Multiple dispatch routes the dynamic dispatch to the implementing function or method using the combined characteristics of one or more arguments.
Template metaprogramming (TMP) is a metaprogramming technique in which templates are used by a compiler to generate temporary source code, which is merged by the compiler with the rest of the source code and then compiled. The output of these templates include compile-time constants, data structures, and complete functions. The use of templates can be thought of as compile-time polymorphism. The technique is used by a number of languages, the best-known being C++, but also Curl, D, and XL.
D, also known as Dlang, is a multi-paradigm system programming language created by Walter Bright at Digital Mars and released in 2001. Andrei Alexandrescu joined the design and development effort in 2007. Though it originated as a re-engineering of C++, D is a distinct language. It has redesigned some core C++ features, while also sharing characteristics of other languages, notably Java, Python, Ruby, C#, and Eiffel.
printf format string refers to a control parameter used by a class of functions in the input/output libraries of C and many other programming languages. The string is written in a simple template language: characters are usually copied literally into the function's output, but format specifiers, which start with a %
character, indicate the location and method to translate a piece of data to characters.
Thread-local storage (TLS) is a computer programming method that uses static or global memory local to a thread.
C++/CLI is a language specification created by Microsoft which supersedes Managed Extensions for C++. It is a complete revision that simplifies the now-deprecated Managed C++ syntax and provides interoperability with Microsoft .NET languages such as C#. C++/CLI was standardized by Ecma as ECMA-372. It is currently available in Visual Studio 2005, 2008, 2010, 2012, 2013, 2015, 2017 and 2019 including the Express editions.
C++ Technical Report 1 (TR1) is the common name for ISO/IEC TR 19768, C++ Library Extensions, which is a document that proposed additions to the C++ standard library for the C++03 language standard. The additions include regular expressions, smart pointers, hash tables, and random number generators. TR1 was not a standard itself, but rather a draft document. However, most of its proposals became part of the later official standard, C++11. Before C++11 was standardized, vendors used this document as a guide to create extensions. The report's goal was "to build more widespread existing practice for an expanded C++ standard library".
auto_ptr is a class template that was available in previous versions of the C++ standard library, which provides some basic RAII features for C++ raw pointers. It has been replaced by the unique_ptr class.
The C and C++ programming languages are closely related but have many significant differences. C++ began as a fork of an early, pre-standardized C, and was designed to be mostly source-and-link compatible with C compilers of the time. Due to this, development tools for the two languages are often integrated into a single product, with the programmer able to specify C or C++ as their source language.
C++11 is a version of the standard for the programming language C++. It was approved by International Organization for Standardization (ISO) on 12 August 2011, replacing C++03, superseded by C++14 on 18 August 2014 and later, by C++17. The name follows the tradition of naming language versions by the publication year of the specification, though it was formerly named C++0x because it was expected to be published before 2010.
In the programming language C++, unordered associative containers are a group of class templates in the C++ Standard Library that implement hash table variants. Being templates, they can be used to store arbitrary elements, such as integers or custom classes. The following containers are defined in the current revision of the C++ standard: unordered_set
, unordered_map
, unordered_multiset
, unordered_multimap
. Each of these containers differ only on constraints placed on their elements.
In computer programming, variadic templates are templates that take a variable number of arguments.
In C++ computer programming, allocators are a component of the C++ Standard Library. The standard library provides several data structures, such as list and set, commonly referred to as containers. A common trait among these containers is their ability to change size during the execution of the program. To achieve this, some form of dynamic memory allocation is usually required. Allocators handle all the requests for allocation and deallocation of memory for a given container. The C++ Standard Library provides general-purpose allocators that are used by default, however, custom allocators may also be supplied by the programmer.
In the C++ programming language, decltype
is a keyword used to query the type of an expression. Introduced in C++11, its primary intended use is in generic programming, where it is often difficult, or even impossible, to express types that depend on template parameters.
C++14 is a version of the ISO/IEC 14882 standard for the programming language C++. It is intended to be a small extension over C++11, featuring mainly bug fixes and small improvements. Its approval was announced on August 18, 2014. C++14 was released on December 15, 2014.
C++17 is a revision of the ISO/IEC 14882 standard for the C++ programming language.
C++ is a general-purpose programming language with imperative, object-oriented, and generic programming features. Many criticisms have been leveled at C++'s design by well-known software developers including Linus Torvalds, Richard Stallman, Joshua Bloch, Rob Pike, Ken Thompson, and Donald Knuth.
C++20 is the name for the revision of the ISO/IEC standard for the C++ programming language following C++17. The standard was technically finalized by WG21 at the meeting in Prague in February 2020, approved on 4 September 2020, and published by ISO in December 2020.
C2x is an informal name for the next major C language standard revision. It is not expected to be voted on until December 2021.