Hacker News new | past | comments | ask | show | jobs | submit login

Thank you for posting the non-computer definition of the word. I was aware of that before I posted.

A large fraction of the words I use in physics and math are not used the same way, within the field, as the generic dictionary definition.




I would say the definition linked is the computer science definition. Its just commonly the case that the compilation target is some final binary, but in this case it is an html document. A lot of the terminology in CS stems from analogous similar actions we perform in real life (I saw an article a week or two ago on here listing all terms used in an instance like this)

I hate it when people blindly post definitions like this without explanation, it comes off super aggressive and doesn't solve much.


CS history has a long history of similar pieces of software being not called compilers.

Normal CS jargon has "assemblers" and "linkers", both of which might appear to be compilers according to this dictionary definition.

CS history also includes things like TeX, which formats text for a variety of outputs, and was rarely called a compiler.

Web browsers often include a JIT compiler for Javascript, but their text formatting system isn't usually called a compiler.


I wrote a long comment, and immediately deleted it because I'm trying to avoid being a confrontational jerk.

I disagree with your assessment of "normal CS jargon". I'm wondering if you mean "normal jargon in the C/C++ community".

In my experience with compiler textbooks and computer science professors who specialize in compilers, compilers are any formal-language-to-formal-language translator. Yes, sometimes sub-types of compilers have specific names, but they are all compilers.

Is there one word for the subject material of the dragon book? I think there is, and I think that word is "compiler". Including source-to-source translators, including assemblers, including preprocessors, including linkers.


I'm glad you're not trying to be a confrontational jerk. I'm all for disagreeing politely.

The project in which I worked on a C++-to-C translator didn't call it a compiler, it called it a source-to-source translator. It was a CS project in a CS department funded by the NSF. I have read the Dragon Book, and would be surprised if the authors would consider an interpreter, assembler, or a linker to be a compiler.

So yeah. I don't expect you to agree with my opinion, but I do appreciate it that you're trying to avoid being confrontational jerk.


In my understanding, interpreters are generally not considered a member of this category, as they don't in general have formal languages as output. That is, I believe that a classically-defined compiler operates offline (there's no feedback from output to input during a given run of the compiler), and an interpreter generally operates online. Of course, to a sufficiently theoretical theorist, online is just a special case of offline, but of course to real software that is absolute nonsense.

--

As for the dragon book... okay, I got over my laziness and went and got my copy of the dragon book. I see no edition number, but this copy is "reprinted with corrections 1988". 33rd printing.

Page 1. "a compiler is a program that reads a program written in one language - the source language - and translates it into an equivalent program in another language - the target language".

Page 1. "Target languages are equally varied; a target language may be another programming language, or the machine language of any computer...."

Page 17. "Some compilers produce assembly code, that is passed to an assembler for further processing. Other compilers perform the job of the assembler" (emphasis mine: they explicitly state that assemblers are compilers)

--

Edited to add: Btw, I feel like I'm on the shakiest ground claiming that linkers are compilers, and probably the problem there is that my understanding of what qualifies as a linker is shakier than most of the rest of this subject.

--

In general, if I had bought a pickup truck, I'd be more likely to describe it as a "truck" than as a "vehicle". If I was seeking grant funding for a source-to-source translator, maybe it would be prudent to use specific language in my grant application (I understand that grant-writing is an art).

However, if someone else in a blog post about their hatchback called it a "tiny vehicle", and that blog post was posted to hacker news, it'd be weird to call them out on it. They're not wrong, their hatchback is indeed a vehicle!


Thanks for this. I did spend a lot of time pondering over whether I wanted to use the word "compiler" or "interpreter," but in the end it was my CS students who encouraged me to use the term that more people would recognize than the one that is technically more accurate.

This is my first time sharing one of my tutorials on HN so I am still feeling out where I will slip and where I can slide.


Thanks for pointing out that the other choice is perhaps technically more accurate -- I'm getting a lot of downvotes for pointing that out.

The Internet is often more like a bar brawl than a reasoned conversation.


The really gross part is... to my eye, the deeper into the thread we get, the more upvotable your comments get ("kind, thoughtful, substantive", to quote the guidelines), but the lighter gray they are. Although I've downvoted none, I can kinda see downvoting the top-level comment as being snarky, but that comment is solid black. Topsy turvy.


Thank you! I have the same amount of snark now as the top comment, i.e. none that I can tell. It would be nice to have a conversation about this topic that didn't involve me being downvoted.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: