P语言: 为异步、容错和不确定性而生的编程语言

译者注:P语言是一款由微软、加州大学伯克利分校和伦敦帝国学院共同研发完成的编程语言,它在处理并发、故障切换等方面具有很强的优势。本文介绍了P语言的起源、特性及其使用场景。以下是译文。

新兴应用程序的复杂性需要使用新兴的方式去理解,然后才能高效地去构建、测试和调试。现在的应用程序常常会使用云资源,采用人工智能技术,并嵌入到物理设备中。这三个因素的结合使得软件开发变得非常困难。

通常来说,这些现代应用程序都具有异步性,主要表现在:为了提高性能,请求者在当前操作完成之前可继续执行后面的操作。异步不可避免地会产生并发,并带来一些臭名昭著的坑,例如竞态条件和海森堡bug(软件错误,通常与时序相关,但在调查其原因的时候该错误可能会消失,这是因为当前环境已经产生了变化)。为了应对异步计算带来的挑战,我们开发了P,一种用于在异步事件驱动应用程序中建模和制定协议的编程语言。该项目是微软研发人员以及加州大学伯克利分校和伦敦帝国学院的学术研究人员之间通力合作的结果。

P语言工具链流程图

P的程序员在上层编写协议及其规范。P编译器提供针对竞态条件的自动化测试和承载了指定协议的可执行程序。P在如下这几个方面提供了一流的支持,包括:对并发进行建模、指定安全和活性属性、系统性的搜索并检查程序是否满足其规范。对于这些功能来说,P与Leslie Lamport的TLA+和Gerard Holzmann的SPIN相似。但与TLA+和SPIN不同的是,P程序也可以编译成可执行的C代码。这种能力在高级模型和低级实现之间起到了桥梁的作用,也让程序员可以更容易地接受正式的建模模型和规范。

通信状态机

在P中,程序设计模型的基础是依赖事件进行通信的并发执行状态机,而每个事件包含了类型化的有效负载值。基于线性输入和独特指针的内存管理系统提供了安全的内存管理和data-race-free并发执行机制。在这方面,P类似于现代编程语言,比如Rust。

P在微软软件开发中的首次应用是在Windows 8.1和Windows Phone中承载USB 3.0驱动程序。这些驱动程序管理了Windows生态系统中的一个最重要的外围设备,并在当前数亿台设备上运行。P在驱动程序的设计早期启用了数百种竞态条件和海森堡bug的检测和调试,并在当前广泛应用于Windows的驱动程序开发之中。P在Windows内核中的早期的积极经验推动了P#的出现,P#是一个使用C#扩展来提供状态机和系统测试的框架。与P相比,P#采用了最小化的语法集合,并最大限度地利用外部库来提供建模、制定规范和测试等功能。

P正在改变Azure云基础架构的开发。Azure与其他云提供商一样,面临着由意想不到的竞态条件和软硬件故障引起的海森堡bug所带来的挑战。这些错误会导致实时服务的中断,这是云服务提供商及其客户需面对的巨大问题。P和P#目前已经在已部署的服务中查找和调试海森堡bug,并在系统部署前进行设计和验证服务。P允许工程师在大型Azure服务的组件之间精确地模拟异步接口。它还能协助工程师发现并调试他们当前桌面上的问题,否则在部署服务后这些问题可能需要耗费几个月甚至几年的时间来解决。

P能够进行充分的故障切换测试,这使其特别适合于进行容错分布式服务验证,也就是说,在意外故障发生时验证服务是否能恢复并继续运行。网络消息的丢失和单个状态机的故障都会被建模为事件。P将故障建模为事件使得故障注入变得更加地自动化,并可以在存在大量事件和错误的情况下对故障切换进行系统性的测试,而这几乎无需程序员出力。

P在系统测试方面的能力使其能够彻底搜查由于并发发送事件的顺序不确定性而引起的所有可能。然而,该能力在处理显式数据输入方面存在一定的限制,特别是当该输入的多样性异常庞大的时候。 这种限制使得难以将P应用于诸如机器人技术之类的应用,该类应用的复杂性主要源于不确定输入下的决策。处理大量不确定的输入目前正在研究之中。我们正在研究符号和概率技术来应对这一挑战。

  • 下载P语言:https://github.com/p-org/P
  • 更多下载,请访问微软P语言及其工具:https://github.com/p-org

Reddit上的精彩相关评论:

  • 所有的编程语言设计者在对语言进行命名的时候都应该考略到可搜索性。C这个名字就起的很不好。为什么现在的编程语言在搜索引擎上都那么难搜索呢,比如“go”和“p”。
  • 对于Go来说,我们还能使用Golang。
  • 这个好像跟Erlang挺像的?希望它的语法更好用。
  • 微软再一次证明了他们很不擅长起名。
  • 明年将发布 P 360,然后再发布 P 1。
  • 以后你就可以说:我在用P写代码,我需要用P来工作,请安装P。

原文发布于微信公众号 - CSDN技术头条(CSDN_Tech)

原文发表时间:2017-05-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大宽宽的碎碎念

系统的请求量突然增大数倍怎么办?面试中怎么回答真实世界的流量问题最后的话

59516
来自专栏Hongten

不使用 Ruby 的十个理由

请注意:这是一篇主观意识的文章。它的目的并不是要说服你使用或者不使用Ruby,或者其他任何技术。这篇文章所涉及到的环境是 Web 开发,而不是通用的编程。我想...

2.5K1
来自专栏云计算爱好者

为什么网站需要用CDN来加速?

CDN的工作原理就是将您源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥...

3979
来自专栏老司机的技术博客

宝宝都能学会的python编程教程1:第一行代码

前言 众所周知,现在IT行业很火,行业薪酬也很高,国家在2017年也发布了人工智能教育的推广计划,人人会编程的时代将要到来。不会编程、不懂编程可能有些跟不上时代...

4275
来自专栏IT大咖说

如何玩转Android物联网开发,这些必须知道

内容来源:2018 年 6 月 28 日,中移物联网 Android开发高级工程师程磊在“droidcon上海2018安卓技术大会”进行《当安卓遇到物联网》演讲...

2K2
来自专栏知晓程序

码农必备!用它一键查「技术文档」,开发不再手忙脚乱

今天,知晓程序(微信号 zxcx0101)要推荐的就是这款「云档」小程序,它提供了多种技术的开发指南、技术手册、API 规范。让你随时随地学技术,离全栈式码农更...

800
来自专栏SDNLAB

聚焦Open vSwitch性能大提速

Open vSwitch(OVS)项目的开发人员对其性能稍加改进,正如他们所说已经将其提升到了惊人的速度。 这项工作已经持续了一段时间,但具体细节直到今天才在N...

3576
来自专栏Spark学习技巧

入门大数据必读

1666
来自专栏CSDN技术头条

【BDTC 2015】数据库分论坛:GBase 8t、PosgreSQL-X2核心技术解析

2015年12月10-12日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所、北京中科天玑科技有限公司与CSDN共同协办,...

2486
来自专栏华章科技

如何入门 Python 爬虫?

之前转载过两篇关于“爬虫”的文章,小编在后台收到不少相关的留言,希望能够继续深入,所以有了下面这篇文章。

1302

扫码关注云+社区

领取腾讯云代金券