微软最近开源了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条目饿死的现象。
引用来自“ruki”的评论
26个字母 快用完了 = =例如:CP语言
引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“陈小弟”的评论
java8能在java1.4中运行?引用来自“冬日暖阳85”的评论
java8里面的System.out.print 到 java 1.4中一样可以执行。引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“陈小弟”的评论
java8能在java1.4中运行?引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“陈小弟”的评论
java8能在java1.4中运行?引用来自“limiyun”的评论
.net2.0不兼容 .net1.1呀。而不是 .net1.1 兼不兼容.net2.0的问题。需要搞清楚关系了。引用来自“辉火”的评论
微软的东西不敢碰,断代更新,放弃支持,强制绑定。。。。。。引用来自“陈小弟”的评论
举个例子引用来自“刁民终于害了朕”的评论
wm6不能升wp7,wp7不能升wp8,wp8终于能剩wp10了,卡出翔了,现在wp10都是个测试版本,各种bug根本不能当手机用,电话没声音。其他的更多,狗软真是危害人间引用来自“辉火”的评论
微软的东西不敢碰,断代更新,放弃支持,强制绑定。。。。。。引用来自“陈小弟”的评论
举个例子引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“kidfruit”的评论
除了1.1到2.0是断代更新,后面基本上都是向下兼容。包括4.0虽然是新底层,但你的程序大部分重新打个包就可以继续跑了。你说2和3不兼容我只能说喷子真没有下限引用来自“limiyun”的评论
哥们,你爱怎么说都行。是不是喷子,你找06年之前做.net的兄弟问问。从06年之后,我没有用过.net。别动不动没下限行么?引用来自“kidfruit”的评论
首先2.0不兼容1.1这个是对的,但是那是.net刚刚起步,从那以后基本上都是向下兼容的。而且别的不说,就说2.0和3.0,楼上有人已经说了,3.0=2.0+扩展库,你是怎么能够让3.0和2.0不兼容我还真的很好奇?所以说在我看来你完全没用过.net,没用过还喷有意思?我也08年之后就没用过cpp了,但我现在还真不敢随便喷cpp的优劣和兼容。引用来自“善良超哥哥”的评论
论速度,notepad++才是王者。不论速度,为什么不用vscode引用来自“juve”的评论
vscode 插件太少,atom很好用的功能插件vscode没有。其实sublime才是正途。引用来自“善良超哥哥”的评论
基本的插件够我用了,我只用Python和markdown的插件。sublime收费,而且中文支持不够好,太高冷引用来自“狂飙的小蜗牛”的评论
sublime百度注册码一大把,中文安装一个插件搞定...有那么复杂吗?引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“陈小弟”的评论
java8能在java1.4中运行?引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“kidfruit”的评论
除了1.1到2.0是断代更新,后面基本上都是向下兼容。包括4.0虽然是新底层,但你的程序大部分重新打个包就可以继续跑了。你说2和3不兼容我只能说喷子真没有下限引用来自“limiyun”的评论
哥们,你爱怎么说都行。是不是喷子,你找06年之前做.net的兄弟问问。从06年之后,我没有用过.net。别动不动没下限行么?引用来自“Zoker”的评论
这名字好引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“limiyun”的评论
毛线,比如 .net1.1,.net2.0,.net3绝对不兼容。鼓捣的人都要挂了。后来全部放弃……引用来自“辉火”的评论
微软的东西不敢碰,断代更新,放弃支持,强制绑定。。。。。。引用来自“陈小弟”的评论
举个例子引用来自“辉火”的评论
微软的东西不敢碰,断代更新,放弃支持,强制绑定。。。。。。引用来自“Skipjack”的评论
我还知道Ubuntu 17.10将于2017年10月发布呢