首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua与XML在数据存储方面的对比

Lua与XML在数据存储方面的对比
EN

Stack Overflow用户
提问于 2009-12-29 11:06:26
回答 9查看 11.3K关注 0票数 19

我们中的许多人都被灌输了使用XML来存储数据的思想。它的优点和缺点是众所周知的,我当然不想在这里讨论它们。然而,在我用C++编写的项目中,我也使用了Lua。Lua可以很好地存储和处理数据,这让我非常惊讶。然而,Lua的这一方面却鲜为人知,至少在游戏编程领域是如此。

我知道XML在像通过互联网发送数据这样的情况下有它的优势,在需要考虑安全性的地方(例如使用从网上下载的数据,或者加载用户可编辑的配置文件),最后是在相同的数据被不同语言的程序读取的情况下。

然而,一旦我了解了使用Lua处理数据是多么容易(特别是有luabind作为后盾!),我就开始想,如果我们已经使用Lua了,还有什么理由使用XML来存储游戏数据呢?

虽然暴雪使用Lua编写UI脚本,但仍然将布局存储在XML中。原因是不是只与UI相关?

使用Lua作为数据存储语言的缺点是什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-12-29 12:11:32

这可能不是你期望的答案,但它可能会帮助你做出决定。

暴雪(WoW)使用XML来定义用户界面。它有点像C#中的XAML,只是没有那么强大,大多数插件只是使用XML来引导插件,然后用lua代码构建UI。

此外,WoW实际上在.lua文件中存储了“保存的变量”。

在我看来,这并不重要。选择你喜欢的,并且对于那些想要扩展你的引擎的人来说容易使用的东西。

XML的好处是已经编写了很多工具和代码来测试、编写和解析XML,这意味着它可以为您节省一些时间。例如,XML Schema对于验证用户编写的文件非常有用(安全性只是一个副作用,好的是,如果它通过了您的模式,那么数据很可能是100%安全的,并且准备好插入到您的引擎中),并且已经编写了相当多的验证器供您使用。

话又说回来,一些用户害怕XML文件(尽管它们非常易读,可能太易读了),他们更喜欢“更简单”的文件。如果它只是为了存储(不是配置),那么在大多数情况下,没有人会编辑这些文件。XML也会比lua var dump占用更多的空间(应该没关系,除非您有很多数据)。

我认为你在这里不会出错。暴雪使用lua进行存储,我非常喜欢它的工作方式。

票数 12
EN

Stack Overflow用户

发布于 2009-12-29 12:33:32

感谢你到目前为止的回答!我将冒失地总结一下要点,以供将来参考。

与XML相比,使用Lua存储数据的缺点。

传输数据和存储数据时的安全性,特别是从未知source

  • Portability,接收数据时,以及其他工具访问数据的简易性。现有工具(如XML Schema validators

  • Less )对解析具有循环references

  • Less限制的data

  • Problems的支持不太有用--更难实施适当的约定、用法和设计

与XML相比,使用Lua存储数据的好处

对脚本和数据使用单一语言的字节码(不需要单独的文件,在loading)

  • Less代码和依赖项时不需要特殊情况,因为使用了单一的字节码冗长并且(可以说)更具人类可读性)字节码数据更加灵活、可扩展(毕竟它是一种编程语言)

  • 数据可以被“执行”,并且可以在需要时访问,因为它位于较少的虚拟machine

  • Takes空间中,特别是在编译成字节码

如果我在第一个列表中遗漏了什么,请指出!

票数 16
EN

Stack Overflow用户

发布于 2009-12-29 11:50:29

Lua在存储数据方面取得了重大胜利。方便、快速,并可在需要时轻松转换为其他格式。(可转换性假设您的数据可以用其他格式表示,如果数据可以用XML表示,就可以用其他格式表示。)

使用Lua作为数据存储语言的缺点是什么?

我知道有两个缺点,其重要性取决于您的应用程序:

  • 如果您的Lua表包含循环引用,例如t1.next == t2t2.prev = t1,那么将您的Lua结构写入磁盘的过程将变得单调乏味,并且生成的Lua比简单的return <list of big expressions here>更难读取。(我从来没有遇到过这种情况,如果您的数据可以用XML表示,那么这种情况就不会发生在您身上。)
  • 如果您有大量数据-例如,您正在编写整个Inform 7手册的倒排索引-那么您可能会违反Lua对块中可以出现的不同常量的数量的限制。然后,您必须将事物拆分成多个块或函数,或者求助于其他解决方案。这个问题一直困扰着我,这是一个巨大的痛苦。我想写一个通用的解决方案,但我不是100%可靠的,我理解这些限制,而且我还没有解决它。

如果您的数据具有少于100,000个数字和字符串文字,则不必担心此问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1972722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档