C++ PART 8
History of C++
Developed by Bjarne Stroustrup starting in 1979 at Computing Science Research Center of Bell Laboratories, Murray Hill, NJ, USA
Bjarne Stroustrup
Doctoral work in Computing Laboratory of University of Cambridge, Cambridge, UK
Study alternatives for organization of system software for distributed systems
Required development of relatively large and detailed simulator
Dissertation:
B. Stroustrup. Communication and Control in Distributed Computer Systems.
PhD thesis, University of Cambridge, Cambridge, UK, 1979.
In 1979, joined Bell Laboratories after having finished doctorate
Work started with attempt to analyze UNIX kernel to determine to what extent it could be distributed over network of computers connected by LAN
Needed way to model module structure of system and pattern of communication between modules
No suitable tools available.
Timeline for C with Classes
May 1979 Work on C with Classes starts
Oct 1979 Initial version of Cpre, preprocessor that added Simula-like classes to C; language accepted by preprocessor later started being referred to as C with Classes
Mar 1980 Cpre supported one real project and several experiments (used on about 16 systems)
Apr 1980 First internal Bell Labs paper on C with Classes published (later to appear in ACM SIGPLAN Notices in Jan. 1982)
B. Stroustrup. Classes: An abstract data type facility for the C language.
Bell Laboratories Computer Science Technical Report CSTR-84, Apr. 1980.
1980 Initial 1980 implementation had following features:
Classes
Derived classes
Public/private access control
Constructors and destructors
Call and return functions (call function implicitly called before every call of every member function; return function implicitly called after every return from every member function; can be used for synchronization)
Friend classes
Type checking and conversion of function arguments
1981 In 1981, Added:
Inline functions
Default arguments
Overloading of assignment operator
Jan 1982 First external paper on C with Classes published
B. Stroustrup. Classes: An abstract data type facility for the C language.
ACM SIGPLAN Notices, 17(1):42–51, Jan. 1982.
Started work on Cfront compiler front-end for C84;
Initially written in C with Classes and then transcribed to C84;
Traditional compiler front-end performing complete check of syntax and semantics of language, building internal representation of input, analyzing and rearranging representation, and finally producing output for some code generator;
Generated C code as output;
Difficult to bootstrap on machine without C84 compiler;
Cfront software included special “half-processed” version of C code resulting from compiling Cfront, which could be compiled with native C compiler and resulting executable then used to compile Cfront
Feb 1983 More detailed paper on C with Classes published
B. Stroustrup. Adding classes to the C language: An exercise in language evolution.
Software: Practice and Experience, 13(2):139–161, Feb. 1983.
C with Classes proved very successful; generated considerable interest
First real application of C with Classes was network simulators
Started to work on cleaned up and extended successor to C with Classes, initially called C84 and later renamed C++
Dec 1983 C84 (C with Classes) renamed C++;
Name used in following paper prepared in Dec. 1983
B. Stroustrup. Data abstraction in C.
Bell Labs Technical Journal, 63(8):1701–1732, Oct. 1984. (name C++ suggested by Rick Mascitti)
Virtual functions added
Note:
Going from C with Classes to C84 added: virtual functions, function name and operator overloading, references, constants (const), user-controlled free-store memory control, improved type checking
Jan 1984 First C++ manual
B. Stroustrup. The C++ reference manual. AT&T Bell Labs Computer Science Technical Report No. 108, Jan. 1984.
Sep 1984 Paper describing operator overloading published
B. Stroustrup. Operator overloading in C++. In Proc. IFIP WG2.4 Conference on System Implementation Languages: Experience & Assessment, Sept. 1984.
Stream I/O library first implemented and later presented in
B. Stroustrup. An extensible I/O facility for C++. In Proc. of Summer 1985 USENIX Conference, pages 57–70, June 1985.
Feb 1985 Cfront Release E (first external release); “E” for “Educational”; available to universities
Oct 1985 Cfront Release 1.0 (first commercial release)
Oct 1985 First edition of C++PL written
B. Stroustrup. The C++ Programming Language.
Addison Wesley, 1986.(Cfront Release 1.0 corresponded to language as defined in this
book)
Oct 1985 Tutorial paper on C++ B. Stroustrup. A C++ tutorial. In Proceedings of the ACM annual conference on the range of computing: mid-80’s perspective, pages 56–64, Oct. 1985.
Jun 1986 Cfront Release 1.1; mainly bug fix release
Aug 1986 First exposition of set of techniques for which C++ was aiming to provide support (rather than what features are already implemented and in use)
B. Stroustrup. What is object-oriented programming? In Proc. of 14th Association of Simula Users Conference, Stockholm, Sweden, Aug. 1986.
Sep 1986 First Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA) conference (start of OO hype centered on Smalltalk)
Nov 1986 First commercial Cfront PC port (Cfront 1.1, Glockenspiel [i n Ireland]) Feb 1987 Cfront Release 1.2; primarily bug fixes but also added: pointers to members protected members
Nov 1987 First conference devoted to C++: USENIX C++ conference (Santa Fe, NM, USA)
Dec 1987 First GNU C++ release (1.13)
Jan 1988 First Oregon Software (a.k.a. TauMetric) C++ release
Jun 1988 First Zortech C++ release
Oct 1988 First presented templates at USENIX C++ conference (Denver, CO, USA) in paper:
B. Stroustrup. Parameterized types for C++. In Proc. of USENIX C++ Conference, pages 1–18, Denver, CO, USA, Oct. 1988.
Oct 1988 First USENIX C++ implementers workshop (Estes Park, CO, USA)
Jan 1989 First C++ journal “The C++ Report” (from SIGS publications) started publishing
Jun 1989 Cfront Release 2.0 major cleanup; new features included:
multiple inheritance
type-safe linkage
better resolution of overloaded functions
recursive definition of assignment and initialization
better facilities for user-defined memory management
abstract classes
static member functions
const member functions
protected member functions (first provided in release 1.2)
overloading of operator ->
pointers to members (first provided in release 1.2)
1989 Main features of Cfront 2.0 summarized in
B. Stroustrup. The evolution of C++: 1985–1989. USENIX Computer Systems, 2(3), Summer 1989.
First presented in
B. Stroustrup. The evolution of C++: 1985–1987. In Proc. of USENIX C++ Conference, pages 1–22, Santa Fe, NM, USA, Nov. 1987.
Nov 1989 Paper describing exceptions published
A. Koenig and B. Stroustrup. Exception handling for C++. In Proc. of “C++ at Work” Conference, Nov. 1989.
Followed up by
A. Koenig and B. Stroustrup. Exception handling for C++. In Proc. of USENIX C++ Conference, Apr. 1990.
Dec 1989 ANSI X3J16 organizational meeting (Washington, DC, USA)
Mar 1990 First ANSI X3J16 technical meeting (Somerset, NJ, USA)
Apr 1990 Cfront Release 2.1; bug fix release to bring Cfront mostly int o line with ARM
May 1990 Annotated reference manual (ARM) published
M. A. Ellis and B. Stroustrup. The Annotated C++ Reference Manual. Addison Wesley, May 1990. (formed basis for ANSI standardization)
May 1990 First Borland C++ release
Jul 1990 Templates accepted (Seattle, WA, USA)
Nov 1990 Exceptions accepted (Palo Alto, CA, USA)
Jun 1991 Second edition of C++PL published
B. Stroustrup. The C++ Programming Language. Addison Wesley, 2nd edition, June 1991.
Jun 1991 First ISO WG21 meeting (Lund, Sweden)
Sep 1991 Cfront Release 3.0; added templates (as specified in ARM)
Oct 1991 Estimated number of C++ users 400,000
Feb 1992 First DEC C++ release (including templates and exceptions)
Mar 1992 Run-time type identification (RTTI) described in
B. Stroustrup and D. Lenkov. Run-time type identification for C++.
The C++ Report, Mar. 1992.
(RTTI in C++ based on this paper)
Mar 1992 First Microsoft C++ release (did not support templates or exceptions)
May 1992 First IBM C++ release (including templates and exceptions)
Mar 1993 RTTI accepted (Portland, OR, USA)
Jul 1993 Namespaces accepted (Munich, Germany)
1993 Further work on Cfront Release 4.0 abandoned after failed attempt to add exception support
Aug 1994 ANSI/ISO Committee Draft registered
Aug 1994 Standard Template Library (STL) accepted (Waterloo, ON, CA); described in
A. Stepanov and M. Lee. The standard template library. Technical Report HPL-94-34 (R.1), HP Labs, Aug. 1994.
Aug 1996 Export accepted (Stockholm, Sweden)
1997 Third edition of C++PL published
B. Stroustrup. The C++ Programming Language. Addison Wesley Longman, Reading, MA, USA, 3rd edition, 1997.
Nov 1997 Final committee vote on complete standard (Morristown, NJ, USA)
Jul 1998 Microsoft releases VC++ 6.0, first Microsoft compiler to provide close-to-complete set of ISO C++
Sep 1998 ISO/IEC 14882:1998 (informally known as C++98) published
ISO/IEC 14882:1998 — programming languages — C++, Sept. 1998.
1998 Beman Dawes starts Boost (provides peer-reviewed portable C++ source libraries)
Feb 2000 Special edition of C++PL published
B. Stroustrup. The C++ Programming Language. Addison Wesley, Reading, MA, USA, special edition, Feb. 2000.
Apr 2001 Motion passed to request new work item: technical report on
libraries (Copenhagen, Denmark); later to become ISO/IEC T
R
19768:2007
Oct 2003 ISO/IEC 14882:2003 (informally known as C++03) published; essentially bug fix release; no changes to language from programmer’s point of view
ISO/IEC 14882:2003 — programming languages — C++,
Oct. 2003.
2003 Work on C++0x (now known as C++11) starts
Oct 2004 Estimated number of C++ users 3,270,000
Apr 2005 First votes on features for C++0x (Lillehammer, Norway)
2005 Auto, static_assert, and rvalue references accepted in principle
Apr 2006 First full committee (official) votes on features for C++0x (Berlin, Germany)
Sep 2006 Performance technical report (TR 18015) published:
ISO/IEC TR 18015:2006 — information technology — programming languages, their environments and system software interfaces — technical report on C++ performance, Sept. 2006.
Work spurred by earlier proposal to standardize subset of C+
+
for embedded systems called Embedded C++ (or just EC++);
EC++ motivated by performance concerns
Apr 2006 Decision to move special mathematical functions to separate ISO standard (Berlin, Germany); deemed too specialized for mos t programmers
Nov 2007 ISO/IEC TR 19768:2007 (informally known as C++TR1) published;
ISO/IEC TR 19768:2007 — information technology — programming languages — technical report on C++ library extensions, Nov. 2007.
Specifies series of library extensions to be considered for adoption later in C++
2009 Another particularly notable book on C++ published
B. Stroustrup. Programming: Principles and Practice Using C++.
Addison Wesley, Upper Saddle River, NJ, USA, 2009.
Aug 2011 ISO/IEC 14882:2011 (informally known as C++11) ratified
ISO/IEC 14882:2011 — information technology —
programming languages — C++, Sept. 2011.
2013 Fourth edition of C++PL published
B. Stroustrup. The C++ Programming Language. Addison Wesley, 4th edition, 2013.
2014 ISO/IEC 14882:2014 (informally known as C++14) ratified
ISO/IEC 14882:2014 — information technology — programming languages — C++, Dec. 2014.
2017 ISO/IEC 14882:2017 (informally known as C++17) ratified
ISO/IEC 14882:2017 — information technology — programming languages — C++, Dec. 2017.
Note :
Flexibility (can be used for most application areas)
Availability (C compilers available for most platforms)
Portability (source code relatively portable from one platform to another)
Simula gave classes
Algol68 gave operator overloading, references, ability to declare variables anywhere in block
BCPL gave // comments
Exceptions influenced by ML
Templates influenced by generics in Ada and parameterized modules in Clu
C++ very successful programming language
Not luck or solely because based on C
Efficient, provides low-level access to hardware, but also supports abstraction
Non-proprietary: in 1989, all rights to language transferred to standards bodies (first ANSI and later ISO) from AT&T
Multi-paradigm language,
Supporting procedural,
Object-oriented,
Generic, and functional,
Does not force particular programming style,
Reasonably portable,
Has continued to evolve,
Incorporating new ideas,
Stable: high degree of compatibility with earlier versions of language
Very strong bias towards providing general-purpose facilities rather than more application-specific ones
