查尔斯·纳特(Charles Nutter)。 如何将一个古老的整体项目转移到JRuby,这值得吗?

几天之后, RubyRussia会议将在莫斯科举行。 我们的来宾Charles Nutter (在Red Hat上从事JRuby和JVM支持的工作)回答了几个问题。

您是如何进入编程和Ruby领域的?

2004年,我与一家政府公司签约,成为Java Enterprise架构师。 我为美国农业部(USDA)进行了一个项目,每月在华盛顿呆了几个星期。 其中一次旅行与RubyConf 2004恰好同时进行,并且由于我的一位朋友长期以来建议我关注Ruby,所以我决定参加这次会议。 因此,我结束了一个专门针对Ruby的活动,对这种语言一无所知……但是我理解了每段代码,给出了每个示例。 我很惊讶,并答应自己寻找一种将Ruby引入Java世界的方法。

您现在在做什么项目?

我是两个JRuby项目经理之一。 这项工作包括各种相关项目,例如,对本机库的支持(我们在JRuby上支持Ruby FFI)或字符串转换(从CRuby移植类似的逻辑)。 此外,我与社区合作,以确保我们的用户始终可以从我们那里获得帮助。 总的来说,工作总是很忙!

以下哪个项目的前途最光明?

我认为这是JRuby,尽管它不是JVM平台上最流行的语言。
至少我们为JVM本身的积极变化做出了贡献。 很大程度上要归功于我们与Sun Microsystems和Oracle的合作,JVM现在已成为许多动态语言(不仅仅是Java)的便捷平台。 我希望我们在这一变化中发挥重要作用。

您最常使用哪种语言? 您最喜欢哪一个?为什么?

我主要用Ruby和Java编写,因为JRuby是同时使用这两种语言编写的。 每种语言都非常适合其任务。 Ruby-用于创建需要快速开发和适应的应用程序。 Java-用于编写高速,可靠的库和服务。 而且JRuby结合了两全其美的优点!

您喜欢用Java编程吗?

是的,尤其要考虑所有最近添加的语言改进,例如lambda(Ruby中的闭包或块),以及在静态类型唯一时声明局部变量(var)的新语法。

您如何看待Rust?

Rust是一门很棒的语言! 在大学里,我经常使用C ++,但是我可以肯定地说,如果那时我认识Rust,我宁愿在上面写东西。 我特别喜欢静态类型的所有权模型,该模型允许我们编写稳定的并行程序,并确保对内存的安全访问。 我认为其他语言将来也应该采用。

您对Ruby的前景有何看法? 多年来,许多人认为语言及其社区“消亡” ...

经过多年的JRuby研究,我爱上了Ruby语法及其工作方式。 但是,恐怕性能问题确实存在并且很重要。 JRuby正在努力使并行线程成为Ruby开发人员的现实,但是到目前为止,绝大多数Ruby服务都使用几个独立的进程,从而花费了大量的CPU和内存资源。 我认为这是由于用于编写Ruby扩展的CAPI过于庞大和侵入性所致,它不允许实现诸如并行线程之类的改进。
但是我不希望有一天我们仍然会看到变化。

您将来应该考虑使用哪些较不流行的Ruby功能?

我期待字符串在默认情况下是不变的,就像大多数其他语言一样。 如果可以将更多的Ruby对象深度冻结,则并发编程将更加简单。 它可能类似于Rust中使用的模型...如果您在流中共享对象,则应选择不会被完全修改的对象版本。 这扩展到了Ruby中的数组,哈希和几乎所有其他可变对象:我们需要简化对数据更改的阻止。

我有一个很大的旧的整体Ruby项目。 我想知道是否可以将其转换为JRuby。 如何做到这一点,甚至有意义?

实际上,第一个问题是此步骤是否会帮助您。
切换到JRuby的重要参数可能是:

  • 在存在缺陷时降低资源成本,例如,如果多个应用程序同时托管在同一服务器上
  • 在大型金融和政府组织使用的JVM繁重的环境中部署Ruby应用程序
  • 与仅使用Ruby或C的等效库相比,需要访问仅存在于Java中的库或更易于移植到JVM的库
  • 在具有大量计算(会加载处理器)或大量并行任务的应用程序中,性能略有提高。

我要说的是,如果应用程序可以很好地扩展并且不会花费太多,那么您也许什么都不做。 但是,如果您决定从Ruby中获得更多收益,那么这里是迁移过程:

  • 将您的应用程序使用的所有第三方库放在一起。
  • 在其中突出显示使用C扩展名的代码。
  • 为每个扩展找到等效的JRuby。 我们有几个
  • JRuby Wiki上有关此内容的页面。 最受欢迎的库具有JRuby版本。 如果没有JRuby版本,则可以使用纯Ruby版本(在JRuby上足够快)或JVM库(在Java,Scala,Clojure等中),可以用作替代版本。
  • 一旦您在JRuby上赚到了所有的宝石,整个应用程序将开始工作! 我们非常关注兼容性,并尝试考虑用户关注的新问题。 因此,如果您在JRuby上拥有捆绑包,则很有可能该应用程序将运行。

好了,那么最困难的部分就开始了-如何释放资源。 多少个线程可以并行处理应用程序,如何节省所花的钱... :)

学生要成为优秀的程序员需要知道什么?

当我上大学时,我的计算机科学课程教授Scheme,这是一种像Lisp这样的功能语言,非常适合学习编程的基础知识。 我仍然建议新手程序员至少学习由麻省理工学院(MIT)出版的《计算机程序的结构和解释》一书。 好吧,通常来说,您所知道的语言越多越好。 这给出了新的想法,并允许您从不同的角度看待问题的解决方案。

您从哪里获得工作的动力? 您是否面临职业倦怠的问题?

倦怠是我们行业中的一个实际问题。 特别是在开源中工作
它带来很多压力。 我认为这件事发生在每个人身上……当工作太多时,您没有时间做所有的事情,您会浪费与家人和朋友的时间,忘记了自己的健康状况以修复另一个常规错误。 为了解决这个问题,我尝试着重于一个爱好:玩电脑和棋盘游戏,学习弹吉他,
学习外语,环游世界,结识新朋友。 不断抱怨的工作狂会一直生活在我体内,说服我重返工作岗位,但我仍然努力保持适当的平衡。

您对俄罗斯有何看法?您对即将到来的RubyRussia活动有何期待?

我爱俄罗斯,过去几年来我在这里参加会议的所有旅行都非常有用。 这是我第四次访问,之前我曾在圣彼得堡,莫斯科,甚至新西伯利亚(!!!)。 我期待着返回莫斯科,并与我听到很多的俄罗斯红宝石社区会面。

问题由Evrone的 PM Dmitry Matveev 提出 。 您可以在10月6日问您一个问题。 因此,在会议上见! 该网站上的所有详细信息。

您可以在hype.codes上阅读英文原版

非常感谢支持俄罗斯主要Ruby活动的公司:

一般合伙人-Toptal
黄金合伙人- 盖特库克帕德
银牌合作伙伴-InstamartUCHi.ruJetBrainsQlean
课后合作伙伴-Teachbase
铜牌合作伙伴-BookmateInSales

Source: https://habr.com/ru/post/zh-CN425379/


All Articles