ANSI C++ Standardization Meeting.

[Note: This was originally written for "FYI", the internal newsletter for the worldwide software engineering departments of Dendrite International]

There was about 75 of us, sitting around a table in a meeting hall of a hotel just outside Philadelphia. Representative were there from all parts of the US, and a several foreign countries, with the intention of defining how much of the world will be programming for the next decade: To establish the ANSI Standard for C++.

While ANSI rules limit who can vote on proposals, they require committees to let anyone have their say on them, so it was easy enough for me to gate-crash the proceedings -- I just had to show up and sign the attendance sheet. The attendees were some of the last of the hard-core computer hackers -- there were more men with long hair and earrings wearing blue jeans than there were neckties and women - combined. Among the familiar names among committee members were Bjarne Stroustrap, the original designer of C++, and Andy Koenig, both of AT&T , Dan Saks, Bruce Eckel, Tom Plum, and Jerry Schwartz, the original author of iostreams. There was also representatives from Microsoft, Novell, and Rogue Wave. I was told that Borland normally sends someone, although he wasn’t there that week, nor anyone from Symantec. I spend most of the first day kibitzing with the guy next to me, who was often playing Windows Solitaire on his laptop, and then discovered he was P.J. Plauger, the editor of The C/C++ Users Journal. (So, have I dropped enough names yet?)

The meeting was actually a joint meeting of ANSI (the American National Standards Institute), and ISO (the International Standards Organization), for which ANSI is the US representative. Traditionally, ANSI would devise an official US standard for something, whether it be a computer language, a roller skate, or a toothpaste, and that would become the US’s recommendation to the ISO standard, which would probably modify it a bit. Since the programming community felt a strong need for a single world-wide standard, they’ve combined the meetings.

The ANSI meeting officially ran Monday through Friday, Nov. 7th thru 11th, with the ISO conference technically starting Sunday evening when the international delegates met over dinner to discuss any problems specific to their countries. At the meeting there were 7 ISO representative present (USA, Canada, UK, Germany, Australia, Japan, and Sweden). The next morning, the rest of the attendees showed up. As would come as a surprise to no one, I was a few minutes late, taking a seat just in time to have a microphone passed to me, as everyone at the table identified themselves and the company they represented.

Monday morning was spend mostly a procedure issues -- establishing who can vote, and a detailed overview if the proposals for the committee to deal with. In the afternoon, and all of Tuesday, we broke up into several "working groups", each devoted to a specific area of the language. These groups were the Core group, which dealt with the very technical areas of concern mostly to compiler writers; the Syntax group, which details how the language is parsed, and maintains the very detailed BNF syntax of the language; the Extensions group, which debates new features of the language; the C compatibility group, the Environment group, and the Library group.

Attendees were free to join any of the groups, with most people sitting in the Extensions or Library group-- both groups had over 20 people, the other groups had about five to ten each. Since function libraries have always been an interest of mine, I joined that group. Most of what we talked about had to do with the Standard Template Library (STL), which was voted into the standard at the last meeting. This is one of those "This Changes Everything" amendments..

The STL is a collection of template classes, mostly for containers, which was developed by Hewlett-Packard, and which they’d now placed into the public domain. It has templates for vectors (random access iterators), lists (bi-directional iterators), queues, deques, priority queues, sets (unique keys) multisets (nonunique keys), maps (hash table with unique keys), multimaps (nonunique keys). An iterator is a different class which acts as a pointer to an object in your collection. So if *Iter is the first item in your set, ++Iter will point to the next one, regardless of how it’s stored in memory. One of the features of the STL, is that it is extremely consistent, so that each collection has the same member functions, and can be operated on in the same ways. It is so complete, that we were able to eliminate three other classes that were to be included in the standard library, bit_string, dyn_array, and ptr_dyn_array, as the STL now made them redundant.

One of the cool things that we added to the STL that week was "Run-time variable allocators". As originally proposed, the STL allowed a "allocator" class to be defined is the template instaniation. This allowed for such things as near & far pointers, and garbage collection, but proved limiting. The new proposal allows the allocator to be changed at run-time, and permits the programmer to create lists of objects in shared-memory regions, private heaps, terabyte memory-mapped files, even object-oriented databases, and step through them like any list in memory.

That proposal shows the dynamic nature of the meeting. The proposal was first sent out via email on 23-Oct-94. On Monday, 9-Nov, it was presented to the working group and then withdrawn. That night, it’s author, Nathan Myers of Rogue Wave, with Keith Strickland from an object-database company, reworked it over dinner, rewrote it and created a PowerPoint presentation for it at 2AM in his hotel room, and presented the new version to the working group on Tuesday. Then on Tuesday evening, Nathan presented a special technical session, where he explain the revised proposal in depth to whoever wished to attended.

On Wednesday, the full committee reassembled and each of the working groups presented the results of their discussions, and preliminary votes of the whole committee were taken on them. Many of the proposals were just clarifications to the standard, as opposed to full-fledged changes. This day I sat next to Jon Caves, the Microsoft rep. As the finding were announced, he would type test programs in his laptop, to see if the change would break the compiler. When I noticed that he was getting some strange error message, he said that when he downloaded the latest build of the compiler that morning from Redmond, he forgot to get the error message file as well. Microsoft, so it seems, wasn’t even waiting for the meeting to end to start adjusting it’s compiler for it.

After the meeting adjourned for the night on Wednesday, I came back home, for, as we all know, CTS would came to a crashing halt without me. On Thursday, everything decided on by the preliminary votes of Wednesday, would be presented as formal motions and receive a binding vote on Friday.

The ANSI/ISO meeting are held three times a year, in March, July, and November, with the July meeting generally being held outside the USA (Last July, it was in Canada). The next meeting is scheduled for March of 1995 in Austin, TX. After that, the meeting are:

They expect to formally release the draft standard for public review at the Austin, TX, and plan on two rounds of public commentary. If all goes as planned, the Standard will be officially accepted at the Stockholm meeting. And, if their pattern holds, the March ’96 meeting should be on the East Coast of the US, so I might be at that one as well.

Copyright © 1994, James M. Curran