Sig*_*erm 20 opengl portability common-lisp
题
如果我在Windows上使用clozure cl制作普通lisp(使用:lispbuilder-sdl,quicklisp,cffi)的2D游戏,我能否轻松将其移植到其他平台(linux/iPhone(也许)/ android)以后?lisp"适合"可安装的程序吗?
信息
推理
我真的,真的厌倦了C++.想要尝试更简单的语法+更强大的功能(不是python).记住一个游戏项目,想知道如果我突然决定稍后分发/移植游戏,是否为游戏选择lisp意味着严重的麻烦.
- 编辑 -
附加信息
"适当的"和"可安装的程序"是什么意思?
如果我尝试将可以在我的机器上运行的已完成程序转换为可安装程序包(例如,Windows上的Windows安装程序),我不确定CFFI/quicklisp将如何运行.例如,quicklisp在用户的主目录中设置路径/存储库(这可能是不可接受的行为)并尝试从外部源自动下载包,这在您尝试分发程序并确保其工作时不是一件好事意.CFFI在某些方面"绑定"外部库到lisp函数,并且我不清楚它是如何工作的,比如,如果我转储程序映像,将其嵌入到exe并在另一台机器上运行所述exe.根据常识,它应该可以正常工作,但在最坏的情况下,它可能导致我必须编写特定于lisp分发的复杂安装程序.
Bag*_*ers 12
**注意:对不起,如果我在这篇文章中说明显而易见的,我不确定你对Common Lisp的熟悉程度**
在Android上运行clozure似乎有点生命,但可用的性能还有待观察.我们不太可能在iphone商店中看到lisp游戏,除非他们编译成运行时没有编译器的其他语言(参见Nu或专有选项,请参阅mocl,它们都有解决此问题的方法)
在库中,让它们在尽可能多的实现中可移植地工作绝对是值得的,但是对于游戏我真的只需选择一个实现并在那里磨练你的代码.你可能会将你的游戏作为每个平台的包裹分发而不是通过quicklisp对吗?
确保在每个平台上查看您首选实施的进度,可能会有微妙的问题.对我来说,我使用SBCL,在Windows下只支持32位,而64位仍处于开发阶段.
这对你来说有一些很好的时机,因为有关Apple Mac Store Clozure应用程序包装的一些信息今天发布在openmcl-devel上 .我还没有很好的阅读,但线程可能会提供更多信息.
lispbuilder人员似乎也有一些关于制作独立可执行文件的信息.
cl-opengl是一个非常好的opengl包装器.它支持旧的和现代的opengl样式,因此我发现尝试提供更高级别抽象的区域有点限制(我个人避开了cl-opengl的gl-arrays).请阅读源代码,因为那里有一些很棒的东西,特别是当你开始编写更多的cffi代码时. {cl-opengl仍在开发中,可以通过quicklisp获得 - 我在linux和windows下愉快地使用它}
lispbuilder-sdl非常酷,但你可能再次发现控制某些领域的冲动.例如,sdl:with-events宏很棒,但可以控制主循环和时间步骤处理.这对你来说可能是完美的,但如果不是,不要害怕去挖掘并写一些更好的东西来替换这些部分!
此外,lispbuilder还提供了一系列库,因此在使用它们之前,请检查quicklisp中是否存在更新的等效项.例如,lispbuilder有lispbuilder-opengl.不要使用它,坚持使用cl-opengl.lispbuilder再次使用lispbuilder-regex,而使用CL-PPCRE可能要好得多.
我可能不会建议使用它,但我花了一点时间回去剥离所有与现代opengl游戏无关的lispbuilder-sdl(所以没有sdl软件表面等).我不认为人们应该使用它,但它可能会给你一些想法!{lispbuilder没有大量开发,但可以通过quicklisp获得 - 我已经在linux和windows下愉快地使用了它}
此外,虽然我是拉皮条码由优秀的人写的然后被我撕裂,但请看这个视频,了解如何在游戏运行时重新编译部分游戏.这不是我的技术,但确实很有效.
以上将要求您使用SLIME或SLIMV,这意味着使用Vim或Emacs.SLIME非常值得您花时间去看看!
总而言之,祝你好运,普通的lisp非常有趣,而你可能会发现需要一段时间才能获得你喜欢的opengl工作流程,如果你有时间我毫无疑问你会玩得很开心.
期待看到比赛!
你必须区分跨平台的可移植性(例如,你的程序是在Windows上的Clozure上开发的吗?在Linux上运行吗?)和跨实现(例如,你的Clozure程序是否会在SBCL下运行?)
您需要仔细检查特定实现手册中的详细信息,但一般来说,如果您使用标准CL功能加上CFFI,则不应在任何方面出现任何重大问题.
实际上,您需要检查Clozure在您感兴趣的平台上运行的程度以及CFFI是否在这些平台上支持Clozure.这些问题最好向开发人员询问,而不是在这里.
所有CL实现都以某种方式进行"产品交付",例如,通过创建可以随后打包和分发的独立可执行文件.