近日,流行的Scala Web框架Lift(单击以查看InfoQ上关于Lift的更多报道)想通过一个JRuby API吸引Ruby程序员。Lift创建者David Pollak写到:“除了某些特殊情况,JRuby中可以完美应用Lift”。
\但既然有了Rails和其他Ruby框架可以开发Web应用,Ruby开发者为何还会使用Lift呢?David在声明中写到:
\\tLift无疑是目前最为优秀的Web框架。相对于其他任何Web框架来说,它对Comet和Ajax都提供了更好的语义支持。默认情况下,它比其他大多数框架都更为安全。基于Lift的应用的可伸缩性也更棒。Lift应用要比其他大多数Web应用都更为简洁。换句话说,如果你是个Ruby开发者,正在寻找更加安全、可伸缩性更好的Web框架以构建交互性更好的应用,那么Lift就是你的不二之选。\
你可以通过Lift's Seven Things站点验证上面这些声明,该站点提供了一些示例,演示了“其他Web框架很难或是根本没法实现的7件事”。
\我们向David问到:将Lift带给Ruby程序员的动机是什么。
\\t \t我热爱Scala,它是我最钟情的编程语言。在与一些开发组织交流并看到Scala的使用率之后,我认识到Scala在未来几年内的使用率不可能达到Ruby,甚至是Python的水平。另一方面,Lift已经演变为一个成熟的Web框架,比其他任何Web框架(看看 Seven Things吧)都更为安全、更易于构建交互式应用。因此,我决定在Lift中支持其他语言。\\我相信这么做是正确的,并且招聘了几名资深的Ruby开发者帮助我在Lift中开发Ruby API,他们看起来像是Ruby API,而非生硬地添加到Lift之上的附属物。我们打算采用Ruby的方式编写Lift-Ruby代码。感兴趣的读者可以到http://liftjr.org了解更多信息。
\我真诚希望Lift之上的Ruby API能够以一种比Scala API更好的方式将Lift暴露出来,未来某一天,Ruby方式终究会对Lift的Scala API产生积极的影响。
\但作为静态语言Scala的拥趸,我的主要目标是少说、多听,看看我们到底能将Ruby API开发到什么程度。
InfoQ:从JRuby中访问Scala或是从Scala中访问JRuby会遇到什么问题呢?
\JRuby API是整洁、平滑且易于使用的。除了标准的unityped与完整的类型之间的差别外并没有什么实际的问题,请查看Philip Wadler的介绍。\\如果从JRuby中访问Scala,那么Scala的singletons(object关键字)会产生一些问题,我们已经增强了JRuby,将其当作是Ruby的Class对象。Scala还有一些符号方法名(如!、%、\u0026amp;等等),我们需要将其在JRuby中公开出来,现在正在解决这个问题。
InfoQ:Scala的一个非常灵巧,又被经常使用的一个特性就是模式匹配,而这在Ruby中却没有对应之物。你提到了Ruby中用于模式匹配的DSL,能否向我们介绍一下呢?
\\t这或许是整个项目中最为困难的一部分了。我们针对Actor做了一个设计(尚未实现),看起来还不错: \t\
\ class MyActor \u0026lt; LiftActor\ def string(str) # same as case str: String =\u0026gt;\ end\ \ def some_message(p1, p2) # same as case SomeMessage(p1, p2) =\u0026gt;\ end\ end\\我们还具体分析了每一种模式匹配的情况。重申一次,这个想法是以Ruby的方式编写API,但却反映出Lift的语义而不是将Scala语法硬塞到Ruby语法中。Lift Google Group上的其他Ruby开发者的建议也是非常不错的。
Lift JRuby集成有自己的站点(liftjr.org)。不知读者怎么看?Ruby和Scala社区会从这种跨界中受益么?
\查看英文原文:Lift-JRuby Integration Bridges the Gap Between Ruby and Scala