追踪 Web 服务中的因果依赖
1. 引言
在消息传递系统和 Web 服务编排的复杂环境中,像 Orc 这样的语言能够生成无界的并发模式,这使得追踪因果依赖变得极具挑战性。目前,在程序中进行因果追踪的方法有两种:一种是基于 Java 字节码的插桩,但该模型中因果关系仅源于变量访问;另一种是改变语义以产生因果信息,从而形成并发语义,但要保持与原始语义的良好等价性是一个挑战。本文将聚焦于 Orc 语言,介绍其核心计算、示例以及插桩语义,以解决因果依赖追踪的问题。
2. Orc 编程语言
2.1 核心计算
Orc 是一种完整的编程语言,它类似于函数式语言,但具有许多处理并发的非函数式特性。Orc 语言基于 Orc 核心计算构建,其核心概念包括站点(sites)和操作符(operators)。
2.1.1 站点
Orc 中有两种类型的站点:
- 外部站点 :在语法中用 V 表示,如布尔值、数字、字符串、算术和逻辑运算符以及共享寄存器等复杂数据类型都属于外部站点。
- 内部站点 :使用语法 def y(x) = f#g 定义,其中 f 是站点的主体,g 是程序的其余部分,y 可以像任何站点一样在其中使用。
为了简化,本文假设站点是柯里化的,即每个站点只有一个参数。站点定义是递归的,这使得 Orc 具有与任何函数式语言相同的表达能力。外部站点的调用是严格的,其参数必须在调用前绑定;而内部站点可以立即调用,其参数是惰性求值的。
超级会员免费看
订阅专栏 解锁全文
1424

被折叠的 条评论
为什么被折叠?



