选择脚本朗

Iva*_*van 2 python scripting lua programming-languages

我需要编写我的应用程序脚本(而不是游戏),我有一个问题,为此选择一个脚本lang.Lua看起来很好(实际上,它是我的任务的理想选择),但它有unicode字符串的问题,将被使用.另外,我考虑过Python,但我不喜欢它的语法,而且它对我来说太大了(大约2.5 Mib).Python和其他类似的langs有太多的功能,battaries和模块,我不需要(例如I/O功能) - 脚本只需要实现逻辑,所有其他将执行我的应用程序.所以,我想知道是否有一个脚本lang,它满足这个条件:

  • unicode字符串
  • 我可以导入C++函数,然后从脚本中调用它们
  • 可以嵌入到app(没有dll)而没有任何问题

重新发明轮子不是一个好主意,所以我不想发展我自己的郎.或者有一种方法可以在Lua的源代码中编写unicode字符串?像在C++ L"Unicode字符串"

lhf*_*lhf 7

Lua字符串与编码无关.所以,是的,您可以在Lua脚本中编写unicode字符串.如果需要模式匹配,则标准Lua字符串库不支持unicode类.但普通的子串搜索工作.


Mat*_*ttJ 5

实际上没有"unicode string"这样的东西.字符串是一个可以包含任何内容的字节序列.但是,知道字符串中数据的编码很重要.

我使用带有UTF-8字符串的 Lua ,它适用于我关心的所有操作.我不使用任何Unicode字符串库,尽管这些可用于Lua(ICU4Lua,slnunicode等).

关于在Lua中使用UTF-8字符串的一些注意事项:

  • 字符串长度(#运算符)以字节为单位返回字符串长度,而不是字符或代码点(非ASCII字符可以是多个字节的序列).
  • 字符串拆分(例如string.sub)不得拆分UTF-8序列.
  • 字符串匹配工作(string.find,string.match)与ASCII模式很好.
  • 子串搜索(例如"普通"模式下的string.find)可以使用UTF-8作为针或大海捞针.

使用UTF-8计算代码点非常简单,如果效率略低于其他编码.例如在Lua:

function utf8_length(str)
        return select(2, string.gsub(str, "[^\128-\193]", ""));
end
Run Code Online (Sandbox Code Playgroud)

如果您需要的不仅仅是这类内容,我提到的unicode库会为您提供所有内容的API,包括编码之间的转换.

就个人而言,我更喜欢这种简单的方法来强制你使用某种类型的unicode语言(例如Javascript),或者通过在语言中内置多种编码(例如Python)来尝试并聪明.根据我的经验,他们只会导致头痛和性能瓶颈.

无论如何,我认为每个开发人员都应该对unicode如何工作以及不同编码之间的主要区别有一个很好的基本理解,这样他们就可以在应用程序中如何处理unicode做出最佳选择.

例如,如果应用程序中的所有现有字符串都采用宽字符编码,那么使用Lua就不那么方便了,因为您必须为Lua中的每个字符串添加转换.这是完全可能的,但是如果你的应用程序可能受CPU限制(如在游戏中)那么这将是性能方面的负面影响.