Lua与PHP/Python/JSP等的比较

7

我即将开始我的下一个Web开发项目,想了解Lua在Web开发领域的优点。

与PHP / Python / JSP等相比,Lua在Web开发中如何表现?

与其他语言相比,有没有什么原因使Lua成为Web应用程序语言的不良选择?


7
如果你和Lua的使用者交谈,你会发现他们对名称很敏感。它叫做“Lua”,因为这个单词在葡萄牙语中意为月亮,是一个专有名词。它不是一个首字母缩写。 - RBerteig
6个回答

21
简而言之:
Lua提供一个更小、更简单的系统,你可以完全理解,但它在一个更小的生态系统中;Kepler是你所能得到的一切,你可能需要构建自己的一些东西。我觉得这很容易也很有趣(我经常使用Kepler中的Lua Expat解析器绑定Lua对象模型),但其他人可能更喜欢使用每个人都在使用的东西。
PHP最初更像是一个宏处理器而不是一门语言,尽管它在这些年里得到了改进,但当人们说"X变得更好了"时,我会对X持谨慎态度。我发现PHP令人反感,但是有一个庞大的Web开发生态系统
Python是一门不错的语言,但比Lua要大得多,并且处于主要修订阶段(从2.5转换到3.x)。同样,你可以获得一个大的生态系统;我对Python的问题在于语言和系统太大,任何一个人都无法完全理解。如果我不必面对这种情况,我就不喜欢这种处境。
Ruby是一个更干净的语言设计,而大型的Rails生态系统是赢家。Ruby比Python简单一些,但比Lua复杂一些。Rails有点庞大。

这个问题归根结底是:

  • 你更愿意理解系统中的所有软件,即使你必须自己构建很多东西吗?

  • 或者你更愿意有很多已经为你构建好的东西,即使你最终无法完全理解每个部分的工作原理吗?

如果你想要理解一切,那么Lua适合你。如果你想要很多已经为你构建好的东西,那么我无法建议你在PHP/Python/JSP/Rails等之间进行选择。

关于Lua和Python的更多信息,请参见哪种语言更好,Lua还是Python?


嗨Norman,你介意在LUA语言的静态/动态类型、强/弱类型等方面进行比较吗?谢谢! - Ben
4
“Ruby是一种更加清晰的语言设计”。与哪些语言相比呢?我认为与Lua或Python相比,它相对不够连贯。尽管如此,它仍然是一种非常优雅的设计,但我不会称7(具体取决于如何计算)种不同类型的匿名函数是“清晰的”。总的来说你的回答很好。 - troelskn
请阅读此链接:http://www.linuxjournal.com/article/3882。我不认为Python很复杂。相反,它非常易于使用并且非常强大,因此您可以制作非常复杂的东西。这与您所说的有一个*巨大*的区别。对于Python而言,它的巨大优点可能也是其缺点:人们可以编写令人难以置信的强大工具,但如果它们对你来说太聪明了,那么您可能永远无法理解他们所做的(我也是(不是很聪明))。许多免费软件都是由聪明人制作的,因此难以理解。 - Olivier Pons
但是Python语言本身并不是“太大”或“太复杂”的。我不能让人们这么说!;) - Olivier Pons
@Olivier:我读过Eric的论文和Guido的论文。Python是一种相当不错的语言,但与Lua(原帖提到的语言)相比,它更加庞大和复杂。我坚持我的答案。 - Norman Ramsey
显示剩余2条评论

7
使用Lua进行Web开发相对较少见...虽然你可以做到,但它将比使用成熟的Web开发语言(如PHP)或具有良好Web相关库(如python/ruby等)更耗费时间。如果你选择Lua,则意味着你可能会经常“重新发明轮子”,而这些成熟的Web语言中可能已经有了现成的可用方案。
更好的问题是,Lua提供了哪些其他语言没有的东西?或者,您想通过创建像Rails为Ruby所做的那样的Lua MVC框架来帮助Lua成为更好的Web开发平台?

2
Lua语言可以以过程化、函数式或面向对象的风格(或以上所有风格的混合)使用自然惯用语。与大多数动态语言一样,它提供了垃圾回收存储。将其与Python和其他动态语言进行比较是很自然(也很公平)的。但是,对于这种类型的任务,它与使用C++非常不同。 - RBerteig
是的,我想这个比喻不太恰当,我编辑了一下以澄清。我的意思更多是类似于相似的晦涩程度,而不是以编程语言类型比较为基础。我的观点主要是,受欢迎的 Web 语言有更多的工具或开源内容,通常可以带来更快速、更便捷的开发。 - Glitz
人们以前不是说Ruby是一种不太常用于Web开发的晦涩语言吗?但现在它却非常流行。 - Ben
在 Ruby on Rails 出现之前,Lua 也曾经有过类似的尝试。如今,由于有了 Rails 等框架,Ruby 已经成为了 Web 开发的不二选择。但是 Lua 并没有像那样适合 Web 开发的框架(不过 Kepler 或许会有所突破)。 - nos

4

Kepler项目可能是Lua网络应用开发的最佳起点。他们有一个邮件列表,其中的存档将会讨论各种方法的优劣。

Kepler网站本身是建立在一个名为Sputnik的CMS框架上,该框架几乎完全由Lua编写,基于Kepler项目。

Lua的典型方法是使用适合接口各种系统组件的语言来实现这些接口,并使用Lua进行业务逻辑和粘合。Kepler提供了大量用C编写的库,为Lua代码提供了访问文件系统、数据库和网络的功能。它还提供了一个定义良好的API层,用于与Web服务器进行接口,包括Apache、任何支持CGI的服务器和Xavante,后者是一个主要由Lua实现的完整Web服务器。


2

我来晚了一点...但我想再介绍一种语言:Haxe

为什么选择Haxe呢?

  1. Haxe是一个开源的语言,由一个小而活跃的社区推动。

  2. Haxe是一个独立于平台的语言,可以用于以下几个目标:

    • Flash Player 6-8和9-10字节码或ActionScript 3源代码
    • JavaScript源代码
    • PHP源代码
    • NekoVM字节码或Neko源代码(NekoVM是一种轻量级且可扩展的虚拟机,适用于服务器开发和桌面应用程序)
    • C++源代码
    • 目前正在开发Android Java源代码

    这意味着,作为Web开发人员,您可以使用相同的语言编写丰富的客户端和服务器。同样的代码以后可以重用于桌面/移动应用程序。

  3. Haxe是一种非常表达力和强大的语言,具有以下特点:
    • 一流的功能(匿名函数和方法在Haxe中是相同的),闭包以及带参数的枚举(类似于代数类型),允许使用函数式方法
    • 良好的类型系统,包括泛型、结构子类型等。为了简化其使用,编译器具有非常有用的类型推断,确保代码是严格类型化的,但节省了大量的冗余(变量类型由初始化确定,函数返回类型由返回表达式的类型确定)...
    • 跨平台API,包括从动态数组到反射/内省和远程包的所有内容,使您能够将整个对象从客户端发送到服务器,从一个平台发送到另一个平台...
    • 一致和激进的语言设计...当然,它也有一些缺陷,但这些主要来自于它针对极不同的平台...
  4. 女孩们喜欢它,而且它会让你真正富有... :D

Haxe最大的缺点在于它允许未经类型化的编码,以牺牲特定于平台的未经类型化代码的执行成本...如果编写得很好(实际上Haxe并不需要太多工作),则代码将在所有平台上以相同的方式执行...否则,结果取决于平台本身的运行时处理...

简而言之:Haxe是一种可以针对多个平台的伟大语言。它年轻、正在成长,您可以参与其中...


1

如果只是考虑语言的话,我同意Norman的观点。但如果你对Web开发框架很重要的话,那你就得考虑Ruby,因为RoR是一个非常成熟的框架。我喜欢Python,但是有很多可供选择的框架,没有一个是占主导地位的。CherryPy、Django、Pylons、web2py、Zope 2、Zope 3等等。对我来说,一个重要的指标是市场上的RoR工作机会比其他任何(语言、框架)都多。


指出RoR工作需求的重要性,加1分 - mcpeterson

1
关于Lua Web框架,还有LuCI。它主要用于小型嵌入式系统。我们刚开始使用它,所以现在我不能对它发表太多评论。我们只是做一些简单的配置界面,类似于已经提供的示例,所以我相信它足以满足我们的需求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接