松本行弘采访

松本行弘:“Ruby 是为人类设计的,而不是机器”

简介

我们很高兴,我们的好朋友松本行弘,Ruby 编程语言的创始人,能够第二次作为演讲嘉宾参加我们的 2019 RubyRussia 大会,三年前,他曾在 2016 RubyRussia 大会上做过演讲。

在我们举办会议的这段时间里 — 至今已有十多年了 — Ruby 有了很大的发展,而 Evrone 也随之发展壮大。

Evrone 开发人员关系部的员工 Grigory Petrov 与 Matsumoto 先生进行了座谈,听取了他成名的第一手资料、Ruby 设计和发展背后的理念,以及关于日本生活和文化的一些情况。

采访

Grigory: 这是你第二次来到俄罗斯,第一次是在 2016 年,从那时起,参加 RubyRussia 的人数增加了一倍。 非常感谢你的演讲,我真的很喜欢,之前我还打算问你几个问题,现在我知道答案了!

我看到人们不仅向你提问,还要求与你合影,甚至向你索要亲笔签名,你简直是个明星! 我们开发人员当然很喜欢这种语言,以及你为社区所做的贡献,但是全世界的人们都对你这样热情吗,还是说这只是俄罗斯特有的现象?

Yukihiro: 我去到各处都有人要求一起拍照:在每个国家,以及每个会议上,都有人想要和我合影。 但我想这是第一次有人向我索要签名!

 

Grigory:作为编程语言的作者,你应该会收到许多问题、建议、想法等等。 你最常被问到的事情是什么?

Yukihiro: 最常见的问题是:“我来自 X 语言社区;您不能将 X 语言的功能引入 Ruby 吗?”,或者类似问题。 我对这些请求的通常回答是, “不,我不会那样做”,因为我们有不同的语言设计和不同的语言开发策略。

我们不能简单地从 X 语言中提取一些功能,然后加到 Ruby 中,尽管在某些情况下,我们确实会借鉴其他语言的一些想法,比如 Python、JavaScript 和 Elixir。 人们反复在问这个问题,但是很少得到肯定的答复。

 

Grigory: 你能说“不”真是太好了;我发现“由社区设计”的技术通常不一定能得到最好的结果。 我们有这么多不同的语言和技术,所以我们真的可以好好看看最佳实践,只实施最合适的内容。

我们最近看到了一个风潮,那就是在 JavaScript、Python 和 PHP 等动态类型语言中加入渐进类型。 你对类型标注和渐进类型有什么看法? 为什么它们这么受欢迎? 对于在 Ruby 3 及更高版本中进行类型检查,你的大致想法和计划是什么?

Yukihiro: 举个例子来说,Rust 和 Go 是静态类型语言。 如果使用它们构建的软件发展得非常快,那么到后来你可能要维护庞大的代码库,可能有数百万行代码,而每个代码库都有数百名团队成员去维护,在这种情况下,类型检查是检测不匹配情况的一种非常方便的方法。

相反,对于动态类型的语言,我们必须编写测试,来避免代码中的类型不匹配问题。 随着软件的发展,测试的数量(以及编写测试的负担)也随之增加,这确实导致了静态和渐进类型近来大受欢迎。

但与此同时,静态类型声明是多余的,对于像 Ruby 这样的语言,我们希望获得静态类型检查的好处,但是不要手动类型声明的冗余。

作为 Ruby 社区和 Ruby 语言,我们试图同时满足这两种需求:我们将类型信息文件与 Ruby 程序分开,Ruby 程序本身不包含任何静态类型信息。 相反,有一个单独的类型信息文件,我们称之为“Ruby 签名文件”,它包含了关于库、Gems 和你的程序的类型信息。

我们将提供一个工具,叫做“类型分析器”,它可以收集你的软件的类型信息。 在收集了库和软件的类型信息之后,类型分析器就拥有了它所需要的关于所有类和方法的所有信息,这样它就可以检测类型矛盾,即类型冲突。 您甚至可以手动完善签名文件中的类型信息,以提供更好的类型检查。

在将来的 Ruby 版本中,你能够在一定程度上静态地检查类型,但程度非常有限。 您将获得传统的 Ruby 行为,在运行时进行类型检查。 你可以使用“一级类型检查器”,通过源代码中可用的类型信息,发现 40% 到 80% 的类型错误。 “二级类型检查器”可以根据对代码本身的分析,生成额外的类型信息。 有了这些工具,未来版本的 Ruby 可以提供静态类型检查,而无需在代码中使用显式类型标注。

Yukihiro Matsumoto interview

Grigory: 在会议发言中,你提到了这一点,这个想法确实不错。 我是一名 C/C ++ 开发人员,自然很熟悉静态类型,而且我一直把类型看成是一种声明自己意图的方式,来帮助语言和工具发现将来可能出现的错误。

你的想法是创建一个系统,其中你自己来写代码,但我们可以从代码中推断出足够的信息来发现错误,而不必借助于显式类型,我非常喜欢这个想法。

可以先进行实验,然后测试想法,这真是太好了。 你认为 Ruby 的前景如何? 您会用什么方式引导这门语言?

Yukihiro: 我其实并没有引导这种语言或社区。 我只是提供技术,由社区决定走哪条路。 至少,我们有足够的技术可用于尽可能多的领域,让 Ruby 变得灵活而高效。 举个例子来说,Ruby 现在主要用于构建 Web 应用,但我希望看到 Ruby 能够用于研究,或者 AI 和机器学习。 我们正在努力让这项技术能够用于新的领域。

 

Grigory: 我们开发人员喜欢给事物贴标签并进行分类。 比如,这是一辆跑车,而这是一辆家用车。 我们也给编程语言贴标签:JavaScript 是“Web 语言”,C 是“系统底层语言”,C# 是“Windows UI 原生应用”。 你倾向于如何对 Ruby 进行分类?

Yukihiro: 我会将 Ruby 归为一种高效的编程语言。 提高效率是 Ruby 最大、最主要的一个目标。 我设计 Ruby 是为人类设计的,而不是为机器。 有时,核心贡献者会抱怨这种语言设计,因为高效地实现它很难。 Ruby 的设计首要关注的并不是性能,而是生产力。 这意味着实现者面临着更大的挑战,但我们对这个挑战感到兴奋:我们的目标是使 Ruby 尽可能提高开发人员的效率,同时,也尽可能提高它的性能。

 

Grigory: 对于 Python,由于实现问题,我们没有多行匿名可调用对象。 对于 Ruby,你和核心开发人员正在努力使开发人员的工作更轻松,尽管在实现中存在技术上的挑战,但听到这个消息还是很让人高兴。

说到挑战… 想象一下,如果你能回到过去,给刚开始进行 Ruby 语言开发的自己提一条建议。 你会给出什么建议?

Yukihiro: 不要过多借鉴其他脚本语言。 你自己的编程语言将是最好的通用编程语言。 仅仅为了使 Ruby 与脚本语言更具可比性而引入的那些功能,在将来就是一个附属物,除非它们出错,否则基本上毫无用处,所以最好不要过多关注它们。

 

Grigory: 过去,“脚本”和“编译”编程语言之间存在巨大差异。 如今,世界已经发生了变化:虚拟机、字节码和 JIT 编译器,它们之间的界线已经非常模糊了。

在这一演变过程中,你实现了对 Ruby 的许多更改,也进行了许多实验。 有些成功了,有些失败了。 你认为你最成功的 Ruby 设计是什么? 你最喜欢什么?

Yukihiro: 如果非要选一个,我会选代码块。 Ruby 代码块是对高阶函数的一种非常独特、非常有用的抽象。 它比其他语言要简单得多。 虽然受到限制,但是很方便。

 

Grigory: 真巧,对于 Ruby,我最喜欢的就是它的代码块。 在我自己的演讲和采访中,我也说过 Ruby 最主要的特点就是 DSL、语法糖和代码块。 代码块真的很棒。

Yukihiro: 在 Swift 这样的语言中,如果最后一个参数是一个函数,那你可以把它括起来,就像 Ruby 代码块一样。 有人提议将类似功能添加到 JavaScript 中。 我为此感到非常自豪。

 

Grigory: 是的,JavaScript 可以将箭头函数作为最后一个参数进行传递,进而模拟代码块,因为(从 ES6 开始)JavaScript 已经具有多行函数的 fat-arrow 语法。 代码块真的很棒。 与此同时,在 Ruby 的设计或演变中,有什么是你不喜欢的吗? 你认为应该修复或者已经修复了的最大设计失误是什么?

Yukihiro: 我是有一些不喜欢的东西。 全局变量:它们对于“脚本语言”是很有用,但现在它们更像是一个附属物。 我也很后悔在语言中添加了线程,我们本应该有一个更好的并发抽象。 我的另一个设计错误是,有些对象不需要设计成可变对象。 比如,用户可以更改现有时间对象的时区,而不是创建一个新时区。 我觉得这一点很遗憾。

 

Grigory: 是的,可变性是一件很棘手的事情,很容易导致我们的源代码出错。

我们从 Ruby 的技术性层面继续探讨,你在开发这门语言时,是如何安排工作的? 你的工作日是什么样的?

Yukihiro: 我是一名全职 Ruby 开发人员。 我有一半的时间在思考未来 Ruby 3 的设计。 其余的时间则忙着另一个 Ruby 的实现,MRuby,以及其他一些项目。

对于 Ruby,规范的 Ruby 实现是由核心贡献者完成的,所以我只需要做一些决策,比如“这个方法应该是这样的”、“这个语言功能应该是那样的”、“语法是这样的”,“语义是那样的”等等。 我只是做出决定,然后交给其他开发人员来执行。 所以,我既是设计师又是程序员。 我会有三分之一的时间花在 MRuby 上。

 

Grigory: 我查看了你在 GitHub 的资料,看到了非常多的提交 (commit),包括你在飞往飞俄罗斯的当天。 最近有很多关于开发人员变得“倦怠”的讨论。 你有空闲时间吗? 有什么兴趣爱好吗? 为了避免倦怠,保持健康,你会做些什么?

Yukihiro: 幸运的是,我所有时间都花在开源软件上。 我没有来自客户的压力。 我也没有老板。 我自己管理自己。 因此,我在工作时是比较放松的。 除了发布日期之外,我没有什么具体的截止日期。 这种自由让我感觉很轻松。 这是其中一个原因。 另一个原因是,我尽量把时间花在与电脑和编程完全无关的事情上。 比如,我会花时间去遛狗、撸猫。 我也会为我们当地的教堂做一些事。 我会花时间陪伴家人。 花时间进行社交对我很有帮助。

yukihiro matsumoto rubyrussia

Grigory: 许多俄罗斯的 Ruby 开发人员很喜欢日本这个国家,也喜欢日本文化。 他们看动漫、看漫画,有的还会去日本旅游。 作为一个土生土长的日本人和一名软件开发人员,你会为想去日本旅游的同行们推荐哪些景点和体验?

Yukihiro: 日本是一个非常多元化的国家。 你可以去东京这样的大都市,那里很有未来感。 我们有很多流行文化,比如漫画和动漫。 同时,我们也有山川、森林和历史古迹,例如古老的神社和庙宇。 我们有美丽的樱花和树叶。 你可以根据自己的的口味和喜好,去享受很多东西:食物、自然、技术。 我建议大家去享受这个国家的多样性!

 

Grigory: 日本文化和历史中是否有什么东西影响了 Ruby?

Yukihiro: 这我不确定。 在日语中,我们有句子链,这和 Ruby 中的方法链类似,所以这可能是受日语的影响。 日本是一个富裕的国家,我们有些人不用那么辛苦工作来维持生活。 因此,我可以从事根本不赚钱的开源软件工作。 我们不出售开源软件。 我们可以通过白天上班或赞助商的赞助来维生,这有助于我们(包括贡献者)专心研究 Ruby,开发出更好的技术。 这就是我能想到的。

 

Grigory: 再问最后一个比较棘手的问题。 人们通常想知道通过另一个人的眼睛看世界会是什么样子,想知道他们的想法和感受。 作为一名编程语言的作者,有没有哪些方面是外人看不出来的?

Yukihiro: 有一点是… 不管别人怎么想,创建语言其实并不是一件难事。 计算机专业的学生会上语言实现的课程,几乎每个毕业生都能写出自己的编程语言。 从技术上讲,这并不困难。

同时,人们也不了解设计语言的本质。 语言是思想的基架,是一种构造思想的方式。 人类语言也是一样的,比如俄语、日语和英语。

编程语言,比如 Ruby、Python、JavaScript 等等,有助于开发思维,让你把想法变成有形、有用的东西。 这是编程语言的主要目的。

我认为编程语言应该有一个理念,就是开发我们的思维,所以 Ruby 的重点是生产力和编程的乐趣。 而其他编程语言注重的是简明、性能或者类似的东西。 每种编程语言都有不同的理念和设计。 如果 Ruby 的理念让你觉得舒服,那说明 Ruby 就是你的语言。

 

Grigory: 谢谢! 以上就是 Grigory Petrov 在 RubyRussia 2019 上对松本行弘的采访。 谢谢!

Yukihiro: 谢谢!

 

松本行弘的视频采访:

 

 

从对松本行弘的采访中,我们了解了 Ruby 的理念,以及核心团队对 Ruby 开发的未来计划。 我们很高兴能和松本行弘成为好朋友,他激励着我们在各种软件开发项目中使用 Ruby。 如果您有很酷的想法,并且和我们一样热爱 Ruby,那就让我们一起创造一个新产品吧!

 

联系我们
已有项目构想?
我们一起来实现它吧
添加附件
文件必须小于 8 MB
允许的文件类型:jpg jpeg png txt rtf pdf doc docx ppt pptx
本网站受 reCAPTCHA 保护,并适用 Google 隐私政策服务条款