back to 1977, knowing what we know now, we could have made all this easier simply by insisting on more consistent use of typedef. In 1977, however, it would have been difficult to think ahead 20 years to 64-bit micros—we were just getting to 32-bit minis!

This process might also have been eased if more vendors had been further along in 64-bit implementations in 1992. Many people had either forgotten the lessons of the PDP-11/VAX era or had not been involved then. In any case, the 64/32 systems had a more stringent requirement: 64-bit and 32- bit programs would coexist forever in the same systems.

Timing is important to creating good industry standards. Too early, standards may be written with insufficient practical experience because no one has real implementations from which to learn. Too late, and vendors may well have committed to numerous incompatible implementations. In between, a few groups have early implementations to help inform the standards. Perhaps by accident, the 64-bit C standards were reasonably well-timed.

lessons

˲ Standards often get created in nonstandard ways, and often, de facto standards long precede official ones.

˲ Reasonable people can disagree, especially when looking at different sets of data.

˲ Sometimes one must work with competitors to make anything reasonable happen.

˲ Programmers take advantage of extra bits or ambiguity of specification. Most of the arguments happen because application programmers make differing implicit assumptions.

˲ Code can be recompiled, but once data gets written somewhere, any new

code must still be able to describe it cleanly. Current software is rarely done from scratch but has to exist inside a large ecosystem.

˲ We might never build 128-bit computers, but it would probably be good to invent a notation for 128-bit integers, whose generated code on 64-bit CPUs is about the same as 64-bit code is on 32-bit CPUs. It would be nice to do that long before it is really needed. In general, predictable long-term problems are most efficiently solved with a little planning, not with frenzied efforts when the problem is imminent. Fortunately, 128-bitters are many years away, if ever (maybe 2020–2040), because we’ve just multiplied our addressing size by four billion, and that will last a while, even if Moore’s Law continues that long! In case 128-bit happens in 2020, however, it would be wise to be thinking about the next integer size around 2010.

Of course, when the S/360 was introduced, IBM and other vendors had 36- and 18-bit product lines. In an alternate universe, had the S/360 been a 36-bit architecture with four 9-bit bytes/word, most later machines would have been 18- and 36-bit, and we would just be starting the 36-bit to 72-bit transition.

˲ Hardware decisions last a long time, but software decisions may well last longer. If you are a practicing programmer, take pity on those who end up maintaining your code, and spend some time thinking ahead. Allow for natural expansion of hardware, hide low-level details, and use the highest-level languages you can. C’s ability to make efficient use of hardware can be both a blessing and a curse.

conclusion

Some decisions last a very long time. The 24-bit addressing of 1964’s S/360

is still with us, as are some side effects of C usage in the mid-1970s. The transition to 64-bit probably took longer than it needed for a host of reasons. It’s too bad that people quite often have been unable to use affordable memory for solving performance problems or avoiding cumbersome programming.

It’s too bad there has been so much “toil and trouble,” but “double” for microprocessors has been accomplished, and “double” for software is at least under way, and people have stopped argu-ing about the need for 64-bit micros.

 

References

1. aspen Data model committee. 64-bit programming models: why lP64? (1997–1998); www.unix.org/ version2/whatsnew/ lp64_wp.html.

2. bell, c.g. and mudge, J.c. the evolution of the PDP- 11. Computer Engineering: A DEC View of Computer System Design. c.g. bell, J.c. mudge, and J.e. mcnamara, eds. Digital Press, bedford, ma, 1978.

3. Josey, a. Data size neutrality and 64-bit support (1997); www.usenix.org/publications/login/ standards/ 10.data.ht ml.

4. mashey, J. languages, levels, libraries, longevity. ACM Queue 2, 9 (2004–2005), 32–38.

5. mashey, J. 64-bit computing. BY TE (sept. 1991), 135–142. 9 (the complete text can also be found by searching google groups comp.arch: mashey byte 1991).

6. rationale for international standard—Programming languages—c; www.open-std.org/jtc1/sc22/wg14/ www/docs/n897.pdf (or other sites).

7. strecker, w. D. Vax-11/780: a virtual address extension to the Dec PDP- 11 family. Computer Engineering: A DEC View of Computer System Design. c.g. bell, J.c. mudge, and J.e. mcnamara, eds. Digital Press, bedford, ma, 1978.

8. unix specification; adding support for arbitrary file sizes; www.unix.org/version2/whatsnew/lfs20mar. html.

John Mashey is a consultant for venture capitalists and technology companies, sits on various technology advisory boards of startup companies, and is a trustee of the computer history museum. along with spending 10 years at bell laboratories working on the Programmer’s workbench version of unix, he was also one of the designers of the miPs risc architecture, one of the founders of the sPec benchmarking group, and chief scientist at silicon graphics. a previous version of this article appeared in the october 2006 issue of ACM Queue.

© 2009 acm 0001-0782/09/0100 $5.00

iBm 64-bit zSeries (S/360 descendent); 24-bit addressing still supported

microsoft Windows 64-bit for Itanium

amD
64-bit X86
(now called AMD64)

intel

64-bit Itanium

intel

64-bit X86, (called EMT64), compatible with AMD

microsoft
Windows XP Professional
x64 for X86; LLP64
(or IL32LLP64)

2001
2002
2003
2004
2005

References:

http://www.unix.org/version2/whatsnew/lfs20mar.html

http://www.unix.org/version2/whatsnew/lp64_wp.html

http://www.unix.org/version2/whatsnew/lp64_wp.html

http://www.usenix.org/publications/login/standards/10.data.html

http://www.usenix.org/publications/login/standards/10.data.html

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n897.pdf

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n897.pdf

http://www.unix.org/version2/whatsnew/lfs20mar.html

Archives