java之父:修Bug最烦人,目前还不是开源的最好时代
Java之父其实和普通程序员一样非常讨厌修Bug,他最不喜欢去修数值分析相关的问题,这样一位普通又传奇的程序员,相信大家都对他充满好奇。
java之父:修Bug最烦人,目前还不是开源的最好时代
20世纪90年代,詹姆斯·戈斯林与一群人合作创建了Oak项目,Oak是一种可以在虚拟机上运行的编程语言,并在电器上开发嵌入式应用程序。后来,Oak项目发展演变为Java。随着互联网的普及。Java成了世上最受欢迎的开发语言。詹姆斯·戈斯林也成为了"Java之父"。
詹姆斯·戈斯林,生于加拿大,是一名编程天才,1977年获得加拿大卡尔加里大学的计算机科学学士学位,1983年获得美国卡内基梅隆大学的计算机科学博士学位。毕业后去了Sun公司工作,后来java就诞生了。
最近,外媒Evrone公司的软件工程师、技术编辑Grigory与Java之父James在线交谈。访谈中,James提出了非常多的观点,他认为:“对可靠性的要求越高,静态类型语言就越有用。”同时,他还分享了自己对一些编程语言的看法:厌恶C中的宏,对Lombok又喜又怒,非常喜欢Lisp等等。
关于编程语言构建方式
Grigory:
作为软件开发者和软件顾问,我们试图在俄罗斯组织Python,Ruby,Java和Go社区帮助更多人。您在Java方面的经验和工作能很好地帮助开发者。在这次采访中,我们希望能与其他开发人员合作,共同解决业界的基本问题。
有些语言,比如Go,没有类别和继承,而有些语言尝试使用Rust等特性。作为语言设计师,你认为现代通用合理的编程语言应该如何构建?
James:
我应该继续使用这个类别,这对我的编程工作非常有用。C语言中有一些宏,这很糟糕,因为宏不是语言的一部分,不应该包括在内。Rust的工作人员正试图恰当地使用宏。
对于其他语言,比如Lisp家族,人们总是试图更灵活地应用它们。他们有一种定义语法的方法,几乎与语义无关。在大多数语言中,语法和语义密切相关。我写了很多Lisp,我真的很喜欢用Lisp。有些语言可以让你以不同的方式做到这一点。比如Groovy,可以直接用AST,Rust有一些语法集成的宏。但是我总觉得还有一个问题:除此之外还能做什么?
在Java世界里,Lisp计算代码片段,重新生成新代码,人们就是这么做的。尽管看起来很低级,但是很受欢迎。人们可以使用注释组合,用不同的语言生成字节码,这是非常强大的。在Jackson中,它会给你意想不到的惊喜,比如在Jackson中,它。
这方面,这是一项非常强大的技术,另一方面,它很难控制。这种技术充满可能性,但这种可能性是有限的。我又爱又恨Lombok,因为它增加了很多Java特性,都很好,但另一方面也显示出弱点。JCP的社区功能在下降。我已经离开好几年了。虽然有些事情可以做,但我只能在纸上谈。
Grigory:
这就是为什么我们更想了解你创建语言的经验,而不是一些Java增强建议。五年前,我试图控制一些Java字节码。我发现用它创建特定领域的语言有点困难。但是有了Ruby,就容易多了。Evrone有很多开发人员精通Ruby。Ruby开发人员很优秀,但是需要多年的培训才能真正控制DSL的魔力。
James:
Java之所以尴尬,是因为Java总是试图编译机器代码,Ruby几乎总是被解释。如果你想同时获得超级功能和终极性能,这将变得非常困难。
如何看待破坏性的更改?
Grigory:最近,我们采访了Ruby的创始人YukihiroMatsumoto。同时,他也尝试着发布最新的Ruby3.0版本。Java对改变总是持谨慎的态度,我知道。是否有理由使所有语言完全兼容进化?还是只有在特定的语言中,如Ruby或Java?
James:这几乎完全取决于开发社区的大小。每一次破坏性的改变都会给开发者社区带来痛苦。假如没有太多的开发人员,破坏改变并不重要。
另外,必须衡量成本效益。假设你有一个突破性的改变,这将增加你的工作负担,但也可能会带来一些好处。但是,如果将下标运算符从方括号改为括号,这没有什么好处,只会增加麻烦。
JDK9很少出现破坏性改变:如果您使用隐藏的应用程序界面,包装机制将被破坏。人们突破了包装的界限,采用了非传统的方式和不该用的东西,虽然这很痛苦,但是一旦我们发生了根本的变化,平台将有更多的创新空间。根据这个更改,平台可以分割,您可以自定义包装,Java运行环境将更小。
更多的问题是:当遇到bug时,人们会对其采取一些灵活的措施,如果你修复了这个bug,那么灵活性就会受到影响。Java世界中确实存在这样的例子,我们要么不修复bug,要么引入一种修正错误的方法,甚至将其应用于硬件。
可以联系所有语言在一起吗?
Grigory:还有最后一个问题。俄罗斯软件开发人员对JetBrains和Kotlin的开发感到骄傲。Kotlin、Clojure、Scala等语言正在你创建的Java虚拟机、库、框架和现有代码生态系统中蓬勃发展。但是,这些语言面临挑战吗?你能把这些语言联系起来吗?当有人试图用不同的语法操作Javahotswap时,会遇到什么困难?
James:这取决于你的目的。Java虚拟机内置了很多安全可靠的概念,主要与内存模型的完整性有关,比如指针,不能伪造指针。对于C语言,如果不能伪造,就不能使用。如果你试图在JVM上实现C语言,配置严格的安全虚拟机,有些功能就不能实现。但是有些人建造的虚拟机没有严格的安全模型,也没有内存分配模型。要想在C和Kotlin之间实现互操作,就必须放弃一定程度的安全性和可靠性。这取决于你的选择。
Java诞生之初,我的原则是:我不想调试内存损坏的问题。我在内存崩溃的问题上浪费了太多的时间,可以花你几天的时间。我真的很讨厌跟踪内存损坏的bug。但是每个人的喜好都不一样,有些人可能觉得花时间做这件事很有价值。有些人喜欢使用vi,70年代和80年代的好编辑器。
Grigory:内存安全模型真的很重要。它提供了一些东西,但也造成了一些限制。谢谢你,James!
山东济南汉码未来觉得james不愧是java之父,他的看法都非常有远见,真是听君一席话胜读十年书啊