2020-01-22 09:58:06

机器之心报道

作者:一鸣、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 中,使其并发。

// x is some isolated object graphvar 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\n")}Builtin.print("Goodbye\n")

分区
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

据项目介绍称,这一项目希望能够通过开源和研究界展开更多的合作。目前项目仍在早期阶段,对于微软本身使用的工程项目不会有影响。

微软研究院开源编程语言Verona,借鉴Rust、Cyclone等特性相关推荐

  1. 微软研究院开源DialoGPT:你有什么梦想?「让世界充满机器人」

    作者:Yizhe Zhang, Siqi Sun, Michel Galley等 自然语言对话生成是人工智能社区面临的一大难题,微软研究院的一项新研究让我们离解决这一难题又更近了一步.他们用 GPT- ...

  2. 《安富莱嵌入式周报》第314期:微软推出开源DeviceScript编程语言适合低资源单片机,开源色度计,超声波穿戴设备,USB-C交换机,CMSIS V6.0

    周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...

  3. 微软亚洲研究院开源分布式机器学习工具包

    微软亚洲研究院开源分布式机器学习工具包 为了满足研究人员和开发者日益增长的各种需求,微软亚洲研究院于日前将分布式机器学习工具包(DMTK)通过Github开源.DMTK由一个服务于分布式机器学习的框架 ...

  4. 微软亚洲研究院开源图数据库GraphView

    好消息!微软亚洲研究院开源图数据库GraphView 发表于8小时前| 885次阅读| 来源CSDN| 0 条评论| 作者张勇 微软亚洲研究院GraphView width="22" ...

  5. 微软2020开源回顾:止不住的挨骂,停不下的贡献

    喜欢就关注我们吧! 2020年,Linus Torvalds 开启"飚骚话"模式,言语不再激烈.看到"大喷子" Linus 都有机会变慈祥,料想微软近年来主动拥 ...

  6. 从业余项目到全世界最受欢迎的编程语言之一,Rust 是如何做到的?

    [CSDN 编者按]从日常生活中发现电梯软件的系统崩溃,到将一个业余项目发展成为最受开发者喜爱的编程语言,这是全球开发者Graydon Hoare与Rust的一段奇妙故事. 原文链接:https:// ...

  7. Python 之父 Guido van Rossum 称退休太无聊,正式加入微软搞开源!

    Python 之父 Guido van Rossum 称退休太无聊,正式加入微软搞开源! 图片来自 Oracle 博客 今天,Python 之父 Guido van Rossum 在 Twitter ...

  8. 微软nni_实践空间站 | 为微软官方开源项目贡献代码,你准备好了吗?

    亟需一个契机重新驱动你在冬日沉睡的大脑? 2020 年春季学期微软学生俱乐部实践空间站项目正等待你大展身手! 实践空间站是微软学生俱乐部打造的全学年持续性活动,通过项目导师指导与自主创新结合的方式,帮 ...

  9. 一文总结微软研究院Transformer霸榜模型三部曲!

    [导读]本文将主要介绍微软研究院提出的三大Transformer霸榜模型,分别是:开创Transforer新时代的Swin Transformer, 进阶版的Swin Transformer -- C ...

最新文章

  1. cgroups是什么
  2. pandas使用str函数和startswith函数,筛选dataframe中不是(not start with)以特定前缀开头的数据列(selecting columns)
  3. TCP/UDP网络编程调试助手下载
  4. 2015 ICL, Finals, Div. 1 Ceizenpok’s formula(组合数取模,扩展lucas定理)
  5. c# 获取方法所在的命名空间 类名 方法名
  6. qt oracle bindvalue,Qt Sql bindValue与%
  7. JavaScript中的document.cookie的使用
  8. Serializable和Parcelable
  9. 人民网舆情:公众对网约车或存偏见
  10. c libxml2解析html,libxml2
  11. 苹果微信分身版ios_苹果ios微信分身多开双开助手免费版
  12. 二元回归方程matlab,matlab 多元非线性回归方程问题
  13. 工厂方法模式应用场景
  14. 模拟版图layout能否转数字IC后端实现?
  15. S7-1200PLC定时器计数器的应用
  16. 5、LATEX-algorithm2e伪代码中文模板
  17. 使用Proteus8进行8086实验仿真,解决找不到source的问题
  18. Android项目实战_手机安全卫士软件管家
  19. 旅游大数据如何变现?
  20. 2022年将成为海外直播带货的发展元年?-跨境知道

热门文章

  1. python学习笔记之编写readConfig读写配置文件
  2. pandas.apply 有源码github
  3. 关键路径最早最迟开始时间
  4. 十、springboot注解式AOP(@Aspect)统一日志管理
  5. 论坛报名 | AI 时代,新药研发真能告别「十年磨一剑」吗?
  6. 李铁军教授专访:当数学家遇见人工智能
  7. 智源论坛 | 知识与认知图谱(5月30日,活动报名)
  8. JavaScript武力值飙升!用TensorFlow.js轻松实现在浏览器里搞深度学习......
  9. 这几本豆瓣高分设计好书,人人都应该读!
  10. 你可能不知道的Shell