Concepts / C++98 and the First ISO Standard

C++98 and the First ISO Standard

C++11, known for years as C++0x, was produced by the WG21 committee and ratified by a 21-0 national vote in August 2011 as the second ISO C++ standard.

  • Programming

Why a Language Standard Takes Years to Finish

Standards for widely used languages do not appear on a fixed schedule. C++11 is the current version of C++ at the time of its ratification, and it was developed over a long period by the members of the standards committee known as WG21. Before looking at what C++11 contains, it helps to understand why the work took as long as it did. The answer has three parts: how the committee chose to operate, the growing size of modern languages, and a belief about ISO rules that turned out to be wrong.

Keep in mind that this version of the language was known for years as C++0x. That working name reflected the hope that the standard would finish within the current decade. The name changed, but the standard it refers to is the same document: C++11.

As you read the timeline and the growth figures below, keep one question in mind: if you were on the committee, what would you have needed in order to finish sooner, and what would you have risked by hurrying?

Tracing the Path to C++11

The path to C++11 can be traced through three anchor points. Serious feature work on the language began in 2002. An initial draft standard was produced for public review in 2009. The second ISO C++ standard, identified as ISO/IEC 14882:2011, was then ratified by a 21-0 national vote in August 2011.

2002Serious feature work begins2009Initial draft for publicreviewAugust 201121-0 national vote, ISO/IEC14882:2011about 7 yearsabout 2 years
In what order did the key milestones happen, and how far apart were they? Serious feature work began in 2002, the initial draft went out for public review in 2009, and the national vote ratified the standard in August 2011.

Notice two details in the final milestone. The vote was a national vote, and the document it ratified was formally the second ISO C++ standard. The first milestone, the start of serious feature work, is the one that matters most for understanding the gap, because the years before it were not spent on new features.

Worked example

Measuring the gap between milestones

Using only the three anchor points (2002, 2009, and August 2011), how many years passed between the start of serious feature work and ratification, and how was that span divided?

  1. 1
    Identify the start and end points

    Serious feature work began in 2002. Ratification came in August 2011.

  2. 2
    Compute the total span

    2011 minus 2002 gives 9 years for the whole effort.

  3. 3
    Compute the first segment

    From 2002 to the 2009 public-review draft is 2009 minus 2002, which is 7 years.

  4. 4
    Compute the second segment

    From the 2009 draft to the August 2011 ratification is about 2 years.

Result

About 9 years passed from serious feature work to ratification, with roughly 7 of those years before the first public draft and roughly 2 years after it.

What do you think happens?

Which part of the standard grew more from C++98 to C++11, the language itself or the standard library?

  • The language itself

  • The standard library

Reveal answer
Answer:

The standard library grew more. The language grew by about 30 percent, and the standard library grew by about 100 percent.

Most of the growth in both parts came from more detailed specification rather than from brand-new functionality.

The Waiting-Period Misconception

Many people assume that a standards body must pause after publishing a standard, waiting a set period before it can begin designing the next round of features. Members of the C++ committee held this same impression about the ISO rules. Read carefully, the situation is more specific than that. The committee believed a waiting period was required. That belief was mistaken, and it still affected the timeline.

Once the premise is corrected, the consequence becomes clear. The committee was not forced to sit idle after the earlier standard. It chose to delay serious feature work on the strength of a rule it misread. That delay is one reason the gap between the two ISO C++ standards grew so large.

The lesson for a learner is that a process can be slowed by a belief about rules, even when the rules say something different. Checking the premise before accepting a schedule constraint is a useful habit in any collaborative technical work.

The Two Design Objectives of C++11

The committee summarized the overall aims of the C++11 effort in two statements. These aims describe the effort as a whole, and they are worth remembering because they explain much of the direction the standard took.

  • Objective one: make the language better for systems programming and for building libraries. This concerns the people who build systems and libraries, who need a powerful and efficient language.
  • Objective two: make the language easier to teach and learn. This concerns the people who learn and teach the language, who benefit from clarity and simplicity.

The two objectives pull in somewhat different directions. A language built for power and efficiency can grow complicated, while a language that is easy to teach favors clarity. The committee presented both as goals of the same effort, which means C++11 was meant to serve both audiences at once rather than choosing one over the other.

How the Standard Grew and Why

The standard grew substantially between C++98 and C++11. The language grew by about 30 percent, and the standard library grew by about 100 percent. Growth of that size is easy to read as a sign of many new features, but most of it came from more detailed specification rather than new functionality. In other words, the same kinds of features were described far more precisely.

LanguageBaseline sizeLanguageAbout 30 percent largerStandard libraryBaseline sizeStandard libraryAbout 100 percent larger
How did the size of the standard change, and which kind of content accounts for most of the increase? The language grew by about 30 percent and the standard library by about 100 percent, largely through more detailed specification.

Why did the committee grow the document this way instead of adding features freely? The source points to a strong constraint: the committee had to take great care not to compromise older code through incompatible changes. It estimated that billions of lines of C++ code were in use, and it was not willing to break them. Expanding the specification without invalidating existing programs was therefore a central goal, and it is one reason the growth came through more detailed description rather than through changes that would break existing programs.

Mistakes When Reading the C++11 Timeline

  • Common mistake

    Assuming C++11 was the first ISO C++ standard

    Why it fails

    The article's own anchor points describe C++11 as the second ISO C++ standard. The earlier standard, C++98, came first.

    Do this instead

    Describe C++11 as the second ISO C++ standard, identified as ISO/IEC 14882:2011.

  • Common mistake

    Treating C++0x and C++11 as two different documents

    Why it fails

    C++0x was a working name used for years before the final name. The standard it refers to is the same document.

    Do this instead

    Use C++0x only as the historical working name for C++11.

  • Common mistake

    Blaming the entire long gap on a single rule misunderstanding

    Why it fails

    The mistaken waiting-period belief was one contributing factor. Other reasons, including how the committee operated and the growing size of modern languages, also contributed.

    Do this instead

    Name the misconception as one cause among several when explaining the delay.

  • Common mistake

    Reading the growth figures as proof of many brand-new features

    Why it fails

    Most of the growth came from more detailed specification rather than new functionality.

    Do this instead

    When you see a size increase, ask how much of it is new behavior and how much is more precise description.

Checking Your Reading of the Timeline

EASY

Without looking back, write the three anchor points in order and state how many years separated the start of serious feature work from ratification. Then explain in one sentence why the committee's belief about a waiting period mattered to that span.

Hints
  • The three anchor points are the start of serious feature work, the initial public-review draft, and the national vote.
  • The span is measured from the start of serious feature work to the August 2011 ratification.
  • The belief caused the committee to delay serious feature work, which pushed the whole timeline later.

Key Takeaways

  • The gap between the first and second ISO C++ standards was lengthened partly by a mistaken belief that ISO rules required a waiting period, which delayed serious feature work until 2002, and partly by how the committee operated and the growing size of modern languages.
  • The milestones ran from serious feature work starting in 2002, to an initial draft for public review in 2009, to ratification of ISO/IEC 14882:2011 by a 21-0 national vote in August 2011.
  • C++11, known for years as C++0x, had two stated aims: to make the language better for systems programming and library building, and to make it easier to teach and learn.
  • The standard grew by about 30 percent in the language and about 100 percent in the standard library, and most of that growth came from more detailed specification rather than new functionality, partly because billions of lines of existing code had to remain valid.

More concepts starting with C