22

问题

如果我在 windows 上使用 clozure cl 在普通 lisp 中制作 2d 游戏(使用:lispbuilder-sdl、quicklisp、cffi),我以后能否轻松地将其移植到其他平台(linux/iPhone(也许)/android)?lisp“适合”可安装程序吗?

信息

  1. 游戏将使用 OpenGL 绘制图形。很可能它将使用 sdl 进行输入/opengl 初始化,并使用 sdl 或 openal 进行音频。以后可能会使用我自己的库而不是 sdl。
  2. 为 cffi 编写几个 C++ 库(以“可移植”方式包装功能)不是问题。

推理

我真的,真的厌倦了 C++。想尝试一些语法更简单+功能更强大的东西(不是python)。有一个游戏项目,想知道如果我以后突然决定分发/移植游戏,为游戏选择 lisp 是否意味着严重的麻烦。

- 编辑 -

附加信息

“合适的”和“可安装的程序”是什么意思?

如果我尝试将可以在我的机器上运行的已完成程序转换为可安装包(例如 Windows 上的 Windows 安装程序),我不确定 CFFI/quicklisp 的播放效果如何。例如,quicklisp 在用户的主目录中设置路径/存储库(这可能是不可接受的行为)并尝试从外部源自动下载包,当您尝试分发程序并确保它作为故意的。CFFI 在某些时候将外部库“绑定”到 lisp 函数,我不清楚它的工作情况,例如,如果我转储程序映像,将其嵌入 exe 并在另一台机器上运行该 exe。根据常识,这应该可以正常工作,但在最坏的情况下,它可能导致我不得不编写特定于 lisp 发行版的复杂安装程序。

4

4 回答 4

13

** 注意:对不起,如果我在这篇文章中陈述了明显的内容,我不确定你是否熟悉 Common Lisp **

从 sds 继续:

在 android 上运行 clozure 似乎有一点生命,但可用的性能还有待观察。我们不太可能在 iphone 商店中看到 lisp 游戏,除非它们编译成编译器在运行时不可用的其他语言(请参阅Nu或有关专有选项,请参阅mocl,它们都有解决此问题的方法)

可移植性 - 跨实现

在库中,让它们在尽可能多的实现中可移植地工作是绝对值得的,但是对于游戏,我真的只是选择一个实现并在那里磨练你的代码。您可能会将您的游戏作为每个平台的包分发,而不是通过 quicklisp 对吗?

可移植性 - 跨平台

请务必检查您在每个平台上首选实施的进度,可能会有一些微妙的陷阱。对我来说,我使用 SBCL,在 Windows 下仅完全支持 32 位,而 64 位仍在开发中。

包装

这对您来说是个好时机,因为今天在 openmcl-devel 上发布了一些有关为 Apple Mac Store 打包 Clozure 应用程序的信息 。我还没有好好阅读,但该线程可能会提供更多信息。

Zach Beane 还为 SBCL 制作了 buildapp

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 下愉快地使用它}

此外,当我在拉皮条由伟大的人编写的代码然后被我撕毁时,请参阅此视频,了解如何在游戏运行时重新编译游戏的某些部分。这不是我的技术,但效果很好。

以上将要求您使用SLIMESLIMV,这意味着使用 Vim 或 Emacs。SLIME 真的值得你花时间去看看!

总而言之,祝你好运,Common lisp 的开发非常有趣,虽然你可能会发现需要一段时间才能获得你喜欢的 opengl 工作流程,但如果你有时间,我相信你会玩得很开心。

期待看到比赛!

于 2013-08-01T10:51:28.057 回答
6

可移植性

您必须区分跨平台的可移植性(例如,您在 Windows 上的 Clozure 下开发的程序是否可以在 Linux 上运行?)和跨实现(例如,您的 Clozure 程序是否可以在 SBCL 下运行?)

您需要仔细检查具体实现手册中的细节,但是,一般来说,如果您使用标准的 CL 功能加上 CFFI,您应该不会在任何一个方面出现任何重大问题。

实际上,您需要检查 Clozure 在您感兴趣的平台上的运行情况以及 CFFI 是否在这些平台上支持 Clozure。这些问题最好问开发人员,而不是在这里。

可安装性

所有 CL 实现都以某种方式进行“产品交付”,例如,通过创建独立的可执行文件,然后您可以打包和分发这些可执行文件。

于 2013-07-31T21:18:31.833 回答
2

我以后可以轻松地将它移植到其他平台(linux/iPhone(也许)/android)吗?

好吧,这在很大程度上取决于您选择的库。

我根本没有任何 Android 或 iOS 开发经验,但我目前正在 Common Lisp 中开发小项目,使用 lispbuilder-sdl、cl-opengl、quicklisp 等,并且在 SBCL 之间移植没有问题在 Linux 上到 Windows 上的 Clozure-CL。

此外,至少有一个有前途的移动 Common Lisp 实现:https ://wukix.com/mocl

所以我认为你移植你的代码不会有问题,只要确保你的应用程序中使用的所有库在每个平台和 Lisp 实现上都有适当的支持。

lisp“适合”可安装程序吗?

大多数 Lisps 都能够使用嵌入式库创建独立的可执行文件。另一方面,如果您的项目变得足够大,您将不得不编写特定于平台的安装程序,而不管可能与 Lisp 相关的问题。而且我怀疑与 Lisp 相关的部分最终会是最复杂的。另请查看这篇文章:Lisp Executable,并考虑分发 Lisp 运行时映像而不是独立可执行文件的想法。

于 2013-08-01T10:00:05.817 回答
2

对于使用 Common Lisp 作为游戏运行时,已经有了很好的答案。

我只想提一下,PlayStation 2 游戏Jak 和 Daxter:The Precursor LegacyCrash Bondicoot是使用 Common Lisp 以稍微不同的方式开发的。

他们在 Commmon Lisp 中有他们的开发环境,并制作了一种游戏语言GOAL(后来的 GOOL),这是一种具有汇编内联的高级语言(如 C 语言__asm__)。因此,当最终产品被编译时,产品与它的开发环境几乎没有关系。

他们只针对一个平台(PS2),但我想可以制作语言结构,以便您可以使用几乎相同的方法针对多个平台进行优化。制作游戏语言将抽象出实际的硬件和库差异,并使编译器的复杂性低于尝试将 Common Lisp 直接编译为例如 Dalvik。编译器也不需要最终成为目标代码。它可以编译为 C/Java/Objective C。

然后,可移植性问题就变成了您可以通过在设计语言时查看一些首选目标来控制的问题,以及如何制作包/二进制文件可以遵循目标的方式。

于 2013-08-01T15:11:04.487 回答