近日,微软研究院开源了一个名为 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 中,使其并发。
// x is some isolated object graph
var c = cown(x)
// c is a cown that mediates access to x.
// We have lost direct access to x here
一旦使用者将一个对象包装在一个 cown 中,便只能通过调度的方式去访问它。 在 Verona 中,这一方法通过关键词 when 完成的。
when (var x = c)
{
// Access internals of cown(c) using name x in here
Builtin.print("Hello")
}
Builtin.print("Goodbye")
分区
Verona 使用分区和对象组,作为所有权中的基本概念。 研究者没有将对象所有权指定为一个 reference 有一个对象,而是将其概括为一个引用可以对应拥有一个分区,而一个分区是一组对象。 在一个分区内,任何对象都可以引用该分区内的任何其他对象。 但是研究者对拓扑结构没有限制。 当整个分区的 reference 消失时,则回收整个分区。
在类型中,使用 iso(isolated)去表示这是对某个分区的引用。 对于可变的则使用 mut 表示,在类型中表示可变但不可拥有的引用。 当 mut 用于字段类型时,引用指向与字段对象位于同一分区。 当对参数类型使用 mut 时,引用会指向未知分区中的对象。 这借鉴了 Rust 中的一种类型。
当分配一个对象时,指定它是否应该在自己的分区中:
var x = new Node;
或者与另一个对象在同一分区中:
var y = new Node in x
分区可以嵌套,并形成一个分区树,其中的根分区要么在堆栈中或在 cowns 中。
系统测试
由 P 和 P 启发,Verona 的 runtime 和系统测试在设计时深度结合。 Verona 的并发模型让所有的并发交互都在 runtime 上进行。
基础的应用原本是针对 runtime 的测试,但是研究者想到了一种语言上的替代编译器,由于帮助测试。 它由 veronac-sys 和 interpeter-sys 构建,需要以下额外的参数:
--run-seed N
--run-seed_upper N
所以
veronac-sys.exe --run testsuite/demo/run-pass/dining_phil.verona --run-seed 100 --run-seed_upper 200
使用如下命令,便可以运行 100 个交叉存取(一种内存加速方法)样例。
veronac-sys.exe --run testsuite/demo/run-pass/dining_phil.verona --run-seed 100 --run-seed_upper 200
据项目介绍称,这一项目希望能够通过开源和研究界展开更多的合作。目前项目仍在早期阶段,对于微软本身使用的工程项目不会有影响。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容