在今天举行的RubyConfChina 2012大会上,Ruby语言之父松本行弘(Yukihiro "Matz" Matsumoto,@yukihiro_matz)第四次来到中国参加大会,为大家带来了一场名为《Be a language designer》的主题演讲,分享了作为语言设计者的心得,还带来了mruby与Ruby 2.0的最新信息。
Ruby诞生于1993年2月24日,Matz只是出于兴趣,对编程语言的热爱,开发了Ruby,当时是一个Unix的脚本语言,但是,当时很多人对Ruby并不感冒,因为已经有了Perl。Matz并没有放弃,因为他相信只有不断挑战才能成功:
Only chanllege again and again will bring you the success.
他提到了三个能在IT时代生存下来的角色,其中之一就是语言的设计者,他在场做了简单的调查,与会者中没有语言的设计者,仅有一位语言的实现者。Matz例举了一些知名语言的发明者——Perl、Python等等,有兴趣的人可以去访问language inventor or serial killer? 这个网站。他告诉大家,其实开发一门语言并没有大家想象的这么难。每个开发者平时设计的代码、API和接口其实都是一门“语言”。语言就是用来进行交流沟通的,他举了个例子,Ruby甚至能用于人与人的交流。
人人都能成为语言的设计者,只要关心你身边的人,关心你自己,关心你的未来。Ruby的热心布道者Dave Thomas说过:
Programming is a process of designing your own dsl.
因此,如果想要设计一门语言,不妨先从DSL写起,用它来构建你的应用程序,从内部DSL写起,慢慢发展为外部DSL,这成就了著名的Ruby on Rails。
作为Ruby之父,Matz亲手重新实现了Ruby,这就是mruby。mruby可以算是Ruby的一个子集,它在语法上完全兼容Ruby 1.9,非常小巧精悍(<500K),适用于嵌入式环境,提供了软实时,能够运行于小型设备(比如SAKURA Board)中,甚至嵌入在别的语言或者应用之中。Matz介绍了几个与mruby相关的项目:
mruby的应用非常广泛,能被用于各种智能设备上,比如能够被用于太阳能面板控制器、智能网络路由、自动售货机控制器甚至汽车上,它同样能用来开发游戏和编辑器。Matz表示,如果有人用mruby开发了一款编辑器,那么他原因抛弃使用多年的emacs,使用这款编辑器。
2013年是Ruby诞生20周年的日子,在日本20岁算是成年,因此Ruby 2.0将于2013年2月24日发布。从2001年第一次公开讲到Ruby 2.0,10年后,它终于要与人们见面了。此次Ruby 2.0带来了大量重大变化,他重点例举了以下四个:
第一,Keyword Formal Argument
def downto(from, to, step:n ) ... end
第二,Enumerable#lazy(下例中使用了lazy,不会消耗太多内存)
(1..Float::INFINITY).lazy.map {|i| i.to_s }.select {|s| /3/ === s }.first(5)
第三,Module#prepend
class Foo def foo; p :foo; end end module Prepend def foo p :before super p:after end end class Foo prepend Prepend end Foo.new.foo
第四,Refinement
module R refine String do def foo ... end end end "".foo # => error! using R "".foo
在提问环节中,很多与会者都对mruby和Ruby 2.0表示了浓厚的兴趣。Matz表示Ruby的性能在不断改善之中,2.0的性能有比较不错的改善,比如64位系统里的浮点数性能得到了大大的改善,但是目前还不会考虑多线程方面的优化,mruby会在不久的未来支持Fiber;mruby能运行于各个平台之上,但它不会替代cruby,也不想代替cruby,mruby语法上兼容1.9,但是由于一些原因,mruby中还不能很好地使用c extension。移动领域是下一个重要的战场,Ruby会在这个方面继续下功夫。
本次大会上Matz反复提到想让世界更美好,让Ruby更美好,Matz希望Ruby 2.0能成为Ruby历史上最好的版本,也希望大家能够积极参与,共同让Ruby变得更美好。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。