What are your experiences developing in Scala/Lift?
最近我听到了很多关于scala和Lift Web框架的好消息,特别是从Foursquare的人那里,因此,我可能会在下一个项目中使用此技术。
- 你们当中有scala/lift开发者吗?< BR>
- 您在这个平台上开发的经验是什么?它比RubyonRails或python/django有什么优势?< BR>
- 你认为它是一种可行的技术,并且在未来几年里"值得关注的东西"吗?< BR>
值得吗?在scala/lift平台上分享您的体验。
我现在在斯卡拉做大部分事情。(我应该提到,我认为斯卡拉是自一段时间前发明轮子以来最好的东西。-D)
在我的拙见中,它是唯一一种真正允许人们选择一项任务的最佳方法的语言,而不必在面向对象方法和功能性方法之间存在不必要的分歧。
看看之前声称拥有这种语言的语言,我基本上可以看到两个相互竞争的语言设计阵营:
从面向对象的角度来看,函数编程最近获得了一些吸引力,并认为"好吧,我们并不真正理解函数的内容,但是让我们在语言中添加一些花哨的语法糖分,这样我们就可以声称它也是函数的。"(示例:Java、Python)
然后是功能方面的人,他们认为"好吧,我们的功能方法远远优于其他任何东西,面向对象的胡说八道很烦人,但是让我们在我们的语言中添加一些额外的关键词,这将使我们的语言确实脱离学术界!"(示例:f,ocaml)
scala的设计师统一了来自双方的许多方法,并创造了一些设计良好的语言,在我看来,这是与其他语言最大的区别,它决定采用"frankenstein"方法进行编程语言设计。
我在电梯方面只做了些小事情,在铁路和Django方面只做了一些表面的经验,我不得不承认,大多数时候,当我想知道为什么电梯中的某些东西与我预期的不同时,这是因为我的期望有缺陷,电梯的方法优越。
电梯肯定不是"简单的介绍斯卡拉",但学习电梯如何工作几乎是一样的回报学习斯卡拉之前。
在没有任何逻辑的情况下拥有一个"干净"的视图的能力是对其他框架的一个很大的改进,这些框架声称相同,但却没有做到这一点。scala的XML文本支持可以验证响应的格式是否正确:编译器将在编译时证明您只向客户机发出格式良好的XML。
Lift是一种可行的技术,目前是唯一真正的方法,如果你想构建看起来、感觉和行为像"真正的"桌面应用程序的Web应用程序,而不需要自己编写大量的代码。
我现在正在开发我的第二个Lift应用程序-它在Lift的最佳位置非常强大-非常实时,很多并发性。
第一次我们在与数据库层进行了几天的搏斗之后就退缩了(我相信现在好多了),转而去玩/scala。这使我们团队的现有知识最大化,并使最后期限成为可能。但是,当我们的项目变得相当大时,热代码重新加载几乎停止了(PermGen不断用完——这是scala编译中的一个持续问题,几乎在任何地方都存在),并且在网站的不同位置手动处理方法调用参数和位置安全等问题变得相当麻烦。当它完成时,我们很高兴——就像我发现Rails 1的方式一样,随着项目规模的增加,速度的增加会减小,到最后,它就像在velocity/spring/xml++中工作一样单调和容易出错。
这一次,我们致力于研究电梯是如何工作的,以及正确的工作方式。这意味着要在邮件列表中随意浏览大量内容(旧版本的讨论通常仍然是相关的),最重要的是,这是团队的新风气。有必要非常强烈地将这一座右铭内化:
"这是一种痛苦和重复的感觉。我敢打赌他们做这件事会更容易。"
到目前为止,电梯从未让我们失望。顺便说一句,我不是在谈论站点地图和列表连接语法之类的东西——您必须对函数scala有一个相当好的处理,否则您将无法读取源代码,甚至无法配置您的应用程序。
也就是说,这不是疯狂的木偶单子或其他东西,只是一些常见的习语,你可以在几周的scala学习。
对我们来说最大的问题是编译周期太慢。到Jetty大约需要20秒:运行我们的项目,这是一种不同的感觉,当它工作时,热编译所有你的东西。另一方面,我们实际计时的是,前几天我们的一个开发人员抱怨它,结果发现尽管在技术上很热门的编译它,但在开发模式下加载页面仍然需要12秒。所以不会有巨大的损失,只是觉得必须跳到命令行有点慢。
Lift让你做了很多事情,在我们的应用程序中有很多地方(因为它是可用的),我们说"是的,我们真的更愿意让该页面的所有浏览者立即实时更新,而不是让他们稍后发现他们已经过时了(想想你同时发布给某人的所有时间,通过SA我回答)事实证明,彗星无处不在——它不是一个专业的用例,它是事情应该运行的方式。而且举重非常容易。
我们也喜欢强大的、可编程配置的安全模型——一旦我们将思维模式转换为"我们必须将每个位置都列入白名单,并指定必要的进入条件",我们就再也没有看到其他的会话问题——你知道,那些你认为用户会通过某条路径,从而了解整个b的会话问题。取消参数?比如,一个有效的用户名,一个感兴趣的区域或者其他什么?(我故意含糊其辞)。这可能是有状态框架的一个棘手问题,即当用户访问页面时,您将希望有可用状态,而不是(例如)要求在每次请求时都执行所有状态。
我从这次重新拍摄的照片中得到的信息:
这是值得的。不仅要构建你正在尝试构建的应用程序,还要构建你不知道自己需要的应用程序。
有很多令人头疼的地方,但没有很多代码。当它起作用的时候,它真的起作用了。它速度快,而且干净,而且它在浏览器和服务器之间工作的所有奇迹,我从来没有见过它被混淆。
我在电梯里开发企业财务应用6个多月,我以前是Java程序员。我注意到一些要点,可以帮助您:
我写的代码行很少(很好的例子)
电梯周围有一个非常友好的社区。他们总是试图提供实质性的答案。我没有什么不好的经历。甚至他们也愿意为电梯的新功能提供新的建议。他们批准了我的两个建议!
大约每6-8周发布一次新的稳定小版本的电梯。新里程碑每两周定期举行一次。
Lift是Web应用程序的伟大框架。你可以阅读电梯的七个主要功能。
提升默认ORM模块-映射器不适用于具有大量外键和约束的大型和高级数据库模型。我们不得不用尖叫声。
我无法想象我现在必须返回Java代码。但我的小建议是尝试编写一些简单的应用程序,您将看到。