Standardization and Compatibility in Programming Languages
Many programming languages are governed by a written standard, a document that defines what the language is and how it must behave.
Why Language Standards Do Not Arrive on a Schedule
Many programming languages are governed by a written standard, a document that defines what the language is and how it must behave. Readers often imagine that such standards appear at regular intervals, like a product release calendar. For widely used languages, that is not how it works. C++11 is the current version of C++, and it was developed over a long period by the members of the standards committee known as WG21. Understanding why that work took as long as it did reveals how standardization actually operates.
What do you think happens?
Once a language standard is published, must the standards body wait a set period before it starts designing the next round of features?
Reveal answer
The committee believed a waiting period was required, but that belief was mistaken. The ISO rules did not require it.
Members of the C++ committee held this impression, and it affected the timeline even though it was wrong. Seeing how a misreading of a rule can stretch a project out is the key idea of this article.
The delay in C++11 has three contributing causes: how the committee chose to operate, the growing size of modern languages, and a belief about ISO rules that turned out to be wrong. The sections below follow the timeline first, then the reasons behind the gap, then the design aims and the growth of the standard.
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 then produced for public review in 2009. Finally, the second ISO C++ standard, identified as ISO/IEC 14882-2011, was ratified by a 21-0 national vote in August 2011. Notice two details in the last step: the vote was a national vote, and the document became formally known as the second ISO C++ standard.
Read the timeline as a sequence of stages with long gaps between them. The bulk of the elapsed time sits in the years of feature work before the draft, which is where the committee's operating choices and the misreading of the ISO rules had their effect.
From Draft Review to National Ratification
A proposed feature does not become part of the standard by being written down once. The source material describes the path from committee work to ratification in terms of a few anchor stages: committee feature work, a draft standard released for public review, and a final ratification by national vote. The flow below shows that sequence, using only the stages the source identifies.
The Waiting-Period Misconception
Many people assume that a standards body must pause after publishing a standard, waiting a set period before designing the next round of features. Members of the C++ committee held this same impression about the ISO rules. The situation is more specific than a general pause, though. The committee believed a waiting period was required, and that belief was mistaken. 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 had misread. That delay is one reason the gap between the two ISO C++ standards grew so large. It is one contributing factor, not the whole explanation, since the other reasons come from how the committee operated and from the growing size of modern languages.
The Two Aims Behind C++11
The committee summarized the overall aims of the C++11 effort in two statements. They are worth remembering because they explain much of the direction the standard took. The first aim is to make the language better for systems programming and library building. The second is to make the language easier to teach and learn.
The two aims pull in somewhat different directions. The first serves people who build systems and libraries, who need a powerful and efficient language. The second serves people who learn and teach the language, who benefit from clarity and simplicity. The effort was meant to serve both audiences at once, so a feature that helps experts but confuses learners works against one of the stated aims.
A useful way to hold the two aims together is to ask, for any proposed change, who it helps. A change that strengthens systems programming serves the first audience. A change that makes the language clearer to learners serves the second. C++11 was expected to satisfy both kinds of benefit.
Growing the Standard Without Breaking Existing Code
The standard grew substantially between editions. The language itself grew by about 30 percent, and the standard library grew by about 100 percent. Most of that growth came from more detailed specification rather than from new functionality. In other words, much of the expansion was the committee writing down behavior more precisely, not adding new features alone.
Why did the committee grow the standard mostly through detailed specification? Any new standard has to balance improvement against stability. The committee had to take great care not to compromise older code through incompatible changes. The source estimates that billions of lines of C++ code were in use, and the committee was not willing to break them. This constraint shaped the work as much as the design goals did. It is one reason the standard grew through more precise definitions rather than through changes that would invalidate existing programs.
Growth in a standard is not automatically a sign of new features. A standard can become much larger because it describes existing behavior more exactly, which helps implementers and readers without changing what correct programs do.
Working Out the Length of the Gap
Measuring the stages of the C++11 timeline
Using the three anchor dates, how long did the work from the start of serious feature work to the draft take, and how long did the stage from the draft to ratification take?
- 1Identify the anchor dates
Serious feature work began in 2002, the initial draft was produced for public review in 2009, and C++11 was ratified in August 2011.
- 2Measure the first interval
From 2002 to 2009 is 7 years. This is the span of feature work before the draft.
- 3Measure the second interval
From 2009 to August 2011 is roughly 2 years. The exact month of the 2009 draft is not given, so this is an approximation.
- 4Compare the intervals
The feature-work stage is the longer of the two, so most of the elapsed time came before the draft existed.
Serious feature work took about 7 years before the draft, and the draft-to-ratification stage took about 2 years. The longer stage is the one that includes the years of feature work.
Mistakes When Reading About C++11
Common mistake Assuming the ISO rules forced a waiting period after the earlier standard
What it looks likeConcluding that the gap was unavoidable because a rule required the committee to pause.
Why it failsThe committee believed a waiting period was required, but that belief was mistaken. The delay came from a choice made on the strength of a misreading.
Do this insteadTreat the waiting period as a belief the committee held, and count it as one contributing factor alongside the other causes.
Common mistake Treating C++0x as a different document from C++11
What it looks likeLooking for a separate standard named C++0x and wondering how it differs from C++11.
Why it failsC++0x was a working name that reflected the hope of finishing in the current decade. The name changed, but the standard it refers to is the same document.
Do this insteadRead C++0x and C++11 as two names for one standard.
Common mistake Assuming the 30 and 100 percent growth figures were mostly new features
What it looks likeBelieving the library doubled because it gained many new capabilities.
Why it failsMost of the growth came from more detailed specification rather than new functionality.
Do this insteadRead the growth as a sign of more precise definitions, and ask separately which parts added new behavior.
Common mistake Confusing the two aims by assuming they target the same audience, when one serves system and library builders and the other serves learners and teachers.
Checking Your Understanding of the Timeline
Without looking back, put these events in order and state roughly how far apart the first two are: C++11 ratified by a 21-0 national vote, serious feature work begins, initial draft produced for public review.
Hints
- Start with the year feature work began.
- The draft was produced for public review in 2009, which is before the national vote.
- Subtract the earlier year from the later one to estimate the gap.
Explain, in your own words, why the gap between the second and first ISO C++ standards was lengthened, and name the two aims of C++11 and the audience each one serves.
Hints
- Consider the misreading of the ISO rules as one cause.
- Recall the two audiences: system and library builders, and learners and teachers.
Key Takeaways
- C++11, known for years as C++0x, was ratified as the second ISO C++ standard by a 21-0 national vote in August 2011, after serious feature work began in 2002 and an initial draft was released for public review in 2009.
- The gap between the standards was lengthened partly by a mistaken belief that ISO rules required a waiting period before new feature work, along with other factors in how the committee operated and the growing size of modern languages.
- The two stated aims of C++11 were to improve the language for systems programming and library building, and to make it easier to teach and learn.
- The language grew by about 30 percent and the standard library by about 100 percent, mostly through more detailed specification rather than new functionality, because billions of lines of existing C++ code had to keep working.