Exploration of the interplay between computer architecture and programming languages, with a focus on applying PL formalisms and techniques to emerging computer architecture research. The course is structured into three parts: 1) Topics in novel computer architectures/computing paradigms (dataflow processing, intermittent computing, persistent memory, reconfigurable architectures, etc.); 2) PL*for* computer architecture (design of hardware description languages and high-level synthesis languages, etc.); 3) Problems of end-to-end correctness guarantees (verified and secure compilation, full-stack correctness proofs, etc.). This is a seminar course where students read and present papers, as well as carry out a research project.