5 ms·
Yes, int_16/int_32 or something like that makes a lot more sense. Today, not when this compiler was written. The PDP-9, PDP-10, and PDP-18 have 18 bits registe
by iasmseanyoung 6y ago
Yes, int_16/int_32 or something like that makes a lot more sense. Today, not when this compiler was written.
The PDP-9, PDP-10, and PDP-18 have 18 bits registers. The world had not settled on 16/32/64 bits at all.
Even the intel 80286 far/fat pointers are 24 bits.
- doctor_eval 6y agoUnsure why you’re being downvoted, IIRC the original C programmers reference spoke explicitly about how “int” meant the most efficient unit of storage on the target machine. Admittedly I read that more than 30 years ago :-O
- fanf2 6y agoAn int in C was 16 bits until about 1980 when Unix started being ported to larger machines. C and Unix were originally just for the PDP11.
- kps 6y agoUnix was originally written for an 18-bit machine.
- fanf2 6y agoThat was before C which is what we are talking about.
- skissane 6y agoAs this paper [0] explains, the initial version of the C compiler for PDP-11 Unix was finished in 1972. And less than a year later (1973), people had ported the C compiler (but not Unix) to Honeywell 6000 series mainframes, and shortly thereafter to IBM 370 series mainframes as well. (Note the text of the paper says "IBM 310" in a couple of places – that's a typo/transcription error for "370".) Both were "larger machines" – the Honeywell 6000 had 36 bit integer arithmetic with 18 bit addressing; the IBM 370 had 32 bit integer arithmetic with 24 bit addressing. Alan Snyder's 1974 masters thesis [1] describes the Honeywell 6000 GCOS port in some detail. In 1977, there were three different ports of Unix underway – Interdata 7/32 port at Wollongong University in Australia, Interdata 8/32 port at Bell Labs, and IBM 370 mainframe port at Princeton University – and those three had C compilers too. [0] https://www.bell-labs.com/usr/dmr/www/portpap.pdf https://www.bell-labs.com/usr/dmr/www/portpap.pdf [1] https://apps.dtic.mil/dtic/tr/fulltext/u2/a010218.pdf https://apps.dtic.mil/dtic/tr/fulltext/u2/a010218.pdf (his actual thesis was submitted to MIT in 1974; this PDF is a 1975 republication of his thesis as an MIT Project MAC technical report)
- skissane 6y agoHere’s something cool: the source code to Snyder’s compiler: https://github.com/PDP-10/Snyder-C-compiler https://github.com/PDP-10/Snyder-C-compiler
- skissane 6y agoC’s type naming had real value when it was first designed, at a time when the industry hadn’t yet fully standardised on the 8-bit byte, 32/64-bit words, IEEE floating point, etc. The fact that “int” could be 16-bits on a PDP-11, 32 on an IBM 370, 36 on a PDP-10 or Honeywell 6000 - that was a real aid for portability in those days. But nowadays, that’s really historical baggage that causes more problems than it solves, yet we are stuck with it. I think if one was designing C today, one would probably use something like i8,i16,i32,i64,u8,u16,u32,u64,f32,f64,etc instead. When I write C code, I use stdint.h a lot. I think that’s the best option.
- hakanai 6y agoIf you need an 18-bit int it would be called int18 under this scheme. And encountering things like int18 in code, at least you would never wonder what kind of int it was.