【问题标题】:What are the most effective ways to use Lua with C#?将 Lua 与 C# 结合使用的最有效方法是什么?
【发布时间】:2010-09-28 10:10:01
【问题描述】:

据我了解,Lua 是一种可嵌入的脚本语言,可以对对象执行方法。有哪些需要避免的陷阱?将 Lua 用作解释器并在 Web 环境中执行方法或用作规则引擎是否可行?

【问题讨论】:

  • 您现在可能已经更正了“Lua”的输入。将其写为首字母缩略词是新手经常决定的,但事实并非如此。 :) Lua 在葡萄牙语中的意思是月亮。 LUA 是 Windows 最少用户访问权限(或其他东西,请参阅 Wikipedia...)
  • 您修复了其中一个“Lua”,但您仍然将另一个保留为“LUA”

标签: c# performance clr lua


【解决方案1】:

Lua 脚本 on track 成为 Apache Web 服务器的核心模块。

有几个工具可以绑定 Lua 和 C#/.NET 代码hereLuaInterface 是最新的。

【讨论】:

  • 可惜所有这些链接都因重定向到双 wwwhammy www.www.lua-users.org 而失败
  • 根据 2010 年 8 月 19 日的邮件列表帖子,该网站一直在进行维护(从 2010 年 8 月 22 日开始)。我已经通知了问题列表。谢谢。
  • DNS 已更新,lua-users.org 链接似乎在今天,2010 年 8 月 23 日开始工作。
【解决方案2】:

Lua 非常快 - 脚本可以预编译为字节码,并且函数的执行接近于 C++ 虚拟方法调用。这就是为什么它在游戏行业中用于编写 AI、插件和其他游戏中的高级内容的原因。

但是您将 C# 和 Web 服务器放在问题标签中。

如果您不考虑嵌入式 Web 服务器,那么 Lua 就不是很强大。 Lua 是 ANSI C - 它编译为本机代码,因此它不是很欢迎您的 asp.net 服务器,也不是您的 C# 代码。想想“中等信任”或“绑定”或“64 位”。

陷阱已经够多了。如果您已经在使用 C#,则没有理由在 Web 服务器上避免使用它。它被编译和缓存。它为像这样的大型网站提供服务。

【讨论】:

    【解决方案3】:

    我们曾经在一个中型 C# 生物医学仪器控制应用程序中使用 Lua 作为我们的脚本语言。这是教硬件人员如何编写自己的一小段测试代码的好方法。

    一旦 IronPython 成熟,我们决定,由于 Python 功能更全,并且与 VS 的集成度更高(以及使用它的人更多),我们将用 Python 替换所有 Lua。到目前为止,效果很好。 Lua 是一门很好的小语言,我不确定在这一点上我能想到 Lua 比 Python 有什么优势。

    Lua 可能会快一点,但如果您已经将域分为 script-y 和 non-script-y,大概这不是一个大因素。

    【讨论】:

    • 如果你有一个新领域,你会从 Iron Python 开始吗?
    • 我认为这也适用于 Lua 与 Python 在更通用的平面上。如果一个人想要的只是一种“现成的”脚本语言,那么 Python 是一种安全且受欢迎的选择。如果一个人想要嵌入、小尺寸或定制,我认为没有什么能比 Lua 更好。
    【解决方案4】:

    我喜欢 Lua 的原因是它作为一门语言非常出色,尤其是与 C/C++ 一起使用时。对我来说,正是这两者的结合“造就”了这种语言。

    陷阱.. 缺少扩展模块可以看作是一个问题。就像没有 CPAN,但有 LuaRocks。取决于您是否有足够的绑定来解决您的问题。如果没有,您可能需要制作它们。

    语言陷阱.. Lua wiki中有一些愿望,可以看作是“陷阱”。没有“切换”声明。没有正确的“cond ? a : b”格式。如果你不想把注意力从这些相当肤浅的语法上抛开,那么 JavaScript 是否适合你?

    总的来说,它是一种语言,它使我的工作效率比没有它的编程高出 10-100 倍。

    【讨论】:

    • 当然cond and a or b 是 Lua 等价于类似 C 的 cond ? a : b 并且具有几乎有意义的优点;-)
    • 如果是等价的,就不会有问题了。它不是。如果 'a' 为 nil 或 false,则语句变为 b。这就是问题所在,除了执行一个函数或确保 nil/false 始终在后一个值中之外,没有其他解决方案。太糟糕了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2010-09-06
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多