{"title":"理解程序设计语言的回顾","authors":"A. Butterfield","doi":"10.1145/3569959","DOIUrl":null,"url":null,"abstract":"First, a disclosure: I had every intention of buying this book before being offered the chance to review it. This was due mainly to the fact that my introduction to formal methods was via a previous book by the same author [1]! This book shows how formal specifications and semantics can enhance the quality of program and specification language development by clarifying key concepts early, and providing a clear basis for assessing the correctness of their implementations. The material in this book has also been used in final-year undergraduate teaching for a decade. This book is much more than a textbook, however. It mixes complete technical examples with commentary and copious historical notes about the development of programming languages, and their on/off relationship with formal techniques. This commentary makes the book a very natural and fluid read, and worth dipping into, as well as reading in order. Another key feature of the book is the introduction and discussion of various “Challenges” and “Language Issues.” There are 8 of the former, and 46 of the latter. These help to distill out key aspects and concerns. The book starts by showing how the ideas develop for “typical” (i.e., imperative) programming languages. This starts by using VDM notation to specify a structured operational semantics for a simple untyped imperative language. It then adds more features such as types, and code blocks. A key theme of this book is how the very definition of the semantic objects determines what the (dynamic) semantic possibilities will be. For example, dealing with memory locations, the choice to make them uninterpreted tokens rather than numbers, means that address arithmetic is ruled out. This is a significant semantic modelling choice. The remainder of the book starts to look at more complex language features, such as object orientation, records, pointers, functions/procedures, and concurrency leading to a semantics for a concurrent object-oriented language. Chapter 8 looks at shared variable concurrency and all its challenges. It shows how small-step operation semantics is able to model the non-deterministic interleaving behaviour. It then turns its attention to proof techniques, ranging from Rely/Guarantee, to Concurrent Separation Logic, and very recent mixings of the two. The author also makes the point that any process algebra that can model state change has to deal with the issue of interference: this includes CCS, CSP, and many others. Chapter 9 builds on Chapter 8 to combine concurrency with OO, in the form of the COOL language. As already mentioned above, just describing the semantic objects suffices to define the","PeriodicalId":50432,"journal":{"name":"Formal Aspects of Computing","volume":" ","pages":"1 - 2"},"PeriodicalIF":1.4000,"publicationDate":"2022-12-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"0","resultStr":"{\"title\":\"Review of Understanding Programming Languages\",\"authors\":\"A. Butterfield\",\"doi\":\"10.1145/3569959\",\"DOIUrl\":null,\"url\":null,\"abstract\":\"First, a disclosure: I had every intention of buying this book before being offered the chance to review it. This was due mainly to the fact that my introduction to formal methods was via a previous book by the same author [1]! This book shows how formal specifications and semantics can enhance the quality of program and specification language development by clarifying key concepts early, and providing a clear basis for assessing the correctness of their implementations. The material in this book has also been used in final-year undergraduate teaching for a decade. This book is much more than a textbook, however. It mixes complete technical examples with commentary and copious historical notes about the development of programming languages, and their on/off relationship with formal techniques. This commentary makes the book a very natural and fluid read, and worth dipping into, as well as reading in order. Another key feature of the book is the introduction and discussion of various “Challenges” and “Language Issues.” There are 8 of the former, and 46 of the latter. These help to distill out key aspects and concerns. The book starts by showing how the ideas develop for “typical” (i.e., imperative) programming languages. This starts by using VDM notation to specify a structured operational semantics for a simple untyped imperative language. It then adds more features such as types, and code blocks. A key theme of this book is how the very definition of the semantic objects determines what the (dynamic) semantic possibilities will be. For example, dealing with memory locations, the choice to make them uninterpreted tokens rather than numbers, means that address arithmetic is ruled out. This is a significant semantic modelling choice. The remainder of the book starts to look at more complex language features, such as object orientation, records, pointers, functions/procedures, and concurrency leading to a semantics for a concurrent object-oriented language. Chapter 8 looks at shared variable concurrency and all its challenges. It shows how small-step operation semantics is able to model the non-deterministic interleaving behaviour. It then turns its attention to proof techniques, ranging from Rely/Guarantee, to Concurrent Separation Logic, and very recent mixings of the two. The author also makes the point that any process algebra that can model state change has to deal with the issue of interference: this includes CCS, CSP, and many others. Chapter 9 builds on Chapter 8 to combine concurrency with OO, in the form of the COOL language. As already mentioned above, just describing the semantic objects suffices to define the\",\"PeriodicalId\":50432,\"journal\":{\"name\":\"Formal Aspects of Computing\",\"volume\":\" \",\"pages\":\"1 - 2\"},\"PeriodicalIF\":1.4000,\"publicationDate\":\"2022-12-01\",\"publicationTypes\":\"Journal Article\",\"fieldsOfStudy\":null,\"isOpenAccess\":false,\"openAccessPdf\":\"\",\"citationCount\":\"0\",\"resultStr\":null,\"platform\":\"Semanticscholar\",\"paperid\":null,\"PeriodicalName\":\"Formal Aspects of Computing\",\"FirstCategoryId\":\"94\",\"ListUrlMain\":\"https://doi.org/10.1145/3569959\",\"RegionNum\":4,\"RegionCategory\":\"计算机科学\",\"ArticlePicture\":[],\"TitleCN\":null,\"AbstractTextCN\":null,\"PMCID\":null,\"EPubDate\":\"\",\"PubModel\":\"\",\"JCR\":\"Q3\",\"JCRName\":\"COMPUTER SCIENCE, SOFTWARE ENGINEERING\",\"Score\":null,\"Total\":0}","platform":"Semanticscholar","paperid":null,"PeriodicalName":"Formal Aspects of Computing","FirstCategoryId":"94","ListUrlMain":"https://doi.org/10.1145/3569959","RegionNum":4,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"Q3","JCRName":"COMPUTER SCIENCE, SOFTWARE ENGINEERING","Score":null,"Total":0}
First, a disclosure: I had every intention of buying this book before being offered the chance to review it. This was due mainly to the fact that my introduction to formal methods was via a previous book by the same author [1]! This book shows how formal specifications and semantics can enhance the quality of program and specification language development by clarifying key concepts early, and providing a clear basis for assessing the correctness of their implementations. The material in this book has also been used in final-year undergraduate teaching for a decade. This book is much more than a textbook, however. It mixes complete technical examples with commentary and copious historical notes about the development of programming languages, and their on/off relationship with formal techniques. This commentary makes the book a very natural and fluid read, and worth dipping into, as well as reading in order. Another key feature of the book is the introduction and discussion of various “Challenges” and “Language Issues.” There are 8 of the former, and 46 of the latter. These help to distill out key aspects and concerns. The book starts by showing how the ideas develop for “typical” (i.e., imperative) programming languages. This starts by using VDM notation to specify a structured operational semantics for a simple untyped imperative language. It then adds more features such as types, and code blocks. A key theme of this book is how the very definition of the semantic objects determines what the (dynamic) semantic possibilities will be. For example, dealing with memory locations, the choice to make them uninterpreted tokens rather than numbers, means that address arithmetic is ruled out. This is a significant semantic modelling choice. The remainder of the book starts to look at more complex language features, such as object orientation, records, pointers, functions/procedures, and concurrency leading to a semantics for a concurrent object-oriented language. Chapter 8 looks at shared variable concurrency and all its challenges. It shows how small-step operation semantics is able to model the non-deterministic interleaving behaviour. It then turns its attention to proof techniques, ranging from Rely/Guarantee, to Concurrent Separation Logic, and very recent mixings of the two. The author also makes the point that any process algebra that can model state change has to deal with the issue of interference: this includes CCS, CSP, and many others. Chapter 9 builds on Chapter 8 to combine concurrency with OO, in the form of the COOL language. As already mentioned above, just describing the semantic objects suffices to define the
期刊介绍:
This journal aims to publish contributions at the junction of theory and practice. The objective is to disseminate applicable research. Thus new theoretical contributions are welcome where they are motivated by potential application; applications of existing formalisms are of interest if they show something novel about the approach or application.
In particular, the scope of Formal Aspects of Computing includes:
well-founded notations for the description of systems;
verifiable design methods;
elucidation of fundamental computational concepts;
approaches to fault-tolerant design;
theorem-proving support;
state-exploration tools;
formal underpinning of widely used notations and methods;
formal approaches to requirements analysis.