zoukankan      html  css  js  c++  java
  • Java创造者詹姆斯·高斯林采访

    詹姆斯·高斯林,通常被称为"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世界中,我们决定不修复错误,或者引入一种做正确事情的方法。这甚至出现在硬件中。

    格里戈里:25年前,当我开始自己的软件开发者生涯时,我写了很多C和C++代码。我记得这些神秘的Bug,每月发生一次。调试这些错误是一种痛苦。但现在,作为一个软件开发人员,我看到很多工具集成到我们的工作流程中,比如静态类型跳棋。现代开发人员使用 IDE,如IntelliJ IDEA,甚至视觉工作室代码。他们编写源代码,静态类型检查器解析程序,构建抽象语法树,并检查一切可能。然后在文本编辑器中突出显示可能的错误。这种技巧不仅适用于静态键入的语言,甚至适用于动态键入的语言,如 Python、Ruby 和 TypeScript。您对我们今天使用的这些静态式跳棋有何看法?他们是在编写更好的软件上向前迈出了一步,还是我们需要在语言语法中投入更多?

    詹姆斯:嗯,两者都是。我非常喜欢带有静态类型系统的语言,因为它们为静态类型跳棋和 IDE 提供了脚手架。我花了大半场时间作为一个软件工程师,最不令人满意的方式,我花时间是寻找晦涩难懂的错误,发生在奇怪的时间。我能做任何事情让Bug在浪费我的时间之前消失都是一件好事。所以,我非常喜欢IDE可以做些什么来降低Bug的概率。因此,当我们观察动态键入的语言,如JavaScript和Python时,它们没有一个推理框架来解决它,因为他们不一定知道什么类型的东西:他们只是有点猜测强键入的语言(如 Java)为类型检查器提供了更严格的框架。而且,再上一个台阶,有些事情可以证明完全自动定理。因此,有像达夫尼这样的系统,它有一个非常复杂的定理证明。因此,如果您想要构建加密算法,您将能够在数学上证明属性。你可以这样做。这可能有点太远了,但对于某些代码来说,它真的很有用。

    这在很大程度上取决于你的目标到底是什么。如果你是一个大学生,你试图完成你的作业,或者你是一个博士生,你试图毕业,那么当你写一个程序,你的目标是,它应该工作一次。至少一次因为你必须做一个演示,并能够炫耀它,看看它是否工作。如果你在工业环境中, 我一生中大部分时间都在工业环境中, 工作一次只是稍微有用。它每次都要工作。工作一次和每次工作之间的差别是巨大的。因此,如果它只需要工作一次,那么更有活力的语言工作得相当好。如果你必须确保它会一遍又一遍地工作,所有的静态打字工具可以帮助你获得信心。但是如果你正在做的事情是...说,你是一个物理学家,你想找出一些计算的结果,它只需要运行一次。这取决于您正在执行的工作的上下文。软件越需要可靠性,静态键入的语言就越有帮助。

    本文来自博客园,作者:Java大家族,转载请注明原文链接:https://www.cnblogs.com/stm32stm32/p/15244855.html

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

  • 相关阅读:
    POJ 3169 Layout(差分约束+链式前向星+SPFA)
    HDU 2680 Choose the best route(SPFA)
    PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)
    PAT L2-013 红色警报(并查集求连通子图)
    PAT L2-014 列车调度(最长上升nlogn)
    PAT L3-010 是否完全二叉搜索树(二叉搜索树)
    HRBUST 2310 Tree Painting(无向图欧拉路径的性质)
    POJ 2230 Watchcow(有向图欧拉回路)
    UVa 10054 The Necklace(无向图欧拉回路)
    UVa 1600 Patrol Robot(三维广搜)
  • 原文地址:https://www.cnblogs.com/stm32stm32/p/15244855.html
Copyright © 2011-2022 走看看