BT

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

Randal Schwartz访谈:Ruby之根——Smalltalk王者归来

| 作者 Werner Schuster 关注 7 他的粉丝 ,译者 马家宽 关注 0 他的粉丝 发布于 2008年12月2日. 估计阅读时间: 15 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

Gartner的分析师Mark Drivezr在近日的一篇blog中提到近来人们对于Smalltalk日益关注。这一现象背后的原因很多,其中的一个重要的因素就是诸如Ruby、Python这些动态语言的流行。Smalltalk早在上世纪七八十年代就已经开始流行,并对于Ruby 这些后来的动态语言产生了深远的影响。许多Smalltalk虚拟机都已经历经时间的考验,非常成熟。

Seaside

Smalltalk之所以引人关注还得归功于基于Smalltalk的web框架——Seaside,而Seaside之于Smalltalk正如Ruby on Rails之于Ruby。Seaside已经推出了一段时间,也引起了广泛的关注。Avi Bryant正是基于Seaside开发了在线数据库DabbleDB(InfoQ曾做过Avi Bryant的访谈,其中涉及了DabbleDB如何利用Smalltalk的image概念来做持久化,以及Squeak的伸缩性问题)。

虽然Seaside是构建于Squeak之上,但近来还是有很多其它Smalltalk厂商也开始支持Seaside本身。Cincom Smalltalk不仅支持Seaside,并为其提供了一个浏览器中的GUI工具WebVelocity(您可以观看短版本的介绍,也可以在Google Video观看长版本的演示)。提供持久化和集群特性的Smalltalk分支GemStone/S,其出品厂商GemStone同样支持Seaside,比如他们的GLASS产品(这一产品也有免费版)。

Ruby和Smalltalk

Smalltalk曾经对Ruby产生过深远的影响,而且还将持续的影响着ruby的发展。例如Rubinius已经使用Squeak Smalltalk作为实现其虚拟机的参考模型,而GemStone的Maglev更是直接构建于Smalltalk虚拟机之上。

虽然Ruby的语法比起Smalltalk要复杂的多,但还是可以看出许多Smalltalk的影响。例如Named parameters(对应于Smalltalk中的“keyword messages”),在Ruby中并不直接提供,需要使用literal hash来模仿。而literal hash这一特性在Smalltalk中早已存在了。

Ruby:

def foo(arghash)
 # ... do something with arguments
 42
end

foo( :name => "foo", :size => 42)

注意:Ruby 1.9提供了更为简洁的literal hash语法,可以减少一些不需要的字符。

而使用Smalltalk的keyword message机制来做(注意方法名由所有keyword argument组成):

:name name :size size
  "this is a comment ... do something with arguments"
  ^42.

receiver name: 'foo' size: 42.

诸如Objective-C这样的语言也有Smalltalk风格的keyword message特性。

在最近加入新的“stabby lambda”语法(-> {})后,Ruby中Lambdas、Procs和Blocks之间区分变得更加复杂。Smalltalk规避了这一点。在Smalltalk中,创建block的方法只有一种:像[:argument| ^42]这样,接收一个参数,并且返回42。

Smalltalk和Ruby另外一个区别在于可用的工具和IDE。相对于Ruby IDE的短暂历史,Smalltalk则很早就被紧密的集成到了IDE中(当然,诸如GemStone/S和GNU Smalltalk这样的Smalltalk分支并没有特定的IDE)。Ruby IDE与Smalltalk IDE很大区别在于:所有的Ruby IDE都是用非Ruby语言编写的。例如Aptana (RDT)、3rd Rail (DLTK)、Netbeans和IntelliJ是由Java编写,SapphireSteel的Ruby In Steel则是基于Visual Studio。唯一的特例是FreeRIDE,虽然它是基于Ruby的,但其开发工作似乎已经停滞。

Ruby IDEs提供了静态分析,类型推断,以及其它一些用于分析和修改Ruby代码的逻辑——但实现这些逻辑的代码都是用Java或C#编写,并且依赖于JRuby或RubyInSteel的抽象语法树(AST)。这一情况随着最近Ryan Davis的ruby_parser的出现而改观。ruby_parser可以返回Ruby代码的AST(使用UnifiedRuby格式),并且包含完整的注释和代码行。

Smalltalk的IDE则采用Smalltalk编写,同时提供了静态分析工具和重构工具(史上的第一个重构工具其实正是Smalltalk的Refactoring Browser)。

Randal L. Schwartz访谈

为了了解从脚本语言(Perl)转向Smalltalk的感受,我们采访了Randal L. Schwartz。Randal是Perl领域多本畅销书和专栏的作者。最近他开始积极地使用并推广Smalltalk,提出了“Smalltalk时代”的口号。他同时还是Squeak团队的领导之一。

InfoQ:Seaside使用continuation机制来维护状态,这一做法已广为人知。Avi Bryant最近提到他正在研发的产品DabbleDB已经移除了continuation的使用,因为AJAX提供了另一种应用模型。您对此有何看法?Seaside的优势体现在哪些方面?

continuation让我可以创建抽象控制流,和创建layout view的方式类似。我可以编写一个诸如“显示此表单直到验证结束”的抽象,continuation库就可以在页面尚未完整时,返回web表单直至验证结束,看起来就像是在一次调用中显式的包含了该规则一样。如果没有continuation机制,我就得依仗一些顶级的recognizer来表达 “ok,这是现在需要的对表单输入的response”,我会因此失去本地状态。

InfoQ:你在你的Smalltalk和Seaside应用中使用了什么方法来做持久化?你在使用关系数据库吗?Smalltalk的ORM库情况如何?

对于遗留接口,Glorp是对象-关系映射的不二选择。Glorp正在开发当中,目标是为Glorp也增加一个“Active-Record”风格的层。
对于新应用来说,我强烈推荐GemStone的产品,该产品将虚拟机完全放在了一个可持久化的环境中。对象可以自然的持久化,因而不需要再被拆成SQL来与传统数据库交互。

InfoQ:你使用哪个版本的Smalltalk——你用过那些版本?它们都差不多——还是某些更适合特定的问题领域?

我是Squeak领导小组的成员,并且从最初发布到现在一直在密切关注它。只是最近才开始尝试Cincom VisualWorks,所以还在边用边学。我认为GNU Smalltalk很有意思,但作为Squeak的贡献者,因为许可证问题我看不到源码。(GPL代码不能被导入到使用MIT许可的发布版中)。

InfoQ:Ruby 1.9加入了Fiber——一种进行系统性协同程序的机制。一些Smalltalk版本也使用了Fiber,而不使用重型的内核线程。对此你怎么看?对于那些只有用户空间线程的Smalltalk版本来说,是否有使用内核线程的考虑?

我个人对线程没有什么好印象。在UNIX中,线程被拼写为“f o r k”,这是有原因的。我认为共享应该是选择性的加入,而不是选择性的退出。而线程的默认机制恰恰是错误的。

InfoQ:你已经积极推动Smalltalk一段时间了。关于Smalltalk,你最常遇到的质疑是什么?请列举两个。

“Smalltalk,这语言不是已经退休了吗?”当然不是!
“如果用Smalltalk的话,还能用我最喜欢的编辑器吗?”基本上不可以,而且我觉得当你意识到你只是在编辑5到10行代码时,你不会对你最喜欢的编辑器有多少留恋,而是会很想要一个对于当前环境非常敏感的编辑器。内建的编辑器可以很好满足这一点。

要想在像Eclipse这样的IDE下来完成Smalltalk的编程任务,可以使用STDT。它基于Eclipse并将Smalltalk的代码对应到文件和资源。播客“Industry Misinterpretation”曾对STDT的开发者之一进行过一次很长时间的访谈。 此外,Eclipse和Smalltalk本就应该紧密结合,因为Rick DeNatale表示Eclipse实际上起源于IBM在 Smalltalk方面的投入

InfoQ:用最简要的语言来描述一下Smalltalk吧!比如你会如何跟perl社区的朋友介绍它?

Smalltalk——我可以在20分钟内给你讲完所有的语法。它是完全面向对象的,debugger允许“现场”调试,甚至是在一个web环境中。Smalltalk包含内建的源代码管理,而且可以直接与系统中的任何库交互,或通过 FFI进行交互。Smalltalk可以与文件、设备和socket交互,其能力丝毫不逊于任何Perl程序。而且,Smalltalk已经历经长时间的检验。你与系统交互的任何一部分都是开放的,可编辑的,可订制的,包括你的开发工具在内。

InfoQ:现在Squeak背后的团队组成是什么样的?开发工作是如何推进的?

Squeak领导小组(我是其中一员)代表整个社区负责这个项目。我们还有Web小组、发布小组、新闻小组等团队来处理各方面的事务。(http://www.squeak.org/Community/Teams/)

InfoQ:你认为Perl中的哪些特性或语言概念是你非常喜欢,但在Smalltalk中无法找到的?

我仍然在使用Perl来编写命令行脚本。Smalltalk可并不是编写这些小程序的好选择:)

InfoQ:你对Ruby的Open Classe(Monkey Patching)有何看法?你使用过Squeak的Trait吗?

Ruby增加了这个包以后,就可以像seaside这样能够让每个对象在页面上“渲染自己”,并且提供类路由机制来做出合适的选择,非常不错。如果没有这种路由,你就得在用户代码级别来建立类似功能的类,这肯定是不合适的。

InfoQ:Ruby最近推出了很多新的实现—— Smalltalk已经有了来自不同厂商的各种运行时。你觉得这些各种各样的实现是问题还是财富?

我现在使用的两个主要(Squeak和VisualWorks)的Smalltalk实际上来自于共同的起源(最初的Xerox Parc image),所以差异性不是个大问题。不过像Seaside这样的项目确实让我们确信,实际上商们在产品特性方面走得很近,这是件好事。

更多关于Randal对Smalltalk的评论信息,可以参见他在Industry Misinterpretation的访谈podcast,他还共同主持FLOSS每周podcast。其中有一集可能对Smalltalk的爱好者来说尤为有趣:FLOSS 29:Dan Ingalls访谈。在1970年代早期,Dan根据Alan Kay制定的语言规约编写了第一个Smalltalk运行时,并随后在PARC编写了很多的Smalltalk版本,包括Squeak。此外,Randal还撰写关于Smalltalk的blog

想要了解关于Smalltalk的更多信息以及Smalltalk开发者如何进行软件开发,可以关注Cincom公司的James Robertson,他撰写关于Smalltalk的blog,此外每天发布一部screencast,每周发布一部podcast
GemStone有一个专注于GLASS的blog。GLASS是GemStone/Linux/Apache/Smalltalk/Seaside软件栈的缩写。

最后,你可以在网上获得Smalltalk的免费图书

阅读英文原文:Ruby's Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk


志愿参与InfoQ中文站内容建设,请邮件至editors@cn.infoq.com。也欢迎大家到InfoQ中文站用户讨论组参与我们的线上讨论。

评价本文

专业度
风格

您好,朋友!

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

获得来自InfoQ的更多体验。

告诉我们您的想法

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

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

最近脚本语言都在归来?! by Zoom Quiet

Ruby 引发了一系列脚本语言的归来?
Python ; Lisp ; Smailltalk ; Haskell ; Erlang ,,,
还有?

Re: 最近脚本语言都在归来?! by Lee Albert

Haskell 可不是脚本语言。

太可怕了,为了抢地盘死人都复活了 by ran Dig

还有groovy beanshell.....

Re: 最近脚本语言都在归来?! by Li Cao

照这么说,Smalltalk也不应该是脚本语言

Re: 最近脚本语言都在归来?! by 邱 茂源

Erlang也不是脚本语言吧?

Re: 最近脚本语言都在归来?! by Terry Tie

Erlang 是..

Re: 最近脚本语言都在归来?! by Lee Albert

不是ruby引发了这些语言的回归。而是人们发现连ruby这么小众的语言都这么多人关注。于是那些更老的更小众的也冒出来了。

允许的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通知我

7 讨论

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


找回密码....

Follow

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

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

Like

内容自由定制

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

Notifications

获取更新

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

BT