微软近期推出了一款全新的编程语言 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 由规范化程序设计思想而来,正是为了解决当前结构化程序设计中遇到的这些问题,作者把结构化程序设计的兴起认为是编程器与开发工具的第一个黄金时代,他相信此次提出的这规范化编程模型将大大提高开发者的工作效率、提高软件质量,并带来编译器和开发工具的第二个黄金时代。
详情查看论文与源码:
领取专属 10元无门槛券
私享最新 技术干货