Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go应用程序能否动态编译Go代码?_Go_Lua - Fatal编程技术网

Go应用程序能否动态编译Go代码?

Go应用程序能否动态编译Go代码?,go,lua,Go,Lua,假设我有一个Lua程序,它接受用户输入,而用户输入恰好是有效的Lua源代码。当程序仍在运行时,将对其进行清理、编译和执行。这样的事情在围棋中是可能的吗?我有一个想法,你可以如何做到这一点,但在C语言中你几乎也必须这样做 Go是一种编译语言,所以为了实现您想要实现的目标,您需要在CSP上编写一个包装器,该包装器将支持二进制的版本控制,并通过某种RPC导出功能。步骤如下: 在本地尝试构建Go代码 开始结果 新程序连接到当前运行程序的RPC 第一个程序被指示将所有CSP数据通道、GOROUTE调度指向

假设我有一个Lua程序,它接受用户输入,而用户输入恰好是有效的Lua源代码。当程序仍在运行时,将对其进行清理、编译和执行。这样的事情在围棋中是可能的吗?

我有一个想法,你可以如何做到这一点,但在C语言中你几乎也必须这样做

Go是一种编译语言,所以为了实现您想要实现的目标,您需要在CSP上编写一个包装器,该包装器将支持二进制的版本控制,并通过某种RPC导出功能。步骤如下:

在本地尝试构建Go代码 开始结果 新程序连接到当前运行程序的RPC 第一个程序被指示将所有CSP数据通道、GOROUTE调度指向新的运行时 在旧程序端的所有goroutine终止旧进程后,外部接口切换到新程序
很明显,这是一个非常复杂的问题,您最终将通过类似或的方式使用脚本语言节省大量时间。

我认为以下两个项目之间有足够的内容来帮助我实现我想要的目标。两者都不是一个完美的替代品,但都可以扩展以提供与我最初在Lua中使用动态编译时所做的非常接近的服务


Is:否。Will:可能否。您可以随时手动将输入保存到文件,然后从os/EXECE运行编译器。这是否意味着Go缺少真正的反射?@EgorSkriptunoff:在运行时编译和执行新代码与反射无关。在linux上,您也可以将代码作为插件编译和加载,但这与lua这样的解释语言所能做的并不完全相同。@JimB:严格来说,lua会将代码编译到VM;LuaJIT编译为VM,然后jit将其编译为机器代码。我喜欢围棋的地方是UTF-8无处不在,还有goroutine/channel的东西,但唉,还有一些东西不容易翻译。Go创建的代码的执行速度并不总是可以与LuaJIT媲美,尽管这可能部分与我还没有以最佳的Go方式做事这一事实有关。也许将LuaJIT核心作为一个包添加,这样Lua代码就可以在运行中执行,这是前进的方向,您构建了一个带有主RPC控制器的小型分布式系统,该控制器连接到您希望能够重写的部分。我同意这可能不值得努力,像go lua或golua这样的方法可能更明智。这是我在业余时间随机做的事情,只是为了看看它是否有效。谢谢你的想法,我会从这个@Piotr Zduniak中得到一些乐趣