Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Just curious, what's wrong with writing a compiler for a C-like language in itself?

It seems to me that one of the goals of a compiler course is to fill the mysterious gap between what machines do and what high-level languages do. For maximum educational effect, the language being compiled should be the same as the language used for the compiler. Anything higher level than C would probably require a runtime, with garbage collection etc., so a C-like language seems like the obvious sweet spot.



Well, because writing a compiler is pretty hard, and I would like to not juggle pointers to arrays of pointers while doing it. C wastes your time, basically. And a C-like language is profoundly unexciting, at least to me; I can almost see the assembly lying underneath.


Well, they could write a list in python, but that's more a single night's homework than an entire class (with the appropriate foreknowledge) to my understanding, so what's an interesting middle ground? A logical language (e.g. Prolog) would be interesting, but I have no idea the complexities involved. I imagine implementing in python would reduce the complexities of the actual programming step allowing more time for what I think are the interesting parts of a compiler course.


What would you propose instead? Which language is easy enough to compile, and pleasant enough to write a compiler in?


My compilers course used Java to implement a simplified Java-like language. Writing a compiler in Java isn't as gloriously straightforward as in Lisp/ML/Haskell, but it's a lot less annoying than C.


Lisp derived languages are quite easy to implement, e.g. "An Incremental Approach to Compiler Construction" paper.

Wirth has published compiler books based on Pascal and Oberon, quite simple single pass implementations.

The language proposed by the Tiger book variants (a ML like language) is also quite simple to implement.


> Which language is easy enough to compile, and pleasant enough to write a compiler in?

Why write a self-hosting compiler? Use Haskell to write a C compiler, if you must.

(If you want the identity there, use a Scheme to write a Scheme compiler.)




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

Search: