2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

编程语言的另一面:Python、Java、C#和 Perl 作者谈语言设计

  • 2019-04-25
  • 本文字数:1913 字

    阅读完需:约 6 分钟

编程语言的另一面:Python、Java、C#和Perl作者谈语言设计

根据维基百科显示,目前编程语言的数量已经超过上千种,且新的编程语言还在不断出现,例如微软刚刚发布了一种新的开源编程语言 Bosque。面对层出不穷的新编程语言,相信很多开发者都会有这样的疑问:编程语言是如何设计的?编程语言如何才能具备可维护性?编程语言未来将如何发展?


近日,在 Puget Sound Programming Python (PuPPy)举办的首届年度慈善活动上,四位流行编程语言的作者在一起共同分享了他们对于以上问题的看法。这四位编程语言作者分别是 Python 的作者 Guido van Rossum,Java 作者和首席设计师 James Gosling,Turbo Pascal 的原作者及 C#和 TypeScript 的开发者 Anders Hejlsberg,Perl 的作者 Larry Wall。



编程语言需要遵循哪些关键的设计原则?


编程语言是如何设计创造的?应该遵循哪些关键的设计原则呢?


“我觉得编程语言设计和写小说的方式是类似的,尤其是和 JK Rowling 写《哈利•波特》系列小说极为相似。”Python 的创建者 Guido van Rossum 是这样理解编程语言设计的,“JK Rowling 在《哈利•波特》第一部中提到的一些细节对于第六和第七部的情节发展起到了推动作用,编程语言设计也是这样。在编程语言设计之初,我们就要确定一些细节,例如关键字、编码风格等等,而这些细节,我们需要在未来找到新的方法来使用。编程语言设计的技巧,一方面是正确选择最初的选择集,这样故事才会有更多的延续,另一方面是重新回到现有的情境中,创造出全新的方式来延续之前的选择。”


Java 是在何种情况下创建的呢?Java 并不是一个开发者的个人项目, 1991 年,Sun 为了抢占先机,成立了一个称为 Green 的项目小组,专攻计算机在家电产品上的嵌入式应用。据 Java 作者和首席设计师 James Gosling 介绍:“为了完成这个项目,我们采访了很多嵌入式系统开发软件的开发人员,了解他们的工作流程。”在这个项目中,James Gosling 主要负责从编程语言的角度来简化工作,这个项目一开始发展的很不错,但是后来失败了,而 Java 作为当时项目的唯一幸存者,一直发展到现在。


Perl 是一种功能丰富的计算机程序语言,可运行在超过 100 种计算机平台上。Larry Wall 表示创建 Perl 的一个原则就是为所有东西提供 API,他希望 Perl 能够成为一种优秀的文本处理语言,一种“胶水”语言。20 世纪 90 年代是 Perl 发展的快速期,不仅发布了 Perl 4 和 Perl 5 两个重要版本,而且还将 CPAN 引入到了社区,虽然一切都在向着稳定的方向发展,但还存在一些问题。2000 年,Perl 团队做了一个决定,完全重写 Perl 6,并提出了一组全新的设计原则,例如选择正确的默认值。Perl 6 的语言语法与 Perl 5 完全不同,拥有丰富的现代语言特征,几乎可以看作是一种新的计算机程序语言。


Anders Hejlsberg 参与了多个语言的开发,他认为编程语言开发需要遵循一个共同的原则:“一件特定的事情只能有一种方法,方法太多,反而容易走上歧路。”


如何使得编程语言具备可维护性?


“编程语言想要具备可维护性,最重要的就是要在灵活的方法和严格的方法之间保持平衡。” Guido van Rossum 表示,“动态类型适合于小程序,而大型程序需要严格的方法。如果编程语言本身能够实现这种平衡就太好了。”


编程语言的可维护性是指理解、改正、改动、改进代码的难易程度。重构引擎是实现编程语言可维护性的一种常用方式,适用于执行大规模重构,例如一次执行数百万行代码。在这种情况下,如果使用重命名方式,那么需要遍历代码并准确的重命名该变量,而如果是使用重构引擎,那么只需按几个按钮,输入新名称,就完成任务了,整个过程可能只需要 30 秒。


以 TypeScript 为例,TypeScript 起源于开发应用程序规模的 JavaScript 应用程序的需求。随着代码库越来越大,维护就变得越来越难,这些代码库就变成了“write-only code” 。为了易于重构,我们需要做一些语义理解,而这种语义理解需要一个类型系统,来定义编程语言中不同的数值和表达式。


编程语言设计的未来


时至今日,还有新的编程语言在不断涌现,那么编程语言的未来发展会是怎样的呢?


Anders Hejlsberg 表示,“编程语言的发展速度和硬件及其它技术不同,就进化而言,编程语言更像是数学和大脑。直到今天,我们还在用 50 年前发明的编程语言在编程,函数式编程的所有原则几乎都是在 50 年前提出的。当然,现在编程语言都在朝着多范式发展,只喜欢一种编程方法是不符合大潮流的。”


编程语言已经有很多种了,是否还有必要创建新的编程语言呢?是的,有必要,至少 James Gosling 认为是有必要的,他分享了一个目前还未开发的领域,即为 GPU 编写代码,“目前,我们没有任何编程语言可以像 GPU 那样工作,在这方面还需要做很多工作。”


点此可看采访视频:Python、Java、C#和Perl作者谈编程语言设计


2019-04-25 15:5016315
用户头像

发布了 497 篇内容, 共 347.3 次阅读, 收获喜欢 1927 次。

关注

评论

发布
暂无评论
发现更多内容

在线音频,没有新故事

自象限

2024-05-01:用go语言,给定两个长度为偶数n的整数数组nums1和nums2, 分别移除它们各自的一半元素, 将剩下的元素合并成集合s。 找出集合s中可能包含的最多元素数量。 输入:nums

福大大架构师每日一题

福大大架构师每日一题

1/28 业务系统的安全设计

hackstoic

系统设计 安全 TGO写作小组28天挑战

劳动节,聊聊AI究竟在替代谁的工作?

脑极体

AI

《自动机理论、语言和计算导论》阅读笔记:p215-p351

codists

编译原理

开源框架 NanUI 项目宣布将暂停开发,作者转行卖钢材

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

Linux设备驱动系列(九)——procfs文件系统

Linux内核拾遗

文件系统 linux开发 Linux内核 设备驱动 procfs

事业-最佳实践-编码-CR认知

南山

CR CodeReview

大模型探索:阿里向量检索服务DashVector

程序员架构进阶

架构 向量检索 大模型 5月月更 通义千问

淘宝商品详情API接口:实时获取SKU价格及库存信息

技术冰糖葫芦

API Explorer API boy pinduoduo API

事业-最佳实践-编码-异常处理规范

南山

异常 异常处理

null是原始类型,但为什么typeof null的结果是object?

Geek_fed966

Required request parameter ‘XXX‘ for method parameter type String is not present

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

事业-最佳实践-编码-声明规范

南山

事业-最佳实践-编码-注释规范

南山

代码注释 注释 添加注释 注释规范

2024年4月文章一览

codists

编程人

OceanBase开发者大会·2024精彩PPT合集

菜根老谭

oceanbase

Linux设备驱动系列(十)——等待队列Waitqueue

Linux内核拾遗

队列 Linux内核 设备驱动

前端面试题 - 如何实现promise?

Geek_fed966

编程语言的另一面:Python、Java、C#和Perl作者谈语言设计_编程语言_田晓旭_InfoQ精选文章