当前位置: 首页 > 科技观察

Java 之父最新访谈:JIT 很好,但不适合所有语言

时间:2023-03-13 04:50:50 科技观察

Java之父最新访谈:JIT好,但不是所有语言之父都适合”。企业软件开发公司Evrone的技术布道师(DevRel)GrigoryPetrov最近采访了JamesGosling。JamesGosling谈了很多关于本次采访的编程语言,比如他对现代编程语言的新特性的看法,如何看待编程语言更新带来的破坏性变化,为什么不是所有的编程语言都使用JIT技术等等。Grigory:我们想在俄罗斯组织Python、Ruby、Java和Go社区作为软件开发人员和软件顾问。通过这次采访,我希望通过揭露行业中的基本问题来帮助开发人员。您在Java领域的经验和工作经验可以提供帮助开发人员变得更好,所以让我们一起努力实现这个目标!一些编程语言,例如Go,取消了类和继承。同时,其他语言尝试了新功能,例如Rust中的特征。作为语言设计者,你认为编程语言应该采用什么现代的、通用的、合理的方式来进行组合(Composition)。James:我可能会坚持使用类,因为我发现它们对于这种情况非常有效。事实上,对于如何以不同的方式做事,我没有任何好的、清晰的想法。在C中,宏的存在几乎是一场灾难,因为宏不是语言的一部分,而是语言之外的特性。Rust只是想有一种正确的方式在语言中使用宏。对于其他编程语言,例如Lisp家族,它们有一种定义几乎完全独立于语义的语法的方法。我写了很多Lisp,对用Lisp程序操纵Lisp程序的技术着迷。有些语言让你以不同的方式来做这件事,比如Groovy,我们可以直接使用AST。另一方面,Rust具有语法集成的宏。Lisp通过评估代码片段来生成新代码,这种方法也经常用于Java世界。虽然是一个非常低级的方法,但它非常流行。因为开发者可以组合注解,生成不同语言的字节码,这是一个非常强大的技术,经常用在意想不到的场景中。示例包括Jackson框架,它通过计算序列化器来提高性能。当然,这既是一项强大的技术,但也非常难以驾驭。这项技术充满了可能性,但可能性是有限的。我与龙目岛有着强烈的爱恨交织的关系。它增加了许多好的Java特性,但另一方面,也暴露了它的弱点。因为有些特性应该是内置函数。Grigory:我们最近采访了Ruby作者YukihiroMatsumoto,他提到了他在最新的Ruby3.0主要版本中所做的一项实验。他试图在不引入重大更改的情况下发布此版本,然后看看会发生什么。我知道Java对“破坏性”持谨慎态度。那么兼容性是所有编程语言都关心的问题吗?与每个主要版本兼容是不是一个好主意?还是仅适用于Ruby或Java等特定语言?James:这几乎完全取决于读者社区的发展规模。每一个重大变更都会让开发人员头疼,如果社区没有很多开发人员,重大变更并不是什么大问题。还必须进行成本效益权衡。如果增加了一个破坏性的变化,增加了负担,但同时提供了一些好处,那么可以考虑。例如,如果您将下标运算符从方括号更改为圆括号,它可能不会给您带来任何好处,并且会引起很多开发人员的困惑。这是一个愚蠢的改变。例如,JDK9引入了一个极其罕见的突破性变化:如果开发者使用一些所谓的隐藏API,封装机制将被打乱,那些打破封装边界并以不应该使用的方式使用API的开发者或者,从8升级到9会遇到很多问题。还有另一种情况:当某处存在错误时,开发人员针对该错误实施了解决方法。在这种情况下,如果错误得到修复,这些变通办法可能会失效。这种情况在Java中也存在,我们的做法是要么不修复bug,要么引入正确的实现。Grigory:让我们谈谈商业和行业的发展。我自己从未编写过机器人程序,但我在一家为数百万人开发软件的公司工作了一段时间。对比20~25年前的今天,我发现像GitHub这样的社交编码平台得到了大公司的支持,帮助个人开发者和企业或行业软件开发者进行开源开发。那么我们是否可以认为现在是开源软件的黄金时代,您怎么看?James:我不知道怎么回答,因为这个问题涉及到未来。“现在是开源软件的黄金时代”的观点暗示着“从现在开始它会走下坡路吗?”如果现在是黄金时代,未来不就是黄金时代吗?所以我的看法是,不管黄金时代是什么样子,我们生活的环境越来越好,我们正在一步步接近理想中的“黄金时代”。我们目前面临着围绕安全的各种危机以及人类的网络恐怖主义。当这种事情仍在发生或正在发生时,我不认为这是一个黄金时代。如果有某种方法可以结束网络恐怖主义-这将是一个非常“黄金”的时代,让我们等着瞧吧。我想说的是,现在确实是个好时机,但它可以变得更好。Grigory:你在Java和JVM中使用了JIT技术。JIT带来了令人难以置信的速度,同时又不影响优雅的语法和高级功能Java被许多编程语言引用,例如C#和JavaScript,它们通过热路径编译重新编译代码的速度几乎与C和C++一样快。但是许多其他语言,例如Python、Ruby、PHP,虽然有可选的JIT,没那么流行。很多主流pro编程语言也不使用JIT来提高性能。那么,为什么不是所有的编程语言都使用JIT来为开发者提供更快的速度呢?James:其实静态类型语言更适合通过JIT来提升性能。对于Python这样的动态语言来说,这其实是非常困难的。通常人们最终做的是为语言添加注释,这样你就可以得到像TypeScript这样的编程语言,它本质上是带有类型注释的JavaScript。这很有趣,因为JavaScript本质上是没有类型声明的Java。所以TypeScript本质上是具有混合语法的Java。但是如果你是一个正在用Python快速编写脚本的开发人员,声明会让他们感到困惑,而且考虑变量的类型是非常烦人的。脚本语言世界中的大多数开发人员并不关心性能问题。他们更关心开发能否尽快完成,而不关心性能和相关细节。Grigory:有一个非技术性的问题。当我们谈论不同的语言时,您个人认为,初学者或相关专业应该选择什么语言作为第一语言?James:这个问题的答案肯定是有点偏的,毕竟Java成功使用了这么多年。但我自己学习的第一门编程语言是PDP-8汇编代码,大约在同一时间学习了Fortran。所以我认为对于初学者来说,你可以教他们任何东西,因为每个人的学习方式都不一样。不过在这个问题上,我觉得应该更多的考虑初学者未来的职业道路。如果你想成为一个全面的软件开发人员来构建一个大型的高性能系统,那么JVM语言是绕不开的,无论你学习什么JVM语言。示例包括Clojure、Scala和Kotlin。但是如果是学物理的,我觉得Python也不错。事实上,我认为选择哪种编程语言作为你学习的第一门语言并不是什么大问题。虽然许多人坚持使用他们学习的第一门语言,但如果他们学习不止一种语言并来回切换,那就更好了。我什至认为大学应该开设比较编程语言优缺点的课程。课程内容是用5种不同的编程语言完成作业,而这种课程设计可以让学生快速学习这些语言因为它们并没有太大的区别。但是通过这种方式,学生会思考语言的优点和缺点。很久以前就学过Cobol的数值计算,Fortran的符号运算,这两种语言都不擅长的题,最后还是得了A。本文转自OSCHINA文章标题:Java之父最新专访:JIT好,但不适合所有语言