4 ms·
Is this written in C? If so, what compiled this? Sorry for the noob question, I'm just a little lost.
by habosa 13y ago
Is this written in C? If so, what compiled this? Sorry for the noob question, I'm just a little lost.
- jshou 13y agoIt compiles itself! http://en.wikipedia.org/wiki/Bootstrapping_(compilers) http://en.wikipedia.org/wiki/Bootstrapping_(compilers)
- kibibu 13y agoPresumably the first step on the road to a self-compiling C compiler was written in B.
- habosa 13y agoI understand bootstrapping, but at some point there has to exist some outside compiler in another language or a hand-compiled version of this otherwise the chicken and egg chain never ends.
- coliveira 13y agoYou can use any language available in the machine to create the first, most basic compiler. You can also use a cross-compiler if a compiler for the language already exists for another machine. If all else fails, you can write the proto-compiler in assembly.
- sytelus 13y agoThe very first compilers were tediously written in assembly. Bill Gates wrote his first version of Basic in assembly. I believe all early Fortran compilers were written in direct machine code through punch cards! Coding in assembly is not all that bad :). Once you got some compiler going, you can write more complex compiler with it and keep adding more syntactic sugar :).
- GnarfGnarf 13y agoCoding in Assembly was a gas! I wrote applications in IBM BAL in the 70's. G/L, Payroll, Inventory. We did it in part because we had so little memory (typically 64K to 131K), we had to squeeze every drop we could out of available memory. I worked on Univac 9400s. We received the O/S in source code form (Assembly) on tape. We ran it through a parametizer (PROC), compiled the resulting source, and that's what the customer ran with. You haven't lived until you've stepped through your code one instruction at a time, displaying op codes and raw binary data on the maintenance panel lights.
- guelo 13y agoThe mysterious true origins of bootstrapping compilers.
- tcas 13y agoLooks like a very early dialect. C assumes everything is an int unless specified otherwise. You can declare parameter types after the function name. So: init(s, t) char s[]; { would be equivalent to: int init(char s[], int t) { This still works with modern compilers. I'd be interested if anyone has any more info about this: waste() /* waste space */ { waste(waste(waste),waste(waste),waste(waste)); waste(waste(waste),waste(waste),waste(waste)); waste(waste(waste),waste(waste),waste(waste)); waste(waste(waste),waste(waste),waste(waste)); waste(waste(waste),waste(waste),waste(waste)); waste(waste(waste),waste(waste),waste(waste)); waste(waste(waste),waste(waste),waste(waste)); waste(waste(waste),waste(waste),waste(waste)); } Found in last1120c/c10.c
- cwzwarich 13y agoFrom the linked description (http://www.cs.bell-labs.com/who/dmr/primevalC.html http://www.cs.bell-labs.com/who/dmr/primevalC.html): A second, less noticeable, but astonishing peculiarity is the space allocation: temporary storage is allocated that deliberately overwrites the beginning of the program, smashing its initialization code to save space. The two compilers differ in the details in how they cope with this. In the earlier one, the start is found by naming a function; in the later, the start is simply taken to be 0. This indicates that the first compiler was written before we had a machine with memory mapping, so the origin of the program was not at location 0, whereas by the time of the second, we had a PDP-11 that did provide mapping. (See the Unix History paper). In one of the files (prestruct-c/c10.c) the kludgery is especially evident.
- tcas 13y agoDoh, I completely glossed over the readme and went straight to the code. That makes sense -- Thanks! Cool to think that that waste function can still compile with todays compilers. A quick disassembly it seems to take up 751 bytes compiled on x64 using clang on O0.
- enf 13y agoThat was the standard way of declaring parameter types until ANSI C in 1989. C actually copied the current style back from C++.
- ghshephard 13y agoFrom the link on GitHub: http://cm.bell-labs.com/cm/cs/who/dmr/primevalC.html http://cm.bell-labs.com/cm/cs/who/dmr/primevalC.html Which led me to here: http://cm.bell-labs.com/cm/cs/who/dmr/chist.html http://cm.bell-labs.com/cm/cs/who/dmr/chist.html Where, if you take the time, you will find a wonderful story, upon completing, you will probably know more about the early embryonic history of C then 95% of your peers. (Spoiler - We start with BCPL, then Move to B - it's left as an exercise to determine how we originally compiled BCPL)
- hkmurakami 13y agocoupled with user:rmrfrmrf's pseudo-religious post praising the code, I read the second url as "christ" :P Oh how our minds play tricks on us!
- mseepgood 13y ago> (Spoiler - We start with BCPL, then Move to B - it's left as an exercise to determine how we originally compiled BCPL) The first version of Go started with B: http://code.google.com/p/go/source/detail?r=f6182e5abf5e http://code.google.com/p/go/source/detail?r=f6182e5abf5e The second revision was converted to C: http://code.google.com/p/go/source/detail?name=f6182e5abf5e&r=b66d0bf8da3e1829323172e37fd7616ad8df03a5 http://code.google.com/p/go/source/detail?name=f6182e5abf5e&... The third to Draft-Proposed ANSI C: http://code.google.com/p/go/source/detail?name=f6182e5abf5e&r=ac3363d7e788ba8ef6f692d6ef75db36674d07c7 http://code.google.com/p/go/source/detail?name=f6182e5abf5e&... And the fourth to ANSI C: http://code.google.com/p/go/source/detail?name=f6182e5abf5e&r=172d32922e729198442edca66c5c3fa8a992b891 http://code.google.com/p/go/source/detail?name=f6182e5abf5e&...
- lifthrasiir 13y agoThey definitely messed up with a conversion from Subversion to Mercurial. ;)
- chubot 13y agoUh these commits seem interesting, but I don't quite understand the context. What's macho and what is its relation to go? Are the dates way off or is it an import of older history?
- btilly 13y agoYour question is answered at length in http://plan9.bell-labs.com/who/dmr/chist.html http://plan9.bell-labs.com/who/dmr/chist.html. But it is common to write compilers some subset of the language that you want to compile, see http://en.wikipedia.org/wiki/Bootstrapping_(compilers) http://en.wikipedia.org/wiki/Bootstrapping_(compilers).
- Jach 13y agoOne might write a compiler from language X to language Y first in assembly, then when that works, write a new compiler from language X to language Y in language X itself and use the previous compiler to compile it. Presumably they already had a C compiler that they used to get this one compiled, then it can compile itself afterwards.
- lanna 13y agoA compiler has to do a lot more than parse a source file and translate it to target code: error checking and reporting, optimization, etc. To compile a C compiler, you don't need a full-blown C compiler. For instance, I bet floats and doubles are not used. Therefore, you can write a barebones proto-C compiler in whatever language you have available and use it to bootstrap your compiler. Rinse and repeat.
- deleted 13y ago[deleted]