We survey the use of Abstract State Machines in the area of programming languages, namely to define behavioral properties of programs at source, intermediate and machine levels in a way that is amenable to mathematical and experimental analysis by practitioners, like correctness and completeness of compilers, etc. We illustrate how theorems about such properties can be integrated into a modular development of programming languages and programs, using as example a Java/JVM compilation correctness theorem about defining, interpreting, compiling, and executing Java/JVM code. We show how programming features (read: programming constructs) modularize not only the source programs, but also the program property statements and their proofs. 1 1 This text originates from an invited lecture for the Workshop on Scalable Language Specification at Microsoft Research Cambridge, June 25-27, 2013. 2 Listening to lectures I had invited Yuri Gurevich to deliver in the years 1986, 1987 and 1991 to the computer science PhD program in Pisa. See [57, Ch.9] or [26] for historical details and references. 3 ASM refinement differs from other refinement concepts in the literature by allowing one to refine in combination both the data structures (which make up the ASM state) and the computation steps (which are described by the ASM rules). More precisely, to relate abstract and refined runs for stating and proving the desired run properties, one can determine five features: a) the targeted refined data structure, b) appropriate pairs of corresponding abstract and refined states of interest one wants to relate, c) segments of abstract and refined computation steps leading from one pair of corresponding states of interest to the next one, d) sets of abstract and refined locations of interest one wants to compare, e) the equivalence properties or whatever comparison one wants to establish, see [28,29] for details. Horizontal resp. vertical ASM refinement includes Java's "extends" resp. "implements". 4 The early work on specification and analysis of logic programming systems using ASMs, carried out in the period 1988-1994, is surveyed in the Proceedings of the first international ASM workshop which was organized as part of the 13th World Computer Congress, see [23].