Formal, mathematically rigorous programming language semantics are the essential prerequisite for the design of logics and calculi that permit automated reasoning about concurrent programs. We propose a novel modular semantics designed to align smoothly with program logics used in deductive verification and formal specification of concurrent programs. Our semantics separates local evaluation of expressions and statements performed in an abstract, symbolic environment from their composition into global computations, at which point they are concretised. This makes incremental addition of new language concepts possible, without the need to revise the framework. The basis is a generalisation of the notion of a program trace as a sequence of evolving states that we enrich with event descriptors and trailing continuation markers. This allows to postpone scheduling constraints from the level of local evaluation to the global composition stage, where well-formedness predicates over the event structure declaratively characterise a wide range of concurrency models. We also illustrate how a sound program logic and calculus can be defined for this semantics.
翻译:正式、数学严谨的编程语言语义是设计逻辑和计算学的基本先决条件,允许对同时程序进行自动推理。我们建议采用新型模块语义,以便与用于推理核查和正式指定同时程序的程序逻辑顺利地保持一致。我们的语义将对于抽象、象征性环境中的表达和语句的局部评价与抽象、象征性环境的表达和语句的评估区分开来,将其转化为全球计算,然后将其具体化。这样就可以在无需修改框架的情况下逐步增加新的语言概念。其基础是将程序跟踪的概念概括化为一个不断演变的状态的序列,我们用事件描述符和尾随延续标志来丰富。这样可以将地方评估水平的制约推迟到全球构成阶段,在这个阶段,对事件结构的完善性定位将展示一系列广泛的同值模型。我们还可以说明如何为这种语义定义一个健全的程序逻辑和计算法。