非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/17487前端
松本行弘(Yukihiro Matsumoto),Ruby语言发明者,亦是亚洲数一数二的编程语言发明者。现兼任网络应用通讯研究所(NaCl)研究员、乐天技术研究所研究员、Heroku首席架构师等。昵称“Matz”。讨厌东京,喜欢温泉。图灵社区就《代码的将来》,以及中国读者所关心的一些话题,采访了Ruby语言设计者松本行弘(如下简称Matz)先生。(采访者:《代码的将来》译者周自恒)程序员
周:松本先生今年出版了新书《代码的将来》,这本书的中文版正在由我进行翻译,预计明年会在中国出版。您的上一本书《松本行弘的程序世界》在中国受到了读者的好评,此次的新书和前做相比有哪些不一样,又有哪些看点呢?编程
Matz:《松本行弘的程序世界》一共涉及了14个话题,每一个话题都是浅尝辄止,内容比较普遍但不是很深刻,而此次的新书则是设定了一个大的主题——即对将来即将到来新技术的思考,所以内容比《程序世界》所涉及的范围要窄一些。此外,这本书还在时间尺度上进行了探讨,例如从计算机出现以来,到如今为止经历了怎样的变化,并由此来思考将来可能会发生的变化,也就是对过去和将来两方面都进行了思考。计算机的世界变化很是快,而这本书的目的在于探讨其将来变化的方向。ruby
周:提及计算机的发展,您在书中还提到了关于摩尔定律的一些话题呢。服务器
Matz:摩尔定律是描述计算机将如何发生变化的一个定律,书中所探讨的不只包括计算机自己的变化,还包括计算机为周围的环境所带来的变化。微信
周:关于编程语言进化的方向,保罗·格雷厄姆在一篇名叫“一百年后的编程语言”的文章(参见图灵图书《黑客与画家》P156)中,主张“拥有最简洁最小核心的编程语言”将是将来发展的趋势。对于这一观点,您在书中表示“不一样意”,这是为何呢?您对编程语言发展方向的见解又是怎样的呢?网络
Matz:保罗是一个很喜欢Lisp的人,而Lisp所具有的特性正好符合他所说的“一百年后的编程语言”的样子,所以保罗认为一百年后的编程语言就应该变成Lisp这个样子。但实际上,Lisp这个语言的历史已经有50多年了,说实话,Lisp如今并无成为一种有不少人在用的主流语言。我以为这也许是由于Lisp对于大多数程序员来讲不具有那么大的魅力,也就是说,做为一种“拥有最小核心”的语言,或者从某种意义上说是一种很“美丽”的语言,和程序员们所指望的语言之间,存在着必定的差距。若是一两年的时间里,Lisp的魅力没有被你们所接受,那还能够理解,但已通过了50年尚未被普遍接受的话,是否是它在本质上就不太符合你们的指望呢?“对人类来讲好用的语言”和“拥有最小核心的语言”之间的这个差距多是很大的,我以为可能未来100年也没办法消除。至于将来的编程语言应该是怎样的,我以为应该是兼具接近Lisp的运行模型,以及人类容易理解的语法这两方面特征,这么一看Ruby是否是更接近这样一种语言呢?架构
周:松本先生被称为Ruby之父,咱们知道在编程语言的设计过程当中,可能要作出不少选择,例如动态仍是静态、基于原型仍是基于类等等。在Ruby的特性中,您认为当初最难作的选择是什么?框架
Matz:在设计Ruby以前,我在上大学的时候还设计过另一种语言,而那种语言是彻底静态的,和Eiffel语言很是类似。而我本来也是特别喜欢静态语言的,不过上大学时设计的那种语言是以学术研究为目的的,多年以后,当我想设计一种编程语言做为本身的工具来用的时候,我就以为仍是动态语言实际用起来比较好用。抱着这样的想法,我设计了Ruby,如今看来这个设计仍是正确的。那么当初对于Ruby应该是静态仍是动态这个问题,也许算不上是最难的吧,但至少是我在设计中作出的“最大”的一个判断。而在此以后,由于是动态语言,那就借鉴一下Smalltalk和Lisp吧,Perl有一些功能也不错,因而如此这般吸取了这样一些语言的特性,也就显得比较天然而然了。Ruby的特色在于Mixin模块,而这个特色在Ruby诞生当时还算是很是罕见的,由于我不喜欢多继承,总以为应该有一个更简单的方式,因此就设计了Mixin模块。编程语言
周:那么如今回过头来看,Ruby当中有哪些地方会让您以为“若是当初设计成这样就行了”呢?
Matz:最开始的时候个人目标只是想实现Perl所具有的功能,所以从Perl借鉴了不少,好比说用美圆符号($)来修饰变量名之类的,如今看来以为学得有点过了,搞得和Perl太像了。固然,除此以外还有其余一些小地方,但最主要的我以为就是这个了,也就是跟Perl太像了这一点。刚开始的时候,尚未造成Ruby的语法习惯和文化,所以不少东西都是从Perl“抄”过来的,如今看来好像一股脑拿过来的东西太多了,里面其实有一些是不须要的。而通过一段时间以后,Ruby本身的文化已经造成,Rails出现以后又造成了Rails的文化,而到了这个时候再看的话,可能就会以为这些Perl的部分好像没啥必要呢。
周:你们都认为“Ruby有如今的人气基本上都是因为Ruby on Rails的贡献”,您在书中也认同这个观点,那么您认为Ruby on Rails得到巨大成功的缘由是什么呢?
Matz:首先是得益于Web的快速发展,几乎全部的软件开发平台都在瞄准Web这个领域。以往在用CS(客户端-服务器)架构来开发的系统,如今均可以在Web上实现了。在Web上可以开发的应用变多了,这是一个主要的背景。另外,Ruby的优点在于进行软件开发很是容易,也就是开发效率比较高。这两点结合起来,我认为就是Ruby on Rails成功的主要缘由。
此外,Ruby还有一些比其余语言强大的特性,例如元编程(Metaprogramming)、经过猴子补丁(Monkey patch)所带来的可扩展性等等,经过这些特性,甚至能够对基础的类进行加强。DHH正是运用了Ruby的这些强大之处,开发出了Rails。而对于没有接触过Ruby的人,好比只用过Java这种比较“死板”的语言的人来讲,会以为“唉?竟然还能够作到这样吗?”,我以为这也是Rails成功的缘由之一。
周:听说DHH曾经是准备用PHP来开发这样一个框架的,但后来却转向了Ruby?
Matz:对,由于PHP在元编程方面有不少限制吧。Rails推出以后,又出现了不少(在PHP上实现的)模仿Rails的开发框架,好比Symfony、CakePHP等等,可是Ruby所拥有的强大特性PHP却并不是彻底具有,即使不考虑它们各自的背景,只是单纯去对比这些开发框架的话,我仍是以为Rails更强大一些,我以为DHH选择Ruby也正是看重了这一点。顺便,我实际上是见过DHH的,在丹麦,那时候他还没开始学习Ruby,说不定那次见面也是对他产生影响的一个缘由吧。
周:中国读者很关心的一个话题是,Ruby目前最普遍应用的领域就是Web开发,那么在Web开发这个领域以外,Ruby的发展方向又是什么呢?
Matz:的确,Ruby在Web开发领域被用得不少,例如Rails、Sinatra等开发框架。但编程的世界并不是只有Web而已,我也一直但愿Ruby可以从Web中走出去。在不久的未来,我认为Ruby有望被应用的领域,主要有三个。
- 科学计算(Scientific computing),也就是大学科研中所要用到的计算。在这个领域,Python、R、matlab等语言用得很是多。我但愿Ruby也可以进入这一领域,为此咱们正在开发一个叫作SciRuby的项目,但愿借此推进Ruby在大学科研计算领域的应用。
- 高性能计算(High performance computing)。这个和科学计算有点接近,是运用超级计算机来进行计算的领域。和C++比起来Ruby确实要慢不少,因此你们都以为Ruby不可能被用于高性能计算领域。东京大学一个研究生作了一个研究项目,将Ruby写的代码编译成C语言代码,而后再编译成二进制程序,这个过程当中须要用到类型推导等技术,最好的状况下,速度可以达到C语言(指用C语言人工编写的同等程序)的90%。这个项目目前只发表了论文,尚未公开源代码,我但愿明年这个项目的成果可以所有公开。
- 嵌入式(Embedded)开发。所谓嵌入式就是指在微型设备,例如手机、医疗器械、机器人,在这些环境下,如今的Ruby其实并非很适合,内存开销很大,API也不合适,所以才须要开发适合嵌入式开发的,内存开销比较小的,而且具有面向嵌入式开发API的Ruby引擎,这也就是mruby。
以这三个领域为首,我但愿Ruby可以在Web开发之外的领域有更多的发展。
周:Twitter主要是用Rails开发的,最近我看了一则新闻,说美国大选的时候Twitter遇到了史无前例的大访问量,Twitter称为了应付访问量的上升,正在从Ruby转移到其余语言,您对这个问题怎么看呢?
Matz:这里面缘由不少吧。首先,Twitter刚开始开发的时候,没人知道Twitter会得到今天的成功,当时不少人以为,这种只能写140个字的博客有什么意思呢?但Twitter却出人意料地得到了巨大的成功。在这个过程当中,Twitter增长了不少新功能,在它快速发展的过程当中,Ruby的贡献是至关大的。由于一个新功能从构思出来到付诸实现,能够用很短的时间就可以完成。Twitter刚开始开发的时候不可能考虑到会有如今这样大的访问量,也就是遇到了设计上的瓶颈了,由于通常的网站也不可能会有每秒上万的访问量,所以能够说如今的Twitter发展到当初在设计上的极限了。
为了解决这个问题,Twitter须要开发一个全新的架构,以应付如今愈来愈大的访问量。不过,即使要重写架构,我以为沿用Ruby也是能够作到的吧?(笑)话说,一个网站在遇到设计极限的时候,有不少解决方法,好比重写架构、换其余语言等等,其中重写架构我以为是最重要的,而实际上Twitter也正是作了这方面的工做。但在这个过程当中,他们的工程师想要挑战一些新的东西,那么从编程语言上来讲,就提出要改用Scala,由于Scala是编译型语言,性能也不错,正好适合编写新的架构,我以为这样也不错。
在我看来,在网站所提供的服务尚未彻底成型的时候,最重要的是可以对需求的变化作出快速的反应,这个时候就须要Ruby这样灵活性比较高的语言;而在网站得到成功以后,遇到了设计瓶颈,用一种新的语言,好比Scala,来编写一个新的架构,以节约必定的资源,我认为这也是很好的一个结果。Twitter转向Scala还只是在其核心部分,而在Web前端和一些内部工具上还有不少地方在用Ruby。其实,上个月我还去拜访了一下Twitter,跟他们的工程师进行了一些交流,Ruby仍是用得不少的哦(笑)。
周:近年来随着智能手机、平板电脑等移动设备的普及,移动平台开发也变得很是热门。从编程语言来看,Android上是用Java,而iOS上则是用Objective-C来进行开发的,那么做为脚本语言,不只限于Ruby,您认为在移动开发上面会有怎样的发挥呢?
Matz:目前,提到移动开发,在Android上用Java,在iOS上用Objective-C彷佛是板上钉钉的事情,不过这也产生了必定的隔阂,好比某个App是为iOS开发的,若是要移植到Android的话,就得所有用Java重写才行。如今也逐步产生了一种新的尝试,例如PhoneGap、Titanium等框架,经过用JavaScript、Lua等脚本语言,编写出来的App就能够实如今iOS和Android的跨平台移植。做为Ruby来讲,也有一种叫Rhodes的框架,经过它就能够用Ruby编写出在iOS、Android以及Blackberry上通用的App。
之前移动设备和PC相比性能差距太大,若是App不能全速运行的话,就根本无法用了。但如今移动设备的性能已经获得了大幅度的提高,经过在通用框架的基础上,采用脚本语言来进行开发的方式,性能也逐渐变得能够接受,我想从此经过这种方式,用JavaScript、Lua、Ruby等脚本语言来提高移动开发效率的作法,应该会愈来愈流行吧。对了,刚才咱们说到mruby,其实用mruby来编写iOS和Android应用的项目也已经开始了呢,但愿不久的未来这样的App能愈来愈多吧。
周:刚才您提到了mruby,而明天您的演讲题目是Ruby 2.0,能够就mruby和Ruby 2.0的一些亮点,作一下简单的介绍吗?
Matz:刚才咱们也提到了,mruby是为了在微型设备上运行而设计的一种Ruby,它并不是拥有Ruby的全部功能,相应地,可以在微型设备上工做才是它的长处。所以,在以往没法使用Ruby的一些设备上面,例如自动售货机、控制器、机器人等等,从此也能够用Ruby来进行开发了。说不定几年以后,在电视机、汽车等地方也可以见到Ruby开发的软件。
Ruby 2.0则包含了两个信息。第一,Ruby从开始开发算起,明年将迎来20周年了。而做为对20周年的记念,是2.0这个名字所包含的最大的一个信息。若是但从变化来看,从1.8到1.9已是一个很是大的变化,不少人表示说很不适应,而从1.9到2.0的变化,并不像版本号的变化看起来那么大。实际上,个人目标是保证在1.9上能运行的全部程序,在2.0上面也都能运行,不会由于引擎版本升级致使原来的程序就不能用了。
Ruby 2.0确实也增长了一些新的功能。好比说,如今的Ruby中,能够经过猴子补丁,对某个类中的方法进行添加和替换,但这样一来,全部的用户都会受到影响,可能有人以为仍是原来那样的好,不想跟着改,或者说这样的改动和我如今的开发会发生矛盾、冲突等等。为了解决这个问题,Ruby 2.0中能够限定猴子补丁的做用范围,这样就能够在团队开发、库开发中,避免一些改动对开发范围以外的其余人形成没必要要的麻烦。以往Ruby可能都是用在小规模的项目中,而当项目逐渐扩大,开始由多个团队合做的时候,这样的机制就显得很是重要了。除此以外,Ruby 2.0中还有一些其余的新功能,也是针对团队开发的需求来设计的。
周:目前世界范围内普遍使用的语言大部分都是来自欧美的,做为例外大概只有来自巴西的Lua和来自日本的Ruby,您在书中也说这种状况让人感受“很寂寞”,那么形成这种状况的缘由是什么呢?要改变这种局面,咱们应该作出怎样的努力呢?
Matz:关于Lua呢,其实若是你要说它是欧美的也能够,巴西是属于“拉丁美洲”嘛(笑)。要说亚洲或者东亚这边的话,那就只有Ruby了,真的是蛮寂寞的一件事。从世界范围来看,(对于编程语言来讲)欧洲和美国的影响力应该是最强的,而亚洲虽然有众多的人口,但却没有可以出现不少的编程语言,确实挺寂寞的。
若是说对未来的期待,别的国家我不太清楚,至少在日本,实际上是有不少人在开发各类各样的编程语言,但除了Ruby之外,其余的语言在日本之外几乎就没人知道了。若是对编程语言感兴趣的人愈来愈多,所创造出来的编程语言也愈来愈多的话,这其中应该就会有那么一两个可以取得成功吧。在日本还存在一个问题就是语言障碍,日本人除了母语之外,精通外语的人很少,有趣的是,竟然有用日语来编写程序的编程语言呢。(周:说到这个,其实中国也有用汉语写程序的编程语言呢。)中国也有吗?果真。不过这些语言虽然有趣,却只能给日本人用,也就没法走向世界了。
说句题外话,我曾经收到过一个美国人发给个人一封邮件,他说你是个日本人,但Ruby看上去却跟英语没什么区别,由于Ruby程序都是用英语写的嘛,难道没有用日语写程序的编程语言吗?为何没有呢?我只好回答说:有啊,只不过你不知道而已,即使知道你也没办法用嘛。
如今在日本对编程语言感兴趣的人不断增长,大概我老是在网上还有书里说编程语言多么有趣,多少也是受了个人这些言论的影响吧,如今有很多人在挑战设计新的编程语言。在这些新的编程语言中,若是能有千分之一的语言可以最终得到成功,我认为就是很好的结果了。我不知道中国、韩国,以及其余一些亚洲国家中,有多少人想要挑战这一领域,不过若是你们以个人这本书为契机,可以改变“编程语言是别人给咱们的,咱们只能被动接受”这种见解,继而抱有“本身创造一种编程语言也不错嘛”这样想法的人可以愈来愈多的话,这其中必定会有人得到成功。
说到开源,不管是日本,仍是中国、韩国,在世界范围内发表的项目还不多,这也算是一个能够去努力的切入点。这里面可能有不少缘由,好比英语很难学,(周:好比GitHub也很难用?)哈哈,GitHub在中国能用吗?(周:能用能用……)唔,还好还好。不过,这个(哔——)的影响仍是很大的,有不少资料不太容易得到吧。(周:是啊,好比Go语言的官网就上不去呢。)啊!Go的官网上不去吗!果真是由于它是Google的吧(笑)。总之,须要面对的难题仍是不少的。另外,在日本也是如此,程序员把大多数时间都用在了工做(挣钱)上,要进行开源项目之类的活动就比较困难了。10年前,开源这个概念在日本也没人接受,而如今你们都逐渐明白了开源的主要性,开源项目也就逐渐增多了,我想将来几年中,在中国应该也会产生相似的变化吧,我很期待。
并且,在刚开始作的时候,没人知道到底作什么会成功。我在设计Ruby的时候,也不可能想着Ruby很不错之后必定会在全世界普遍使用。所以,一种编程语言生逢其时可能更重要一些,但这种事情,你不去尝试一下是不会知道结果的。在中国,也必定会有一些编程语言或者软件由于生逢其时,从而走向世界并得到成功。
周:在书里讲到Dart的时候,您说过对于编程语言来讲,生态环境是很重要的。那么要创建这样的生态环境,须要一些怎样的努力呢?
Matz:从用户的角度来看,用这种编程语言,对我有什么益处,这一点很重要。在Rails出现以前,使用Ruby的人,包括我本身在内,大多数都是以为Ruby写程序很轻松,这多是选择Ruby的主要目的。固然,Rails出现以后,由于“我要作个网站,Rails最快”这样的理由而使用Ruby的人变多了。所以,若是你设计一种新的语言,若是可以准确地传递给用户使用这个语言所能带来的好处,我想这样的语言成功的可能性会更大一些。
周:很是感谢,在采访的最后,请您谈谈对中国程序员的寄语吧。
Matz:在《程序世界》中我也提到了,我以为编程的将来应该会以开源的形式发展下去,将来的创新性软件或者编程语言,可能都会以开源的形式出现。做为开源软件来讲,别人作出来我能够无偿使用,这一点你们都很开心。在经历了这个阶段以后,若是可以更进一步,将本身作的软件开源,使其对全世界产生影响,若是能作到这一步的话,你可能就会成为一名一流的软件工程师。中国的软件工程师,就我接触的这些人来看,你们都很是认真和努力地学习技术,我但愿这些人之中,可以有更多的人迈出这一步,从而成为能够影响世界的一流程序员。