【问题标题】:Lua vs PHP/Python/JSP/etc [closed]Lua 与 PHP/Python/JSP/等 [关闭]
【发布时间】:2010-11-21 03:44:45
【问题描述】:

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

Lua 在 Web 开发方面与 PHP/Python/JSP/etc.. 相比如何?

有什么理由让 Lua 成为 Web 应用程序语言相对于其他语言的糟糕选择?

【问题讨论】:

  • 如果你和 Lua 人交谈,你会发现他们对这个名字很敏感。它是“Lua”,因为它是葡萄牙语中“月亮”的专有名词。它不是首字母缩写词。

标签: php python web-applications lua


【解决方案1】:

简而言之:

  • Lua 为您提供了一个更小、更简单的系统,您可以完全理解它,但它位于一个小得多的生态系统;开普勒就是你所得到的,你可能不得不构建一些你自己的东西。我觉得这既简单又有趣(我大量使用 Lua bindings to the Expat parserLua Object Model,它们是 Kepler 的一部分),但其他人可能更喜欢使用其他人都在使用的东西。

  • 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 的更多信息,请访问 Which language is better to use, Lua or Python?

【讨论】:

  • 嗨 Norman,您能介意在 LUA 与静态/动态类型的语言之间进行一些比较...强/周类型等...谢谢!
  • “Ruby 是一种更简洁的语言设计”。相比什么?我想说与 Lua 或 Python 相比,它相当不连贯。它仍然是一个非常优雅的设计,但我不会将 7(取决于你如何计算)不同类型的匿名函数称为干净。否则很好回答。
  • @troelskn:公平的批评。几年前我学过 Smalltalk,当我看 Ruby 时,我真的只看到了 Smalltalk……
  • @Ben:我认为我没有资格详细讨论类型系统的差异——它们都是动态的。不知道这些天 PHP 有什么类型。
  • 请阅读:linuxjournal.com/article/3882。我认为 Python 并不复杂。相反。只是它是如此简单,它是如此强大,以至于你可以做出非常复杂的事情。这与你所说的有巨大的不同。使用 Python,它的巨大质量可能是它的缺点:人们可以编写非常强大的东西,但如果他们对你来说太聪明了,你可能永远无法理解他们做了什么(我也是(不是很聪明))。很多免费软件都是聪明人制作的,很难理解。
【解决方案2】:

使用 Lua 进行 Web 开发非常少见……您可以这样做,但是这将比使用已经成熟的 Web 开发语言 (PHP) 花费更多的时间或拥有良好的网络相关库(python/ruby/等)。如果您使用 Lua,这意味着您最终可能会“重新创建轮子”,因为在成熟的网络语言中可能很容易获得。

更好的问题是,Lua 提供了哪些您需要的功能,而您列出的其他语言中没有提供这些功能?或者你想通过创建一个像 Rails 为 Ruby 做的 Lua MVC 框架来帮助 Lua 成为一个更好的 Web 开发平台?

【讨论】:

  • Lua 语言可以用自然习语以过程式、函数式或面向对象的风格(或以上所有风格的混合)使用。与大多数动态语言一样,它为您提供垃圾收集存储。将它与 Python 和其他动态语言进行比较是很自然的(也是公平的)。但它与使用 C++ 完成此类任务非常不同。
  • 是的,我想这是一个糟糕的比较,编辑澄清。我的意思更多的是类似的晦涩难懂,而不是作为一种编程语言的比较。我的观点主要是流行的网络语言有更多的工具或开源内容,这通常会导致更快、更方便的开发。
  • 人们不是说 Ruby 是一种用于 Web 开发的晦涩语言,现在不是,它风靡一时
  • 在有人制作 Ruby on Rails 之前他们就做到了。 - 今天 Ruby 非常适合 Web 开发,因为有像 Rails 这样的框架。 Lua 没有像这样适合的 Web 开发框架(但也许 Kepler 会做到)
【解决方案3】:

Kepler project 可能是 Lua 中 Web 应用程序开发最著名的起点。他们有一个mailing list,其档案将有很多关于各种方法优点的讨论。

Kepler 站点本身是在一个名为 Sputnik 的 CMS 框架中构建的,几乎完全用 Lua 编写,并且基于 Kepler 项目。

使用 Lua 的典型方法是使用适合连接各种系统组件的语言来实现这些接口,并将 Lua 用于业务逻辑和粘合。 Kepler 提供了主要用 C 语言编写的库,这些库提供对文件系统、数据库和 Lua 代码网络的访问。它还提供了一个定义的 API 层来与 Web 服务器交互,并实现了 Apache、任何支持 CGI 的服务器和 Xavante,它是一个主要在 Lua 中实现的完整 Web 服务器。

【讨论】:

    【解决方案4】:

    我来的有点晚了……但我想换一种语言:Haxe

    为什么?

    1. Haxe 是一种开源语言,由一个非常小但活跃的社区推动

    2. Haxe 是一种独立于平台的语言...目标是:

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

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

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

    关于 Haxe 的最大缺陷是,它允许无类型编码,但以平台特定执行无类型代码为代价......当类型良好时(实际上这不是 Haxe 的大量工作),代码将被执行在所有平台上都以相同的方式...如果不是,结果会因平台本身的运行时处理而异...

    简而言之:它是一门很棒的语言,可以让您针对许多平台...它很年轻,正在成长,您可以参与...

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • +1 用于指出 RoR 工作需求
      【解决方案6】:

      就 Lua web 框架而言,还有LuCI。它主要用于小型嵌入式系统。我们刚刚开始使用它的项目,所以我现在不能评论太多。我们只是在做一些简单的配置屏幕,类似于已经作为示例提供的屏幕,所以我相信它足以满足我们的需求。

      【讨论】:

        猜你喜欢
        • 2011-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-01
        • 2012-06-08
        • 1970-01-01
        • 2013-01-17
        相关资源
        最近更新 更多