0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

微软正式发布了一种名为Bosque的全新编程语言

DPVg_AI_era 来源:lp 2019-04-21 09:29 次阅读

微软正式发布了一种名为Bosque的全新编程语言。微软方面介绍说:Bosque是一种超越了结构化编程且没有循环的编程语言将极大地提高开发人员的生产力,提高软件质量,并使编译器和开发人员工具的开发进入第二个黄金时代。

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

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

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)

官方 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 代码可以在一个比较小的内存中编译,能够快速启动,并且可以通过符号分析验证其正确性。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微软
    +关注

    关注

    4

    文章

    6643

    浏览量

    104837
  • 编程语言
    +关注

    关注

    10

    文章

    1952

    浏览量

    35256
  • 编译器
    +关注

    关注

    1

    文章

    1645

    浏览量

    49459

原文标题:Bosque语言问世,超越结构化编程,开启第二个开发黄金年代

文章出处:【微信号:AI_era,微信公众号:新智元】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    gitee 支持的编程语言有哪些

    些 Gitee 支持的常见编程语言: Python :一种广泛使用的高级编程语言,以其清晰的语法和代码可读性而闻名。 Java :
    的头像 发表于 01-06 09:50 273次阅读

    Triton编译器支持的编程语言

    编写和优化深度学习代码。Python是一种广泛使用的高级编程语言,具有简洁易读、易于上手、库丰富等特点,非常适合用于深度学习应用的开发。 二、领域特定语言(DSL) Triton也提供
    的头像 发表于 12-24 17:33 610次阅读

    编程语言的误区与常见问题

    : 选择编程语言时,应考虑项目需求、个人兴趣以及语言的适用性。例如,如果你对Web开发感兴趣,那么学习JavaScript可能是个好选择。 认识到没有
    的头像 发表于 11-15 09:35 452次阅读

    MCU编程语言和开发环境介绍

    MCU编程语言 MCU编程语言是用于编写MCU程序的高级编程语言,它们使得开发者能够更高效地开
    的头像 发表于 11-01 11:51 1383次阅读

    C语言与其他编程语言的比较

    C语言作为一种历史悠久的编程语言,自其诞生以来,直在软件开发领域扮演着重要角色。它以其高效、灵活和可移植性强的特点,成为了系统级
    的头像 发表于 10-29 17:30 526次阅读

    CNC系统般可用几种编程语言

    一种用于数控机床编程编程语言,广泛应用于CNC系统。G代码是一种文本格式的编程
    的头像 发表于 10-23 15:52 722次阅读

    plc的编程语言主要有哪三

    PLC(可编程逻辑控制器)的编程语言多种多样,但其中最为常用和广泛认知的三主要编程语言是梯形图
    的头像 发表于 10-21 17:04 3296次阅读

    labview是什么编程语言写的

    一种图形化编程语言。它并不是用传统的文本编程语言(如C++、Python等)编写的,而是采用了一种
    的头像 发表于 09-04 16:00 1453次阅读

    plc编程st语言怎么编

    PLC(可编程逻辑控制器)编程中的ST(Structured Text)语言一种高级编程语言
    的头像 发表于 08-25 10:05 1833次阅读

    华为自研仓颉编程语言引领全场景智能编程新纪元

    NEXT仓颉语言开发者预览版。这里程碑式的事件,标志着华为在编程语言领域迈出了坚实的步,也为全球开发者带来了
    的头像 发表于 06-22 11:30 1287次阅读

    abb工业机器人的编程语言是什么

    ABB工业机器人的编程语言主要是RAPID(Robot Application Programming Interface for Development),它是一种高级编程
    的头像 发表于 06-16 16:49 3077次阅读

    PLC常用编程语言有哪些

    在工业自动化领域,PLC(Programmable Logic Controller,可编程逻辑控制器)作为一种核心控制设备,其编程语言的选择对于控制系统的设计、开发和维护具有重要影响
    的头像 发表于 06-14 16:58 1999次阅读

    cnc系统般可用几种编程语言

    。CNC系统广泛应用于机械制造、汽车制造、航空航天等领域。 CNC系统的编程语言是实现CNC系统控制功能的关键技术之。以下是对CNC系统可用编程
    的头像 发表于 06-14 15:54 1399次阅读

    微软准备推出全新人工智能语言模型

    微软近期传出消息,正在秘密研发全新的人工智能语言模型,这款模型在规模上预计将具备与谷歌和OpenAI等业界巨头相抗衡的实力。据悉,这款新模型在
    的头像 发表于 05-08 09:30 483次阅读

    fpga三编程语言

    FPGA(现场可编程门阵列)的编程涉及到三主要的硬件描述语言(HDL):VHDL(VHSIC Hardware Description Language)、Verilog以及Syst
    的头像 发表于 03-15 14:36 1302次阅读