Matz:如何成为语言的设计者

  • 丁雪丰

2012 年 11 月 17 日

话题:Ruby语言 & 开发架构

在今天举行的RubyConfChina 2012 大会上,Ruby 语言之父松本行弘(Yukihiro "Matz" Matsumoto,@yukihiro_matz)第四次来到中国参加大会,为大家带来了一场名为《Be a language designer》的主题演讲,分享了作为语言设计者的心得,还带来了mrubyRuby 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 相关的项目:

  • MobiRuby——mruby for iOS
  • mruby for Android 仍在开发之中
  • mod_mruby——Apache mruby Extension
  • mruby_nginx——Nginx mruby Extension
  • mruby-libuv——适用于 mruby 的异步 I/O

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 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

Ruby语言 & 开发架构