本文由 「AI前线」原创(ID:ai-front),原文链接:微软重磅发布新语言Bosque,超越结构化编程

策划编辑 | Natalie
整理 & 编译 | Vincent
编辑 | Vincent

AI 前线导读:当地时间 4 月 18 日,微软正式发布了一种名为 Bosque 的全新编程语言。微软方面介绍说:Bosque 受 TypeScript 启发,是一种超越了结构化编程且没有循环的编程语言,他们认为,这种规范化的编程模型将极大地提高开发人员的生产力,提高软件质量,并使编译器和开发人员工具的开发进入第二个黄金时代。

更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)

超越结构化编程的“正则化”编程语言

20 世纪 70 年代,结构化编程和抽象数据类型的兴起代表了编程语言的重大转变。这些方法代表了从反映底层硬件体系结构附带特性的编程模型,开始转向更直接地强调程序员意图的模型。这种转变同时使开发人员更容易地将系统的模型转换为代码,且更不易出错,并开启了编译器和 IDE 工具开发的黄金时代。

21 世纪的今天,微软推出了一种新的开源编程语言,名为 Bosque,它希望通过包含代数运算和避免产生复杂性的技术来使得代码简化和易于理解。

Bosque 的灵感来自于 TypeScript 的语法和类型以及 ML 和 Node/JavaScript 的语义。它的提出者是微软计算机科学家 Mark Marron,他将这种语言描述为 超越结构化编程模型 的成果。

自 1968 年计算机科学家 Edsger Dijkstra 发表题为《Go To Statement Considered Harmful》的论文后,结构化编程范式开始流行起来。在结构化编程范式中,流控制由循环、条件和子例程管理。

Marron 认为:可以通过消除诸如循环、可变状态和引用相等等复杂性的来源让编程变得更好。于是 Bosque 诞生了,它代表了一种编程范式,Marron 在他的一篇论文中称之为“正则化编程”。

Marron 在他的技术论文中解释说:“这个模型建立在结构化编程和抽象数据类型成功的基础上,它将现有的编程模型简化为一种正则化的形式,这种形式消除了主要的错误来源,简化了代码理解和修改,并将许多代码上的自动化推理任务转换为琐碎的命题。”

Bosque 语言官方论文:https://www.microsoft.com/en-us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf

Bosque 语言概览

那么,Bosque 语言是什么样子的?下面这个例子或许可以说明:

//Functor (Bosque)var a = List[Int]@{...};
//Pre: truevar b = a.map[Int](fn(x) => x*2);
//Post: List[Int]::eq(fn(x, y) => y == x*2, a, b)

官方 GitHub 中包含更多参考示例:https://github.com/Microsoft/BosqueLanguage

乍一看,Bosque 的表达方式很像 JavaScript 语言。Marron 说,引用相等(当两个变量指向内存中的同一个对象时)代表了一种可能导致问题的复杂性的例子。

在 Marron 的论文中,他写道:

基于一系列开发人员访谈和对分析运行时编译器开发的经验研究,我们确定了五个意外复杂性的主要来源,可以通过深思熟虑的语言设计来解决。这些问题是各种 bug 的来源,增加了开发人员在应用程序中推断和实现功能所需的工作量,并使自动推断程序变得非常复杂(甚至不可能实现)。

这五种复杂性来源分别是:

  • 可变的状态和框架:在编程语言中引入可变性,破坏了以单调的方式对应用程序进行推理的能力,这种方式迫使程序员 (和任何分析工具) 明确哪些在运算之后仍然为真,哪些就无效了。可变代码通过返回值和对参数 (或其他全局状态) 的副作用来影响应用程序状态的能力也引入了对每个运算的逻辑框架进行推理的需要。
  • 循环、递归和不变量:循环和递归是向推理提出的一项基本挑战,因为代码描述了单个步骤的效果,但是要理解完整的构造,需要对一组值上的量化属性进行泛化。不变量提供了所需的关联,但是一般针对它们的计算不可能存在一种通用的技术,甚至在有限的应用中也很难实现。
  • 不确定行为:包括未定义的、未指定的、不确定的或环境的行为,需要程序员或分析工具来推断并解释所有可能的结果。虽然真正未定义的行为,例如未初始化的变量,已经从大多数语言中消失了,但是仍然存在大量未具体明确的行为,例如排序的稳定性、映射 / 字典枚举顺序等。这些增加了开发过程的复杂性,并且随着时间的推移,逐渐被视为应该消除的负债。
  • 违反数据不变原则:编程语言通常为数组 / 元组中的单个元素或对象 / 记录中的字段提供访问和更新的操作符。事实上,这些访问器 / 更新器是在单个元素的基础上操作的,这导致程序员在多个步骤上更新对象的状态,在此期间,通常不变量在恢复之前会暂时失效。在这种情况下,大量细节必须予以跟踪和恢复,这可能会急剧增加发生错误和疏忽的机会。
  • 等式和混叠:编程语言处于数学和工程学的边界上。尽管语言语义被表述为一个数学概念,但也存在一些常见的情况,例如引用相等、按值传递 vs. 按引用传递,或评估顺序,它们通常默认底层是冯·诺伊曼架构,要么是有意为性能考虑,要么是出于习惯或历史原因。虽然这些选择看起来微不足道,但是对可理解性有很大的影响——仅仅公开引用相等性就会增加关于混叠关系的推理的复杂性,并使其他体系结构上的编译变得非常复杂。

Marron 举了一个例子,譬如为了让某种方法以单例模式或缓存的形式返回一个新对象,就需要考虑对该方法进行优化。但 Marron 表示:“如果这个问题出现在对象具有身份的语言中,这种行为可能会改变程序的结果;然而,在不允许对象标识的 Bosque 中,这种优化则是安全的。”

他引用的另一个例子是各种形式的不确定行为,他说:“在 JavaScript 中,排序函数不需要是稳定的,所以 JS 的 V8 引擎使用了不稳定的排序。”

Marron 进一步解释道:“从理论上讲,这似乎是一件小事,但在实践中,这意味着每次开发人员对列表进行排序时,他们必须记住列表是不稳定的,并考虑到使用相同排序值重新排序的可能性,譬如 2008 年因为稳定性问题被爆出的 Chromium bug 90。”

Marron 的技术论文探讨了 Bosque 试图解决的编程语言复杂性的潜在来源。但是他说,消除可变状态、循环和引用相等性是三大要素。

他说:“在学术文献中,强更新、循环不变量和别名分析等相关问题已经被广泛研究了 30 多年,但仍然是一个巨大的开放问题。通过消除这些特性,以及解决相关问题的需要,许多像符号执行这样的事情可以简化为概念上的简单任务。”

Marron 说,Bosque 的最初目标是构建自动化的零工作量代码验证、自动化的 SemVer 检查和编译,以使用 SIMD 硬件,如 AVX 或 SSE。他说:“目前,我们只在小的示例上手工完成了这些工作,但从根本上说,在实际实现中似乎没有任何不可逾越的障碍。”

未来规划

目前,Marron 将 Bosque 视为探索语言设计选择的一种方式,并通过与学术界和在线开发人员社区的协作,帮助创建诸如验证器和编译器之类的自动化开发工具。

他说:“我们希望用 Bosque 来证明这个领域的各种概念。未来,我们可能会努力将这些想法以某种形式投入生产。”

目前,Bosque 依赖于一个用 TypeScript 编写的解释器,运行在 Node 上。作为参考实现。展望未来,Marron 打算为 WASM 和本地代码提前实现编译。他说,在接下来的几个月里,他将专注于各种 TODO 项目,比如 bug 修复以及开发支持用这种语言编写大型程序的功能。

如果 Bosque 在学术实验之外的开发生态系统中找到了一席之地,Marron 认为它 可能会应用在云或物联网领域,因为 Bosque 代码可以在一个比较小的内存中编译,能够快速启动,并且可以通过符号分析验证其正确性。

参考链接:

https://www.theregister.co.uk/2019/04/18/microsoft_bosque_programming_language/

https://www.microsoft.com/en-us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf

https://github.com/Microsoft/BosqueLanguage

今日荐文

点击下方标题即可阅读

必看!谷歌、阿里等10大深度学习CTR模型最全演化图谱
如果你喜欢这篇文章,或希望看到更多类似优质报道,记得给我留言和点赞哦!╰( ̄ω ̄o)

快速理解编程结构_微软重磅发布新语言Bosque,超越结构化编程相关推荐

  1. 快速理解编程结构_为什么系统编程全都用英文而不用中文?听完专家的解释恍然大悟!...

    全球博弈(quanqiuboyi)--不一样的观点,不一样的解读,8000万人订阅的超级微信大号.不关注时事,你将会被这个世界抛弃,点击标题下蓝字"全球博弈"关注,我们将为您提供有 ...

  2. 开始协议处理句柄[http-nio-8080]_微软win10发布KB4520062更新,解决登录黑屏和开始菜单空白等问题...

    10月15日微软为Windows 10版本1809发布了2019年10月第三次累积更新补丁KB4520062,同步更新了Windows 10和Windows Server 2019基于X86.X64系 ...

  3. win10桌面管理文件收纳_微软win10发布7月更新,三大版本同步更新,着重提升系统安全性...

    2020年7月14日,微软windows10系统发布了07累积更新,对2004版.1909版和1903版三大版本win10系统同步推送更新补丁,其中win10的2004版的07累积更新补丁为KB456 ...

  4. Google重磅发布Go语言编码规范

    前言 Google官方在2022.11.23重磅发布了Go语言编码规范. 这个编码规范源自于Google内部的Go项目,是Google的开发人员要遵守的代码规范. 在Go语言诞生后,全世界的Go开发者 ...

  5. 420集的python教程下载_微软官方发布了最新420集Python教程,这教程简直就是编程界福利...

    泰国清迈-2014 年 10 月 22 日: 微软主页 clos Austria, Tyrol, Axamer Lizum, hosting village of 近日,微软上线了一套 Python ...

  6. 设无向图g如图所示_阿里重磅发布大规模图神经网络平台 AliGraph,架构算法解读...

    图神经网络 (GNN) 主要是利用神经网络处理复杂的图数据,它将图数据转换到低维空间,同时最大限度保留结构和属性信息,并构造一个用于训练和推理的神经网络.在实际应用中,为了加速 GNN 训练和新算法的 ...

  7. clr错误 8004005程序将立即终止_微软公开发布更多Surface驱动程序 固件支持终止日期...

    11月13日,Microsoft公开了一些其最新发布的Surface PC和平板电脑的设备支持日期.在今天之前,微软已经公开了其最旧的Surface型号的设备支持终止日期,但未提供某些较新的设备. 对 ...

  8. 手部建模如何布线?1分钟快速理解手部结构

    在角色建模中,对于新手建模手部脚部的比例及结构特特掌握可能很少,学会理解整个手部的内部结构在任何活动下的状态,更好的把握结构面是不可少的知识,当然,为了提高效率,是可以选择合适的笔刷进行雕刻绘制,可能 ...

  9. 宁德时代机器人编程开发_高通发布5G机器人开发平台,内置强大AI算力。各大厂商竞相发布机器人处理平台,万物互联的时代即将到来...

    高通发布了强大机器人平台Robotics RB5 Platform,内置工业级QRB5165机器人处理器,拥有15TOPS AI 算力,强大的AI算力可应用于机器学习,增强计算机视觉,多摄像头并发处理 ...

最新文章

  1. 对Squid使用的一些总结
  2. 西门子PLC学习笔记二-(工作记录)
  3. 谷歌、微软2020年招新大幅萎缩:新冠流行打击科技巨头
  4. CPU 空闲时在干嘛?
  5. 从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验
  6. linux重点知识:网络通信
  7. 字符串 charat_Java | String.charAt(index)| 从字符串中按索引获取字符
  8. 2017年网络统考计算机成绩,2017年12月江苏省成人计算机基础统考成绩查询
  9. python中shift函数rolling_【邢不行|量化小讲堂系列18-Python量化入门】简易波动指标(EMV)策略实证...
  10. Android 的主题的演变
  11. PHP ctf addslashes,[红日安全]代码审计Day13 - 特定场合下addslashes函数的绕过
  12. 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast
  13. Python使用matplotlib画动态图
  14. android模拟器安装frida
  15. html是编程语言表情包,语言编程表情包 - 语言编程微信表情包 - 语言编程QQ表情包 - 发表情 fabiaoqing.com...
  16. v-if报undefined
  17. Markdown 写文档做笔记的利器
  18. php 统计一个月工作日,php – 使用strtotime在一个月内获得第一个工作日
  19. Flink 1.12.2 源码浅析 : Transformation 浅析
  20. 金融大数据信用评分模型解析

热门文章

  1. 浅谈汽车网络安全(Cyber Security)-MCU
  2. 读书笔记∣标签:标记系统设计实践
  3. SqlServer使用sp_executesql执行动态语句
  4. denied 虚拟机access_彻底解决Ubuntu SSH 无法远程登录及root 登录ACCESS Denied 问题
  5. other|钱海信用卡php开发示例
  6. Linux--共享文件夹、库文件、库分类(静态库、共享库)
  7. Arduino分割字符串
  8. LOL手游被爆匹配人机?玩家:不是人机,是太菜假装机器人
  9. 怀旧服服务器维护以后精英怪,魔兽世界怀旧服:四大62+精英刷怪点!提布装绑图纸都在这里了!...
  10. IE8主页不能修改的案例研究