
机器之心报导
作者:一鸣、Jamin
近来,微软研讨院开源了一个名为 Verona 的项目。这是一个面向研讨的编程言语,旨在处理内存办理和计算机安全方面的问题,并学习了 Rust 等的新特性。
计算机安全中许多问题都和内存办理相关,许多相关研讨机构正在探求一些办法。近来,微软研讨院开源了一个研讨型的编程言语项目——Verona。
Verona 言语是一个开源项目,微软研讨院期望经过这个项目协助学界研讨更好的内存办理办法。据悉,该项目吸收了 Rust、Cyclone 的一些特色。
开源地址:https://github.com/microsoft/verona
Verona 言语是什么
Verona 是一个微软研讨院建议的项目,用于研讨并发方面的问题。研讨者期望供给一种新的并发模型,能够无缝地和一切权结合。
依据微软给出的介绍,Verona 项目旨在探究有关言语和 runtime 方面的研讨,以完结安全的可扩展内存办理和分区作业。
首要的研讨问题如下:
假如规划的言语没有并发骤变,是否能够构建可扩展的内存办理;
能否在不献身内存办理的情况下,运用线性区域来消除每个目标线性度的约束;
能否运用言语等级的分隔?
现在 Verona 仍然是一个处于很前期的研讨类项目,部分类型查看器还有待完结,一起完结的言语功用也较少。
社区点评
项目开源后引起了社区的评论。一些开发者以为,Verona 测验笼统一切者模型,更挨近人们的运用习气,能够在不失安全性的情况下创立数据结构,可是是否能够成功有待调查。
还有开发者以为,从微软自身(而不是微软研讨院)的视点来看,树立一个像 Go 言语那样的原生言语也是应该的。
Verona 要处理的问题
「体系编程言语」是一个有着广泛规模的问题。从高档要害功能体系到初级的内存办理器,以及内核模块都有所触及。体系编程有两个不同的方面:
可猜测性
推迟
资源占用
原始拜访(Raw access)
可将内存直接视作位(bits)和字节(bytes)
硬件层面运用更少的笼统(乃至彻底不需求)
并发骤变和内存安全
在 Verona 项目中,研讨者以为抛弃并发型骤变(concurrent mutation)是可扩展内存办理的必要一步。经过消除并发型骤变,开发者就不能将并发完结成库。通常情况下有两种挑选,露出「unsafe」以启用不安全的库去完结并发(如 Rust),或许为言语供给一个并发模型(如 Pony)。
前者意味着编程言语只能依靠较少的不变量,因为它无法了解那些非安全模块中的代码是怎么供给并发才能的。后者意味着需求一个惊人的 Concurrency Story,因为只能有一个 Concurrency Story。
同享一切权
在 Verona 中,研讨者引进一种新的并发型编程模型:并发一切者,简称 cowns。它封装了一些资源集(如内存区域),一起保证了每次由一个履行线程拜访这些资源。
在 Verona 中,咱们我们能够将一个目标包装在 cown 中,使其并发。
一旦运用者将一个目标包装在一个 cown 中,便只能经过调度的办法去拜访它。在 Verona 中,这一办法经过要害词 when 完结的。
分区
Verona 运用分区和目标组,作为一切权中的基本概念。研讨者没有将目标一切权指定为一个 reference 有一个目标,而是将其归纳为一个引证能够对应具有一个分区,而一个分区是一组目标。在一个分区内,任何目标都能够引证该分区内的任何其他目标。可是研讨者对拓扑结构没有约束。当整个分区的 reference 消失时,则收回整个分区。
在类型中,运用 iso(isolated)去表明这是对某个分区的引证。关于可变的则运用 mut 表明,在类型中表明可变但不行具有的引证。当 mut 用于字段类型时,引证指向与字段目标坐落同一分区。当对参数类型运用 mut 时,引证会指向不知道分区中的目标。这学习了 Rust 中的一种类型。
当分配一个目标时,指定它是否应该在自己的分区中:
或许与另一个目标在同一分区中:
分区能够嵌套,并构成一个分区树,其间的根分区要么在仓库中或在 cowns 中。
体系测验
由 P 和 P# 启示,Verona 的 runtime 和体系测验在规划时深度结合。Verona 的并发模型让一切的并发交互都在 runtime 上进行。
根底的运用原本是针对 runtime 的测验,可是研讨者想到了一种言语上的代替编译器,因为协助测验。它由 veronac-sys 和 interpeter-sys 构建,需求以下额定的参数:
所以
运用如下指令,便能够运转 100 个穿插存取(一种内存加快办法)样例。
据项目介绍称,这一项目期望能够经过开源和研讨界打开更多的协作。现在项目仍在前期阶段,关于微软自身运用的工程建设项目不会有影响。
本文为机器之心报导,转载请联络本大众号取得授权。
------------------------------------------------









