This book examines the important role semantics will have in the future development of software systems and domain specific languages. It presents the fundamental ideas behind these approaches, stresses their relationship by formulating and proving the relevant theorems, and illustrates the applications of semantics in computer science. Coverage investigates the relationship between the various methods and describes some of the main ideas used. It illustrates these via historically important application areas together with some exciting potential applications, including validating prototype implementations of programming languages, verifying program analyses that are part of more advanced implementations of programming languages, verifying security analyses, and verifying useful program properties including information about execution time.