4月初,在PugetSoundProgrammingPython(简称PuPPy)举办的首届年度慈善活动上,四大传奇编程语言创始人齐聚一堂,就编程语言设计的过去和未来进行了热烈的讨论。该活动旨在为全民计算机科学(美国前总统巴拉克奥巴马今年早些时候提出的一项新倡议,旨在在美国教育系统中普及计算机科学)筹集资金。与会嘉宾包括以下流行编程语言的创造者:GuidovanRossum:Python的创造者;JamesGosling:Java编程语言的创造者和首席架构师;AndersHejlsberg:TurboPascal的原作者,同时也从事C#和TypeScript的开发工作;LarryWall:Perl的创造者。该会议由CarolWilling主持,她目前是Jupyter项目的指导委员会成员和开发人员。她还是首届Python指导委员会的成员,Python软件基金会的研究员和前任董事。编程语言设计的关键原则小组成员提出的第一个问题是:“编程语言设计的原则是什么?”该系列丛书的运作方式非常相似。他解释说J.K.罗琳是个天才,她在第一部哈利波特书中提到的一些细节与第六和第七本书中的重要情节点相呼应。在解释这与编程语言设计之间的关系时,他说:“在编程语言设计中,我们也需要从头到尾呼应。”在设计编程语言时,首先我们承诺某些细节,例如我们要使用的关键字,我们要遵循的编码风格等。但是无论我们做出什么决定,我们都必须坚持下去,并且在未来我们需要找到使用这些细节的新方法,正如J.K.罗琳做到了。他补充说:“一方面,在设计编程语言时,您首先要做出一系列选择,为您的故事发展奠定基础。另一方面,设计编程语言的艺术是你需要不断地回顾你的故事,并提出创造性的想法,以你意想不到的方式推进故事。”在谈及JamesGosling创建Java的过程,以及他所遵循的设计原则时,他只是淡淡地说:“Java的出现不像是个人喜欢的项目。实际上我们只是想尝试构建一个原型。“当时,JamesGosling和他的团队正在开展一个涉及嵌入式系统领域的项目。为此,他们与许多正在为嵌入式系统构建软件的开发人员进行了交谈,并了解了他们的工作流程。该项目是关于与一个十几个人,高斯林的任务是从编程语言的角度保持项目尽可能简单。他补充说:“最初我们只是想做一些比C更好的东西,但后来它失去了控制,最后剩下的该项目只是提供材料。“从那个项目中唯一幸存下来的是“Java”。基本上,编程语言旨在解决居住在数据中心之外的人们的问题,而这些人经常遭受网络、安全和可靠性问题的困扰。LarryWall认为自己与其说是计算机科学家,不如说是“语言学家”。他想创建一种更接近自然语言的编程语言。他举了一个例子:“就好像我们不必让每个人都走进大学校园来决定他们在哪里go,我们可以观察人们想去哪里,然后设置快捷方式去那些地方。“创建Perl背后的基本原则之一是通过API提供一切。这种编程语言的目标不仅是构建一种良好的文本处理语言,而且是一种胶水语言。Wall进一步说,虽然在90年代的Perl非常稳定,但确实存在一些问题。所以在2000年,Perl团队决定打破一切,想出了一套全新的设计原则。并且,基于这些原则,他们重新设计了Perl6。其中他们有几个原则做出了正确的选择-谨慎使用括号,否则包括Unicode在内的括号不够;不需要蹩脚的重新发明面向对象等。他补充说,“很多重新设计就像,我们用什么支柱来支撑一切?新设计是面向对象的吗?是词法范围重新设计,还是更大范围的重新设计?每件是什么?正确的信息支柱?如果我们根本没有,我们如何创建一个?”AndersHejlsberg说,他遵循他接触过的每一种编程语言的共同原则,即“做某事只有一种方法。他认为,如果开发人员有四种不同的方法,他们最终很可能会选择错误的方法路径,并且需要很长时间才能意识到开发中的这个错误。根据Hejlsberg的说法,这就是为什么开发人员总是创建称为“简单复杂性”的东西,这意味着采用复杂的东西并用简单的包掩盖复杂性。类似于GuidovanRossum的观点,他进一步补充说,在设计编程语言时,无论您做出什么决定,都必须坚持下去。在设计编程语言时,您需要仔细决定编程语言中不包含哪些内容。通常,人们会带着他们的建议来找你,但你不能真正改变编程语言的本质。虽然你不能真正改变局域网的基本性质guage,你可以扩展它。基本上你有两个选择:要么坚持语言的本质,要么开发一种新的编程语言。编程语言的类型系统在谈到Python确定类型的方式时,GuidovanRossum在Python***推出时分享了一个故事。本来int并不是一个类,它其实是一个转换函数。后来,圭多意识到这是一个错误。“我们有很多这样的功能,我们意识到我们犯了一个错误,我们向用户展示了与内置对象类型不同的类。”所以Python团队决定重构Python的整个类型,并做了很多清理工作。所以他们将函数int更改为类int的说明符。现在,调用此类意味着构造此类的实例。JamesGosling表示,他一直关注性能,而提升性能的一个因素就是类型系统。类型系统对于构建优化编译器和提前检查正确性等事情很有用。拥有类型系统也有助于为小型设备构建系统。“为了能够在密闭空间内工作,你必须了解设备提供的每一种可能性,你越早了解,做好工作的机会就越大,”他说。“AndersHejlsberg将类型系统视为一种工具。开发人员喜欢他们的IDE,他们习惯于自动完成语句、重构、代码导航等。这些功能是由代码的语义知识实现的,这些语义知识由类型系统的编译器。Hejlsberg认为添加类型可以大大提高开发人员的生产力,尽管这是违反直觉的。他补充道:“我们认为动态语言更容易掌握,因为你摆脱了类型的束缚。然而事实证明,如果以非侵入式的方式添加类型,同时努力做好类型推断等工作,那么就可以提高效率。当谈到Perl中的类型系统时,Wall说Perl5和Perl6有不同的类型系统。在Perl5中,所有类型都被视为字符串、偶数或浮点数。Perl6旨在保留此功能,但他们意识到:“如果新用户对可互换性感到困惑,那很好;但如果计算机感到困惑,那就很糟糕了。”因此,对于Perl6,Wall和他的团队希望将其变成一个更好的面向对象和更好的函数式编程语言。要实现这一点,他们需要一个非常合理的类型系统,并在底层构建一个非常合理的元对象模型。此外,你还需要非常注意口号“一切都是对象,一切都是闭环”。影响编程语言可维护性的因素有哪些?GuidovanRossum认为,如果要加强编程语言的可维护性,重要的是在灵活性和灵活性之间取得适当的平衡和规范性。虽然动态类型对小程序效果更好,但较大的程序需要严格的方法。另外,***为了能够通过编程语言本身实现规则,使用给用户留下太多的自由。为此,Guido打算在Python中加入类似TypeScript的技术。他补充说:“其实TypeScript非常实用,所以我们也想在Python中添加类似的概念。当然我们添加它的方式会略有不同,因为我们的语言环境不同。”除了类型系统,重构引擎也被证明是非常有用的。使用重构引擎,您可以一次执行数百万行代码的大规模重构。通常,人们不会重命名方法,因为你可以很容易地仔细阅读一段代码,然后正确地重命名每个变量。如果您有重构引擎,只需单击几个按钮,输入新名称,然后在30秒内进行重构。AndersHejlsberg表示,TypeScript项目源于一些庞大的JavaScript代码库。随着这些代码库变得越来越大,维护变得极其困难。后来基本上这些代码库变成了“只写代码”。因此,我们需要理解代码的语义,这个过程也减轻了重构的难度,他补充道。“这种对语义的理解需要一个类型系统,当你开始添加类型系统时,你还可以添加代码文档,”他说。Wall还支持“良好的词法作用域有助于重构”的观点。编程语言设计的未来在谈到编程语言设计的未来时,JamesGosling分享了一个尚未开发的编程领域——编写使用GPU的代码。他强调,目前我们的编程语言都不能直接使用GPU,我们应该加大这方面的开发。AndersHejlsberg表示,编程语言的变化速度不如硬件或所有其他技术。就发展速度而言,编程语言更像是数学和人脑。“我们仍在使用50年前发明的语言进行编程,函数式编程的所有原则都是50多年前研究的结果,”他说。不过,他也认为,如今的编程语言往往是多范式的,不会严格区分诸如面向对象编程或函数式编程等类别。“语言正在走向多范式。我认为我们应该停止说我只喜欢面向对象编程、命令式编程或函数式编程语言。”如今,更重要的是我们需要了解最新的研究、新思维和新范式,并将这些新思想优雅地融入我们的编程风格中。谈话视频近三个小时的完整谈话视频如下:
