传统的编程并不溯源 error,也没有泛型

2021-09-26 17:39:00 浏览数 (1)

当初CLU起步时,整个编程语言的状态太差,许多东西需要创新。

例如,我们不得不正视泛型的问题。在抽象数据类型的概念出现之前,实际上已经需要泛型了。如果你写一个排序例程,并不希望更替不同类型的数组时都要重写。

然后是异常处理。Liskov回忆起关于恢复模型与替代方案的争论:“问题是,在引发异常之后,控制权是否随后恢复到引发异常的代码,还是只是结束了该代码?”

如果没有一种方法从主流中分离单个异常情况,那么经常出现在远离错误源的bug就越难追踪。不幸的是,今天这种情况仍然会发生,还需要你一个一个debug。

数据抽象是一件大事,所有其他东西也都是随之而来的。Liskov说到。“如果你回顾一下 90 年代 Java 发生的事情,他们想使用采用参数多态的方式,但他们没有做,也从来想过优化异常处理”。

发明新的计算机语言

Liskov 感知现代编程语言的缺乏基础,无法支撑起整个现代应用软件行业,因此将目光放在了CLU的研究上,并带领学生一起投入其中。 然而,到了20世纪70年代末,科研道路出现了岔路口: 要么尝试将这门语言商业化,要么坚持研究。Liskov选择了研究,“在我的小组里,没有一个学生想要创业。”

直到现在,Liskov 还一直赞扬她的学生 Russ Atkinson、Alan Snyder 和 Craig Schaffert 以及Stephen Zilles。后者也在麻省理工学院,并于 1973 年与她一起改进 CLU 基础概念。Bob Scheifler, Eliot Moss和Toby Bloom也出现在1979年10月的CLU参考手册上。

她指出,现在发生的事情别无二致。现如今把东西放到网上,并建立一个智囊社区是一个相对简单的过程。但是在70年代,你必须挂靠一家公司,但即便如此,也很难获得启动资金。直到90年代初,情况才有好转。

话说回来,CLU的本质是它没有全盘接受多年来困扰其他语言的糟粕。Liskov说 ,“一门语言一旦运行,它就开始衍生遗留问题,致使你必须继续支持所有已经编写的代码。这就产生了负担。”

在过去的20年里,Liskov参与的大部分开发工作都与c 有关。她说,“程序开发不再是用机器语言完成的。这是一个很大的进步。只是提高了抽象的层次,模块化的原则就已经被很好地理解了。”

然而,直到今天,Liskov一直希望改变的事情是:语言被强制执行封装。但是当大家在构建一些低级平台时,又必须违反封装。Liskov认为封装是编程方法的关键工作—模块化,即将数据和处理数据的方法捆绑到单个单元中,并将对数据内部的访问限制在这些方法中。这与让编译器强制执行是两码事。

不过,其他方面也有所改善。与 1970 年代可用的存储能力相比,今天的巨大存储能力意味着在设计模块时,“紧凑性”可以让“优雅”退居二线。我们总是希望它可用,但尽可能简单。

结语

Liskov现在仍对编程和技术充满热情,她说:“编程和软件工程仍然是一个令人兴奋的职业。我认为要牢记接口和实现之间的区别,让行为与实现分开定义。

“如果你没有使用强制封装的语言(不幸的是,大多数语言都强制封装),那么你就必须自己强制封装,这有助于维持区块链系统完整性,广义地说,超类的对象应该可以被子类的对象替换而不破坏应用程序。”

0 人点赞