近日,流行的Scala Web框架Lift(单击以查看InfoQ上关于Lift的更多报道)想通过一个JRuby API吸引Ruby程序员。Lift创建者David Pollak写到:“除了某些特殊情况,JRuby中可以完美应用Lift”。

但既然有了Rails和其他Ruby框架可以开发Web应用,Ruby开发者为何还会使用Lift呢?David在声明中写到:

    Lift无疑是目前最为优秀的Web框架。相对于其他任何Web框架来说,它对Comet和Ajax都提供了更好的语义支持。默认情况下,它比其他大多数框架都更为安全。基于Lift的应用的可伸缩性也更棒。Lift应用要比其他大多数Web应用都更为简洁。换句话说,如果你是个Ruby开发者,正在寻找更加安全、可伸缩性更好的Web框架以构建交互性更好的应用,那么Lift就是你的不二之选。

你可以通过Lift's Seven Things站点验证上面这些声明,该站点提供了一些示例,演示了“其他Web框架很难或是根本没法实现的7件事”。

我们向David问到:将Lift带给Ruby程序员的动机是什么。

    我热爱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开发到什么程度。



    JRuby API是整洁、平滑且易于使用的。除了标准的unityped与完整的类型之间的差别外并没有什么实际的问题,请查看Philip Wadler的介绍。

    如果从JRuby中访问Scala,那么Scala的singletons(object关键字)会产生一些问题,我们已经增强了JRuby,将其当作是 Ruby的Class对象。Scala还有一些符号方法名(如!、%、&等等),我们需要将其在JRuby中公开出来,现在正在解决这个问题。 Hudson迁移到了GitHub上

    这或许是整个项目中最为困难的一部分了。我们针对Actor做了一个设计(尚未实现),看起来还不错:

      class MyActor < LiftActor
        def string(str) # same as case str: String =>
        end
      
        def some_message(p1, p2) # same as case SomeMessage(p1, p2) =>
        end
      end

    我们还具体分析了每一种模式匹配的情况。重申一次,这个想法是以Ruby的方式编写API,但却反映出Lift的语义而不是将Scala语法硬塞到Ruby语法中。

    Lift Google Group上的其他Ruby开发者的建议也是非常不错的。

Lift JRuby集成有自己的站点(liftjr.org)。不知读者怎么看?Ruby和Scala社区会从这种跨界中受益么?

只有注册用户登录后才能发表评论。
网站导航:

posts - 139, comments - 0, trackbacks - 0, articles - 0

Copyright © PHP博客