Java创造者詹姆斯·高斯林采访

116 阅读6分钟

詹姆斯·高斯林,通常被称为"Java博士",是加拿大计算机科学家,最有名的是Java编程语言之父。

介绍

詹姆斯·高斯林,通常被称为"Java博士",是加拿大计算机科学家,最有名的是JAVA编程语言之父。他做了Java的原始设计,并实现了其原始编译器和虚拟机。我们的DevRel,格里戈里·彼得罗夫,有机会采访詹姆斯,我们已经包括了下面的整个成绩单。希望你喜欢!

面试

格里戈里: 作为软件开发人员和软件顾问,我们试图在俄罗斯组织一个社区:Python、Ruby、Java 和 Go 社区。我们希望通过进行面试来帮助我们的开发人员,这些访谈突出了我们行业的基本问题。我认为您在 Java 上的经验和工作可以帮助开发人员变得更好。因此,让我们试着帮助他们!

有些语言,如围棋,不上课和继承,而另一些则尝试在锈的特点。作为一名语言设计师,你认为编程语言的现代、通用、合理创作方式是什么?

詹姆斯: 我想我不会上课。实际上, 我发现课程对作文效果很好。我真的没有任何好, 清楚的想法, 做什么不同。而一些我会以不同的方式做的事情有点奇怪。在 C 中,有宏,这几乎是一个灾难,因为宏不是语言的一部分:他们有点在它之外。Rust 的乡亲们试图用语言来安装宏。

其他语言,如所有的Lisp家族,设法使他们更优雅地适应,但他们有一种方法来定义语法,语法几乎完全没有语义。在大多数语言中,语法和语义是齐头并进的。作为一个在过去一生中写过很多 Lisps 的人, 我真的沉迷于使用 Lisp 程序来操纵 Lisp 程序的技术。这是我真正非常想念的一件事。有些语言可以让你以不同的方式做到这一点,所以像在Groovy,你可以直接玩AST。有某种句法集成的宏。但对我来说,总觉得里面有一个有趣的研究问题:你能做得更多吗?

我能感觉到 Lisp 在代码片段上进行计算以生成新代码吗?在Java世界,人们这样做。这是更流行的功能之一,除了它真的很低的水平。因为人们使用注释和事实的组合,你可以用一些不同的语言生成字形码。这是超级强大的。它被用在像你意想不到的地方, 就像在杰克逊一样。它通过计算序列化器获得了很多性能。

一方面,这是一个非常强大的技术。另一方面,它只是超级难以使用。事实上,这是可能的,是伟大的。但是你能走多远呢?它们可能有点有限。所以,如果你看看像龙目岛的东西,这是我觉得是...嗯, 我对此有强烈的爱恨。因为它增加了一堆 Java 功能, 是相当不错的, 但另一方面, 它显示了弱点。部分在这个过程中,因为这是一组功能,应该只是内置。Java社区进程已经变得比它应该少一些社区。这些天我在外面, 已经很多年了, 但有些事情你可以做, 只是整个地图。

 

格里戈里: 这就是为什么我们准备了关于您在创建语言方面出色体验的问题,而不是一些现代 Java 增强建议。当然,这很好,但从中创建特定域的语言有点棘手。有了 Ruby ,就容易多了。Ruby 开发人员是伟大的, 但他们需要大量的培训, 以学习所有的 Dsl 魔法。

詹姆斯: 具有计算代码片段等功能的原因之一是 Java 试图一直编辑机器代码。Ruby几乎总是被解释。当你这样做的时候,当你不想得到所有你能得到的性能时,生活就变得简单了。但是,如果你试图获得强大的功能和最终的表现,生活变得更加困难。

 

格里戈里: 最近,我们采访了Ruby的作者松本行弘,他提到他用他最新的主要Ruby3.0版本进行了一个实验。他试图在不中断更改的情况下发布此版本,以查看将会发生什么。不破坏任何东西的主要语言版本。我知道Java对不破坏事情持谨慎态度。对于所有语言来说,在没有不兼容的情况下进化是个好主意吗?还是只能用于特定语言(如 Ruby 或 Java)的有限方法?

詹姆斯: 它几乎完全是开发人员社区规模的函数。每一次突破性的变化都会在开发人员社区中引起痛苦。如果你没有很多开发人员,那么打破变化不是大问题。你还必须考虑成本效益的权衡。如果你做了一个突破性的改变,它增加了一些痛苦,但它也带来了一些好处。例如,如果您将子脚本操作员从方括号更改为圆形括号,则它可能完全不会为您购买任何东西,并诱发巨大的疼痛。那可是个愚蠢的主意

在 JDK 9 中,发生了变化,这是极少数被引入的突破性更改之一,它打破了一些变化:如果您使用一些所谓的隐藏的 API,封装机制就会被搅乱,而那些打破封装边界并使用不应以不应使用的方式使用的东西的人, 他们有一些疼痛从 8 移动到 9 。但是,一旦我们超越这一点,它允许平台更多的创新自由。在这个特殊的8到9过渡的情况下,这意味着平台可以切片和切碎,你实际上可以定制包装,使Java运行时间环境将更小。

另一个总是有相当数量的不适的领域是:当某样东西中有一个 bug,而人们为 bug 做解决方法时,如果你修复了 bug,您可能会破坏解决方法。当然,在Java世界中,我们决定不修复错误,或者引入一种做正确事情的方法。这甚至出现在硬件中。

欢迎关注我的公众号(比博客早1~2篇哦)

公众号.bmp