BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 丁雪丰 关注 3 他的粉丝 发布于 2012年11月18日. 估计阅读时间: 7 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

在今天举行的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)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

DSL是什么的缩写啊 by 贫 户候

DSL是什么的缩写啊,求大神们教下,谢谢

Re: DSL是什么的缩写啊 by Ding Xuefeng

Domain Specific Language

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT