It seems that the distinction might have been clearer a few decades ago. Something like this: The compiler was the tool that would transform a high-level language into a machine-specific representation, and the assembler was something that would take a machine-specific representation and turn it into executable code, via mostly simple one-to-one transformations. (And we still see what-we-call-compilers invoking what-we-call-assemblers for the final step. Not always, of course, but it's not an uncommon pattern.)
But I agree that the lines are most definitely blurred today, with systems that do dynamic translation (or "JIT"), compilers that output bytecode, optimization, and assemblers that include higher-level language constructs. When you take a step back, it all sort of blends together.
BigEd wrote:
I think Grace Hopper's use of "compile" was in the sense of stringing together useful library routines to make a program - in the days when such routines would include things like arithmetic. As memory is one dimensional, this seems fitting - each routine needs to end up with an address, the routines need to be in some order. In those days, each routine might also need to be patched with the calling addresses of the routines it uses.
I remember reading an argument somewhere that as the various stages of transformations got their own names, like "linking" and "relocating", we sort of ended up with the word "compile" meaning what it does sort of by default, as the thing that was left over when everything else had its own name.
It was probably in a book on early computing history, but I can't remember the name now.
Quote:
(As I probably said elsewhere, I think it's not helpful to argue about terminology within threads about something else, and as with all communication, it helps for the reader to put in a little effort to understand the writer's intent. Language changes, over time and over distance. Better to learn someone else's dialect than to try to get them to change. We can still have an interesting discussion about the differences, in the right place.)
Very true. Vast amounts of heated online discussion exist only because two people have different definitions of terms. I'd add that it takes self-restraint and energy to step back and try to examine a discussion from a neutral point of view, and a willingness to risk looking weak to post something else than "you're wrong!" in order to dissolve disagreements. We're often not very good at that sort of thing.