It sounds like the start of a joke, but what’s the difference between taking Cornell’s CS6120 online and in-person? The instructor, [Adrian Samspon] notes that the real class has deadlines, an end-of-semester project, and a discussion board that is only open to real-life students. He also notes that you only earn “imagination credits.”
Still, this is a great opportunity to essentially audit a PhD-level computer science class on a fascinating topic. The course consists of videos, papers, and open source projects using LLVM and a custom internal representation based on JSON that is made for the class. It is all open source, too. You do however need access to the papers, some of which are behind paywalls. Your local library can help if you can’t otherwise find copies of the papers.
The topics include internal representation of programs, simple optimizations, data flow, global analysis and optimization, and practical topics about LLVM. With the basics out of the way, the class turns to some classic topics like loop optimization and alias analysis, along with some more modern topics like memory management and dynamic compilers.
The final part has some more cutting-edge reading about concurrency and parallelism. We suspect you should probably be pretty fluent in programming languages before attempting this course. Of course, not everyone needs to know how to write a compiler. But if you do, this is great stuff. Even if you don’t, it is a chance to expand your understanding of how things work under the hood.
We’ve looked at [Adrian’s] thoughts on LLVM before and you might find that post a useful adjunct to this course. If you want something more practical and less theoretical, there’s the C compiler we looked at before.