微软推出新语言Bosque,超越结构化程序设计
微软近期推出了一款全新的编程语言 Bosque,该语言参考了 TypeScript 的语法与类型,还有 ML 和 Node/JavaScript 的语义。
作者微软计算机科学家 Mark Marron 致力于消除编程过程中出现的各种复杂情况,创造出了他认为超越主流结构化程序设计的 Bosque 这一语言。
结构化程序设计现在随处可见,不管你用的是 C/C++,还是 Java、Python 与 Golang 等编程语言,在开发过程中使用的基本都是这一程序设计思想,它最初是为了替换掉程序中弊大于利的 goto 语法而产生的。
研究者使用结构化程序设计思想中的循环、顺序与选择等设计,最终完全替换掉了 goto 指令,并且这样的编程思想也一直流行至今。
Bosque 是随着 Mark 发表的论文《Regularized Programming with the BOSQUE Language》提出的,论文中,作者指出上世纪 70 年代兴起的结构化程序设计和抽象数据类型使得开发者可以屏蔽掉底层硬件架构的特征,专注于编写功能代码,同时开发也变得更加不易出错。
而作者在此基础上,提出了一种新的程序设计思想——Regularized Programming(规范化/正则程序设计),通过避免低级循环动作的迭代处理、用代数数据转换操作符丰富语言等设计,超越结构化程序设计。
作者同时为此思想设计了全新的编程语言 Bosque。具体来讲,现有的程序设计得到简化,成为规范化形式,消除了主要的不确定复杂性来源。
论文基于一系列分析、运行时与编程器开发的经验与验证,以及针对开发人员的采访,确定了开发过程中会出现的 5 个主要不确定复杂性来源:
可变状态和逻辑帧:将可变性引入编程语言破坏了以单调方式推理程序的能力,这迫使程序员(和任何分析工具)需要去确定在操作之后哪些东西还是有效的,而哪些又已经失效。同时可变代码返回值和对参数(或其它全局状态)产生副作用影响程序状态,也使得需要推理每个操作的逻辑帧。
循环、递归和不变量:循环和递归是推理的最基本挑战,因为代码描述了单个步骤的效果,但理解完整构造需要对一组值的量化属性进行泛化,不变量提供了所需的连接,但是一般来说这样的计算通用技术是无法实现的。
不确定的行为:不确定的行为包括未定义的、在指定的或非确定的环境行为,这需要程序员或分析工具来推理和解释所有可能的结果。例如:排序稳定性、地图/字典枚举顺序等。这些不确定的行为增加了开发过程的复杂性,并且随着时间的推移,慢慢地被视为应该被删除的技术债。
不遵循“数据不变”:编程语言通常为数组/元组中的单个元素或对象/记录中的字段提供访问与更新操作符,这些访问器/更新器在单个元素的基础上执行,导致程序员在多个步骤上更新对象的状态,此时通常持有的不变量在恢复之前暂时是失效的。在这些情况下,必须跟踪和恢复的细节数量会大大增加错误发生的可能性。
相等与别名:编程语言处于数学和工程的边界,虽然语言语义被表述为数学概念,但是存在一些常见情况,例如:引用相等、按值、按引用或评估顺序传递,这背后其实是默认了底层是冯·诺依曼架构。虽然看似微不足道,但这些选择对可理解性产生了重大影响,比如引用相等会导致关于别名关系推理的复杂性,并使其它架构的编译变得非常复杂。
这些不确定复杂性是程序各种 bug 的来源,增加了开发者理解和实现应用功能的复杂性,同时使程序自动推理也变得非常复杂,或完全不可行。
其中,根据科技媒体 The Register 对 Mark 的采访,Mark 认为可变状态、循环和引用相等这三者的问题是最突出的。
以引用相等为例,Mark 指出,当两个变量指向内存中的同一个对象时,问题的复杂性就提高了,“看起来非常简单,但是一旦你在语义中出现引用相等,那么就必须不断地考虑它和它引入的指针别名的关系。”
而最为熟悉的循环机制也带来不小的复杂性,在 Bosque 中它被取消了,下边是一个等同于 JavaScript 中 for 循环的例子:
//Functor (Bosque) var a = List[Int]@{...};//Pre: true var b = a.map[Int](fn(x) => x*2);//Post: List[Int]::eq(fn(x, y) => y == x*2, a, b)
Bosque 由规范化程序设计思想而来,正是为了解决当前结构化程序设计中遇到的这些问题,作者把结构化程序设计的兴起认为是编程器与开发工具的第一个黄金时代,他相信此次提出的这规范化编程模型将大大提高开发者的工作效率、提高软件质量,并带来编译器和开发工具的第二个黄金时代。
详情查看论文与源码:
https://www.microsoft.com/en-us/research/uploads/prod/2019/04/beyond_structured_report_v2.pdf
https://github.com/Microsoft/BosqueLanguage
开源中国征稿啦!
开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 200 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。
现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿
推荐阅读
红帽接手维护OpenJDK 8与11
Stack Overflow 2019开发者调查报告发布
Windows 10源码一览!
腾讯重磅开源DCache,分布式NoSQL存储系统
fork()成为负担,需要淘汰
我,开源中国,「在看」↓↓↓
微软推出新语言Bosque,超越结构化程序设计相关推荐
- 微软推出新编程语言 Bosque,超越结构化程序设计
微软近期推出了一款全新的编程语言 Bosque,该语言参考了 TypeScript 的语法与类型,还有 ML 和 Node/JavaScript 的语义.作者微软计算机科学家 Mark Marron ...
- 快速理解编程结构_微软重磅发布新语言Bosque,超越结构化编程
本文由 「AI前线」原创(ID:ai-front),原文链接:微软重磅发布新语言Bosque,超越结构化编程 策划编辑 | Natalie 整理 & 编译 | Vincent 编辑 | Vin ...
- 微软推出新逆天开源语言Bosque,告别 for 循环,提高开发效率!
拥抱开源的微软近日又为开发者带来好消息:在受 TypeScript 语法类型与 ML 和 Node/JavaScript 语义启发下,微软推出了全新的开源编程语言 Bosque. Bosque 创作者 ...
- 微软推出新逆天开源语言,告别 for 循环,提高开发效率!
拥抱开源的微软近日又为开发者带来好消息:在受 TypeScript 语法类型与 ML 和 Node/JavaScript 语义启发下,微软推出了全新的开源编程语言 Bosque. Bosque 创作者 ...
- c语言中用于程序化结构设计的三种结构是,c语言中用于结构化程序设计的3种基本结构是...
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. c语言中用于结构化程序设计的3种基本结构是顺序结构.选择结构.循环结构. 顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出 ...
- 洞察疫情,微软推出新冠数据分析网站COVID Insights
来源 | 微软研究院AI头条 COVID Insights 网站功能亮点 持续数月的新冠疫情一路肆虐.席卷全球,世界各地的科研人员都在为此奋战,希望通过最先进的技术逐步揭开新冠病毒的神秘面纱. 近日, ...
- 洞察疫情,微软推出新冠数据分析网站 COVID Insights
来源 | 微软研究院AI头条 COVID Insights 网站功能亮点 持续数月的新冠疫情一路肆虐.席卷全球,世界各地的科研人员都在为此奋战,希望通过最先进的技术逐步揭开新冠病毒的神秘面纱. 近日, ...
- C语言经典案例——第二章 结构化程序设计
本篇提供了关于C语言程序设计中结构化程序设计部分的经典案例,可供C语言的初学者们进行一个学习和编译练习. /*Case 1 画"图" 有三个数x.y.z,找出最小的数*/ int ...
- 刚刚,微软推出支持chatGPT的必应
文章目录 刚刚,微软推出支持chatGPT的必应 什么是新的必应? 如何体验 页面初体验 结语:搜索引擎的新时代 刚刚,微软推出支持chatGPT的必应 这款新的必应功能允许用户通过自然语言方式与ch ...
最新文章
- BIND日志相关(二)
- 首次揭秘!大麦如何应对超大规模高性能选座抢票?
- python设置环境路径_window10配置python虚拟环境的路径
- VMware虚拟机很卡~
- 实战:微信小程序支付开发具体流程
- 递归——阶乘加斐波那契数列(简单掌握递归思想的敲门砖)
- 725 - Division
- 摇一摇事件封装了设备的运动传感器
- ElasticSearch权威指南学习(索引管理)
- 【java学习之路】(数据结构篇)001.数组
- Flink on Zeppelin (2) - Batch 篇
- 网站上点击自定义按钮发起QQ聊天的解决方案
- 微信翻译助手小程序 day2 -翻译功能页
- u检验中的查u界值表_统计学中,知道u值,如何确定P值,是通过查表吗
- 七月刚入职字节跳动的测试开发面试题,附答案
- C标准库-va_list
- 10个提升写作手法的方法
- 罗马数字转换python_Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
- JS+CSS竖向折叠滑动菜单代码
- matlab画一元函数图
热门文章
- python应用POP3、IMAP、SMTP 协议,获取邮箱验证码
- 判断字符串出现次数最多的字符 及 次数
- 旧金山参议员提议发布“封杀令”,理由是马路不为机器人所服务
- JAVA-MyBatis ORM
- 状态压缩 + 暴力 HDOJ 4770 Lights Against Dudely
- 一个C实现的线程池(产品暂未运用)
- VMware 虚拟机(linux)增加根目录磁盘空间
- .NET6中关于Minimal API的简单使用
- 一条nginx命令引发的对于容器的思考
- 理论修炼之RabbitMQ,消息队列服务的稳健者