【发布时间】:2017-03-30 12:57:25
【问题描述】:
假设我有一个接受用户输入的 Lua 程序,该输入恰好是有效的 Lua 源代码。这是在程序仍在运行时进行清理、编译和执行的。 Go 是否(或将会)这样的事情(可能)?
【问题讨论】:
-
是:不会。将是:可能不会。
-
darrencoxall.com/golang/executing-commands-in-go 您总是可以手动将输入保存到文件中,然后从
os/exec运行编译器 -
是不是意味着 Go 缺乏真正的反射?
-
@EgorSkriptunoff:在运行时编译和执行新代码与反射无关。在 linux 上,您也可以将代码编译并加载为插件,但这仍然与 lua 之类的解释语言可以做的完全不同。
-
@JimB:严格来说,Lua 确实编译代码(到 VM); LuaJIT 编译为 VM,然后将其 jit 编译为机器代码。我喜欢 Go 的地方在于 UTF-8 无处不在,还有 goroutine/channel 的东西,但是唉,也有一些东西不能翻译(很容易)。 Go 创建的代码的执行速度并不总是与 LuaJIT 相当,尽管这可能部分与我尚未以最佳 Go 方式做事的事实有关。也许将 LuaJIT 核心作为一个包添加到 Go(这样 Lua 代码可以即时执行)是前进的方向。