10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

编程语言的另一面: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:5016271
用户头像

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

关注

评论

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

服务怎么升级

agnostic

服务升级

Web3学习日记

无人之路

日志 web3

海龟编程 python绘图工具turtle库的用法 turtle库使用方法大全,画笔设置 画布设置 绘图设置,画笔粗细,画笔颜色, 画笔速度。

Python-派大星

10月月更

Mimir 速体验 (Part 4):数据抓取的高可靠

Grafana 爱好者

Grafana Prometheus Mimir

【一Go到底】第三十天---排序

指剑

Go golang 10月月更

数据处理

芯动大师

Python 数据处理 10月月更

【精彩内容分享】SoCC 2022 | 大规模云系统自动化容量评估的探索与落地 – DeepScaling

TRaaS

dockerfile分层构建业务镜像

忙着长大#

Docker 镜像

数据湖(十五):Spark与Iceberg整合写操作

Lansonli

数据湖 10月月更

Mimir 速体验 (Part 5):原生 OTLP 数据写入

Grafana 爱好者

Grafana OpenTelemetry Mimir

【分布式技术专题】「架构实践于案例分析」总结和盘点目前常用分布式事务特别及问题分析(上)

码界西柚

分布式事务 TCC 分布式事务管理

Numpy 基础教程之Numpy的介绍

芯动大师

Python Numpy 10月月更

ndarray 的创建及属性

芯动大师

Python 10月月更 ndarray

ndarray的赋值、视图、拷贝和广播

芯动大师

Python 赋值结构 10月月更

SAP | Processing Blocks的三种类型

暮春零贰

SAP abap 10月月更

云数据库助力电池云(二)

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

运维进阶训练营 -W02H

b1a2e1u1u

运维

Go语言入门09—结构体

良猿

Go golang 后端 10月月更

【笔记】面向过程的SQL扩展(一)

w010w

数据库 sql 10月月更

图解 | 聊聊「秒杀」

小小怪下士

Java 程序员 高并发 秒杀

极客时间运维进阶训练营第二周作业

老曹

如何向表中插入数据以及如何更新、删除表中的数据

芯动大师

Python 10月月更 插入数据

6000字带你揭开ICT和云计算技术的神秘面纱!

wljslmz

云计算 ICT 以太网 10月月更

WLAN无线局域网技术基础(三)无线侧组网概念,2.4GHz频段与5GHz频段区别和优缺点,胖AP架构和瘦AP架构的优缺点

Python-派大星

10月月更

C++从入门到精通(第七篇) :vector深度剖析及模拟实现

雪芙花

c 10月月更 C++

C++从入门到精通(第七篇) :string类的讲解和模拟实现

雪芙花

c 10月月更 C++

字母大小写全排列

掘金安东尼

算法 10月月更

QECon上海站|蚂蚁测试用例智能生成技术架构与实践

TRaaS

分享一份2022最新Java面试八股文:从基础到高级整整涵盖了Java14 个核心技术

程序员小毕

Java 程序员 面试 程序人生 后端

Python 文件处理 open()函数

Python-派大星

10月月更

【一Go到底】第三十一天---查找

指剑

Go golang 10月月更

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