11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

  • 2012-11-17
  • 本文字数:1718 字

    阅读完需:约 6 分钟

在今天举行的 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 相关的项目:

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

2012-11-17 08:062843
用户头像

发布了 135 篇内容, 共 55.5 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

Python进阶(二十三)Django使用pymysql连接MySQL数据库做增删改查

No Silver Bullet

Python django MySQL数据库 pymysql 10月月更

趣学前端」为什么有的页面背景颜色是渐变的

叶一一

CSS 前端 10月月更

Go-Excelize API源码阅读(二十三)——SetDocProps、GetDocProps

Regan Yue

Go 开源 源码刨析 10月月更

正在消失的机器视觉公司

脑极体

面试官:说说你对Node中的Stream的理解

CoderBin

面试 前端 Node 10月月更

【一Go到底】第十五天---continue快速入门

指剑

Go golang 10月月更

PriorityQueue源码解析(一)

知识浅谈

Priority Queue 10月月更

一个实际的例子学习 SAP BTP Java 应用的 @Before 注解使用方式

Jerry Wang

Java 云原生 Cloud SAP 10月月更

测试需求平台5-Blueprint优化与首个vue页搭建

MegaQi

测试平台开发教程 10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析03

桑榆

源码刨析 10月月更 C++

Java三大特性(一)—封装

共饮一杯无

Java 面向对象 10月月更

首轮Zepoch节点已售罄完结,你期待次轮吗?

威廉META

大数据ELK(二十六):探索数据(Discovery)

Lansonli

discovery 10月月更

如何在高性能的前提下,降低数据库存储成本?

OceanBase 数据库

「趣学前端」日常浏览的页面是怎么实现出来的

叶一一

JavaScript 前端 10月月更

Java基础(六)| Debug模式及基础练习

timerring

Java debug 10月月更

【LeetCode】两个链表的第一个重合节点Java题解

Albert

算法 LeetCode 10月月更

Python进阶(二十二)Python3使用PyMysql连接mysql数据库

No Silver Bullet

Python3 MySQL数据库 pymysql 10月月更

「趣学前端」页面上吸顶的效果是怎么做到的

叶一一

CSS 前端 10月月更

首轮Zepoch节点已售罄完结,你期待次轮吗?

鳄鱼视界

什么是数据产品经理?数据产品经理与传统产品经理有什么区别?

雨果

数据产品经理

「趣学前端」日常浏览的页面为什么可以五颜六色

叶一一

CSS 前端 10月月更

华为云从入门到实战 | 负载均衡服务原理

TiAmo

华为 云开发 10月月更

Go-Excelize API源码阅读(二十二)——SetAppProps(appProperties *AppProperties)

Regan Yue

Go 开源 源码分析 Excelize 10月月更

「CSS畅想」周期性事情怕忘,来看看一个月内都安排在哪天

叶一一

CSS JavaScript 前端 10月月更

「趣学前端」给不懂技术的朋友简单演示,代码是怎么被编写出来的

叶一一

JavaScript 前端 10月月更

挑战30天学完 Python:Day4数据类型-字符串str

MegaQi

挑战30天学完Python 10月月更

Go-Excelize API源码阅读(二十一)——GetDefinedName()、DeleteDefinedName()

Regan Yue

Go 源码阅读 源码刨析 10月月更

有人意图取代SQL,你同意吗?

雨果

sql

【从0到1学算法】5.Bubble Sort算法-下

Geek_65222d

10月月更

B类纯资金业务的资金安全保障

agnostic

资金安全 B类业务 纯资金业务

Matz:如何成为语言的设计者_Ruby_丁雪丰_InfoQ精选文章