<html><body style="font-family: Helvetica,Arial,sans-serif; font-size: 12px;">Ok, here's my memory of void *, blurred as it may be by time.<div><br></div><div>Void was put into C, but it was actually not necessary by itself -- the default return type was int, and if nobody was using the value there was no particular reason to use it.  So only those who were practitioners of the strong-type religion tended to use it.  A major problem in making C strongly typed was deciding on a return type for malloc.  It had traditionally returned char *, but this would require a cast to allow you to allocate things other than characters.</div><div><br></div><div>I was at a /usr/grp conference at the alcohol-fueled reception talking to Charlie Roberts about the problems of making C more strongly typed.  The topic of malloc came up.  All of a sudden Charlie got a huge grin on his face and said "Hey!  Why don't we have malloc return void *".   It took me a minute or two to even understand what void * could possibly mean, but the idea was an instant winner.   I seem to recall it was done a week or two later.   The idea may have simply ready to be born and others may have had it as well, but this is what I remember of it.  And the experience sticks in my mind as being an almost literal example of being "struck by an idea".</div><div><br></div><div>Steve<br><br><br><blockquote class="atmailquote"><br>----- Original Message -----<br><div id="origionalMessageFromField" style="width:100%;display:inline;background:rgb(228,228,228);"><div style="display:inline;font-weight:bold;">From:</div> "jnc@mercury.lcs.mit.edu (Noel" <Chiappa)></div><br><div id="origionalMessageToField" style="display:inline;font-weight:bold;">To:</div><tuhs@minnie.tuhs.org><br><div id="origionalMessageSentField" style="display:inline;font-weight:bold;">Cc:</div><jnc@mercury.lcs.mit.edu><br><div style="display:inline;font-weight:bold;">Sent:</div>Sun,  5 Nov 2017 10:43:06 -0500 (EST)<br><div id="origionalMessageSubjectField" style="display:inline;font-weight:bold;">Subject:</div>Re: [TUHS] origins of void*<br><br><br>
    > From: Clem Cole<br><br>
    > typing hard started to become more important in the kernel.<br><br>
I can imagine! The V6 kernel had all sorts of, ah, 'unusual' typing - as I<br>
learned to my cost when I did that hack version of 'splice()' (to allow a<br>
process in a pipline to drop out, and join the two pipes together directly),<br>
which I did in V6 (my familiar kernel haunt).<br><br>
Since a lot of code does pointer math to generate wait 'channel' numbers,<br>
e.g.:<br><br>
  sleep(ip+2, PPIPE);<br><br>
when I naively (out of habit) tried to declare my pointers to be the correct<br>
type, the math didn't work any more! ('ip', in this particular case, was<br>
declared to be an 'int *'.)<br><br>
No doubt part of this was inherited from older versions (of the system, and<br>
C); the code was working, and there was no call to tweak it. The lack of<br>
casts/coercion in the V6 C compiler may have been an issue, too - I had to do<br>
some equally odd things to make my splice() code work!<br><br>
        Noel<br></blockquote></div></body></html>