Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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
如何一起使用!?Python、Lua和Ruby?_Python_Ruby_Lua_2d Games - Fatal编程技术网

如何一起使用!?Python、Lua和Ruby?

如何一起使用!?Python、Lua和Ruby?,python,ruby,lua,2d-games,Python,Ruby,Lua,2d Games,我不久前就开始编程了。我使用了一些Python、Lua和Ruby。是否可以使用py2exe、py2app或py2deb将所有三个脚本编译成一个可执行文件 如果没有,我应该用哪一个来开发游戏,如果有人有任何类型的资源可以学习,我真的很介意学习更多 不,可以使用这些语言的JVM版本来创建JVM类,然后将它们放入JAR中。除了jRuby,我从未使用过任何一个 为什么同时使用三种类似的脚本语言?这就像吃意大利面加土豆泥和面包 将它们组合成一个可执行文件是很困难的。将它们组合到一个应用程序中并不难 让我们

我不久前就开始编程了。我使用了一些Python、Lua和Ruby。是否可以使用py2exe、py2app或py2deb将所有三个脚本编译成一个可执行文件

如果没有,我应该用哪一个来开发游戏,如果有人有任何类型的资源可以学习,我真的很介意学习更多

  • 不,可以使用这些语言的JVM版本来创建JVM类,然后将它们放入JAR中。除了jRuby,我从未使用过任何一个

  • 为什么同时使用三种类似的脚本语言?这就像吃意大利面加土豆泥和面包


  • 将它们组合成一个可执行文件是很困难的。将它们组合到一个应用程序中并不难

    让我们以py2app为例。它构建了一个OSX应用程序包——一个充满文件的目录。
    Frameworks
    子目录中有一个完整的Python解释器,带有一个自定义的标准库。应用程序的Python源代码(和/或.pyc字节码)和所有数据文件都在
    Resources
    子目录中。最后,在MacOS子目录中,有两个东西:一个标准的
    python
    stub可执行文件,它使用自定义标准库运行python,另一个stub可执行文件使用应用程序的名称,它使用自定义标准库运行python并执行主脚本

    假设您有一个用于Ruby和Lua的相同工具

    您可以非常轻松地构建一个应用程序包,将每个框架放在
    Frameworks
    目录中,将所有三种语言的源代码和所有数据文件放在
    Resources
    目录中,并将所有三个存根可执行文件放在
    MacOS
    目录中。无论哪一个脚本是主程序,都只保留该脚本的存根可执行文件

    只要您的脚本知道如何找到python、lua和ruby存根可执行文件来启动其他脚本(您可以通过在主脚本开始时修改环境中的路径来完成),一切都可以正常工作

    还有一个更简单的解决方案:
    py2app
    (以及
    ruby2app
    lua2app
    )分别启动每个应用程序,然后将完整的应用程序打包到捆绑包中(例如,在
    目录下的
    应用程序
    目录中),并以这种方式运行它们。不利的一面是,如果您有20个不同的Python脚本,那么最终将有20个完整的Python安装,这将是一个相当大的下载量

    但是你可以在两者之间做一半:将所有Python应用程序合并到一个包中,将所有Ruby应用程序合并到另一个包中,将所有Lua应用程序合并到另一个包中

    在实践中这样做的问题是,实际上,Ruby和Lua没有完全相同的工具;您有不同的工具,它们构建不同的结构。而且你没有一个完全相同的Windows工具(
    py2exe
    构建一个形状非常不同的结构,并使用非常不同的配置设置)。因此,如果您有N种语言和M个平台,那么您需要理解(最多)N*M个不同结构的笛卡尔积

    你真的需要所有独立的工具
    py2app
    不能用于Ruby或Lua代码或Windows代码,因为它需要理解Python模块,包括Python C扩展模块,它必须在Mach-O级别以及Python API级别理解这些模块,以便找出依赖项并获得正确的文件,并找出正确的位置将它们放入包中,以便解释器可以找到它们,等等


    尽管如此,这绝对是可行的——我曾经在两个项目中工作过,它们以我上面描述的方式将多个用两种或三种不同脚本语言编写的脚本捆绑在一起。

    它们非常相似,但它们有不同的优缺点。我希望能够选择他们最擅长的,并以此为基础。“一切都很有效”。。。缓慢而低效。(没有什么反对你的回答,我只是认为OP的想法应该带着极大的偏见重新考虑。)@Amadan:它在什么方面缓慢而低效?它的工作原理与任何用Python、Ruby或Lua编写并自行发布的应用程序完全相同加载多语言口译员肯定是对内存的一种低效利用,并且会影响速度。@abarnert:马克说的。另外,由于不同的解释器之间的数据共享,所以它们之间不共享对象空间。很多游戏实际上是通过在C(或C++或Objc或其他任何东西)中编写主程序来工作的,并嵌入解释器来运行脚本。嵌入所有三个口译员应该一点问题都没有(假设您愿意为每个口译员提供自己的主线)。考虑到您所谈论的是
    py2app
    之类的工具,听起来您并不是在问这个问题。还应该可以在Python C扩展模块中嵌入Ruby或Lua解释器,因此,您可以执行相同的基本想法,但不必使用C编写顶级应用程序。这听起来有趣吗?不同语言之间的脚本是否需要相互通信?您是否有关于如何在Python中添加Ruby和Lua解释器的资源。我认为学习这一点太好了。@user2967106:我从来没有在任何东西中嵌入过Ruby,而Lua,从那以后就没有了……早在5.0版之前,它就把所有东西都清理干净了。所以我不会有太多直接的帮助。但是看看像这样的项目,它(IIRC)将Lua嵌入到Python扩展中,这是两个运行时之间的一个完整桥梁,只需要几百行代码。即使您不能直接使用它,代码也必须是很好的示例代码。