微软开源 P 语言,实现安全的异步事件驱动编程

阅读数:3752 2016 年 10 月 16 日 19:00

微软最近开源了 P 语言,致力于在 Linux、macOS Windows 上编写安全的异步事件驱动程序。

微软将 P描述为一种领域特定语言,对异步系统的组件间通信进行建模,例如嵌入式、网络或分布式系统。P 程序是通过有限状态机(finite state machine)来定义的,这些状态机会并发运行。每个状态机都有一个输入队列、状态、转换、机器本地存储,并且可以发送异步信息给其他状态机。在P 中的基本操作要么是更新本地存储,发送消息,要么就是创建新的状态机。如下的代码片段展示了如何使用P 来描述一个状态及其转换。除此之外,它还展现了如何发送消息或创建新的状态机:

...
start state Init {
    entry {
        server = new Server();
        raise SUCCESS;
    } on SUCCESS goto SendPing;
state SendPing {
    entry {
        send server, PING, this;
        raise SUCCESS;
    }
    on SUCCESS goto WaitPong;
}
... 

按照微软的说法,P 程序能够使用模型检查功能来进行核实。这样的话,就允许开发人员确保所有的事件均能得到及时地处理。对于P 程序来说,要想保证响应性,它的状态机就要处理每个状态上所有可以出队(dequeue)的事件。这种做法并不一定总是可行,因此对一些事件可能会进行延迟处理。在这种情况下,语言能够确保某个事件不会无限期延迟。P 编译器能够核实程序的状态,还可以生成C 代码,并交给C 编译器执行,另外,它还可以输出 Zing 模型,用于系统测试。Zing 是一个针对并发程序的开源模型检查器,它能够系统性地暴露一个模型所有可能出现的状态。

微软使用 P 语言实现和检验了 Windows 8 USB 设备驱动栈的核心功能。按照微软的说法,工程师使用 P 来序列化大量来自硬件、操作系统、功能驱动以及其他驱动组件的不同事件,提升了性能和可靠性。他们尤其指出,在新的USB hub 驱动中,非法内存访问和竞态条件的数量不那么明显了,同时,枚举时间快了30%,也没有观察到worker 条目饿死的现象。

查看英文原文: Microsoft Open-Sources P Language for Safe Async Event-Driven Programming

收藏

评论

微博

用户头像
发表评论

注册/登录 InfoQ 发表评论