15

我想用 Common Lisp 或其他 Lisp 方言开发一个图形应用程序,它可以部署在 Mac、Windows 和 Linux 中,作为提高我对该语言知识的一种方式。理想情况下:

  1. 将编译代码
  2. 会使用一个通用的图形库
  3. 不需要安装运行时环境。

我想制作一个小游戏或图形应用程序,并能够通过在具有任何这些操作系统的计算机上的简单安装来展示它。

有人有类似情况的经验,或者可以指出图形库和编译器、运行时环境等的最佳选择......

谢谢!

4

7 回答 7

19

我是目前托管在谷歌代码上的 lispbuilder-sdl 的开发人员之一。

替代文字 http://img10.imageshack.us/img10/7664/mandelbrot.jpg

http://code.google.com/p/lispbuilder/

这为您提供了一种无需修改即可在 linux、windows 和 mac 机器上运行常见 lisp 程序的方法。我们使用 SDL 库和它的各种扩展。

一个最小的程序如下所示:

(sdl:with-init ()
  (sdl:window 320 240)
  (sdl:draw-surface (load-image "lisp.bmp"))
    (sdl:with-events ()
      (:quit-event () t)
      (:video-expose-event (sdl:update-display))))

wiki 还解释了如何为各种常见的 lisp 实现构建自包含的 exe。

于 2009-04-06T04:35:19.857 回答
9

大多数 Common Lisp 实现可以转储可执行映像。有时这是两个文件(内核 + 映像),但通常这可能只是一个可执行文件。但可执行文件通常只在编译它的平台上运行。LispWorks 或 Allegro CL 等商业实现具有扩展功能 - 例如,可以删除 Lisp 系统中未使用的部分。这称为“交付”。

有一些关于LispWorks 应用程序的信息。LispWorks 是商业的,覆盖平台可能很昂贵。您必须购买开发环境 - 在流行平台上免费交付。LispWorks 有一个适用于 Windows、Mac 和 Unix/Linux 的图形库。后者基于古老的Motif。优点是代码可以在平台上非常便携。LispWorks 开发环境本身就是一个 LispWorks 应用程序。例如,在 Mac 上,32 位版本和 64 位版本可在 PowerPC 和 x86 上从单个应用程序运行。

有关 Common Lisp 和库的“免费”版本的信息在CLIKI上收集。不过,编写 MS Windows 应用程序并不是“免费”Common Lisp 最强大的部分。

于 2009-04-05T16:00:45.273 回答
6

PLT Scheme 可以满足您的所有要求。它使用的开箱即用的库是 WxWindows,但如果你真的想的话,你可以得到其他 GUI 系统的绑定。

PLT Scheme 可能是在简化编写和分发“小游戏或图形应用程序”方面所做工作最多的 Lisp。它们包括基础发行版中的许多游戏示例,并且它们的旗舰 IDE DrScheme 是用它们自己的图形框架编写的。可以在任何平台上免费创建和分发编译后的 PLT Scheme 代码。

编辑:您要求任何 Lisp 方言。Clojure 也是一种选择吗?

编辑2:

您说 Clojure 是一种选择。如果您已经非常熟悉 Java 和 Swing,我认为 Clojure 将是一个不错的选择——但需要注意的是,它与其他 Lisps 有一些相当大的语法差异。一本书即将出版

如果您还不是 Java 专家,我认为 PLT Scheme 仍然是最佳选择。我是从“刚开始学习 Lisp”和“小型演示应用程序”的角度来看的。其他人已经注意到商业 Common Lisp 实现支持您想要的,但是这些将更难(并且更昂贵)用作介绍性系统。

所有这些实现都有宏系统,我认为这就是您所说的“代码是一流的”。

于 2009-04-05T16:21:15.397 回答
4

Rainer 对基本问题有很好的评论:有很好的商业解决方案完全按照您的要求(但它们不是免费的开发环境,并且可能涉及经常性费用),并具有良好支持的跨平台库。也有免费的软件方法,但是根据您的需要在所有三个平台上交付更加困难(并非不可能,但更多的是摆弄)。

我会补充一点,“不安装运行时环境”有点问题。您当然不需要让最终用户单独安装 lisp,但您的程序很可能需要安装整个运行时才能正常工作,具体取决于您的工作。这个级别的灵活性意味着很难以编程方式确定哪些位是需要和不需要的,这就是为什么免费软件解决方案通常不会为编写摇树器来完成这项有些乏味和棘手的工作而烦恼。

于 2009-04-05T16:23:24.453 回答
3

我目前正在做的,对于使用 OpenGL 和 GLFW 的图形应用程序,主要使用 SBCL 进行开发,并通过cl-launch为我的测试人员提供交付。但是,我的计划是使用CCL在 OS X 上构建应用程序包,并使用ECL在 Linux 和 Windows 上构建独立的可执行文件。我目前使用 cl-launch 构建的包相当大(通常为 30M 及以上),而我使用 ECL 完成的测试要小得多(libecl 在我的系统上的重量约为 1.3M)。但是,我希望 SBCL 表现更好(尽管我会先进行配置以确保!),因此您的选择将取决于您的应用程序。

但是,如果我在商业上这样做,我会投资其中一个商业实施。Rainer Joswig 在上面提到了 LispWorks 和 Allegro。对于 Windows 应用交付,您还可以考虑Corman Lisp。我的印象是,在这三个操作系统上进行应用程序交付的最快但最昂贵的途径是购买 Allegro,但另一种选择(工作更多,但更便宜)是在 OS X 上使用 CCL,在 Win32 上使用 Corman,以及 ECL 或 SBCL在 Linux 上。LispWorks 似乎是介于两者之间的选择,尽管很多人都对它发誓,所以我不会仅仅因为它更实惠就认为它不如 Allegro。

图形库问题是独立的;我的印象是情况在不断改善(CFFI 中的回调似乎现在可以在大多数平台上工作,这对与大多数 C 工具包的接口有很大帮助),但我一直在更多地使用 GL、GLFW、GLUT 和 SDL (虽然还没有 lispbuilder,上面 justinhj 提到过,看起来很酷)。一两年前我用wxCL做了一些实验 ,看起来很有希望。

CL 的好处在于,有这么多好的实现,您可以在您选择的实现中进行开发,并且您的大部分代码应该很容易移植到您选择的任何实现,以便在给定平台上交付应用程序。

于 2009-04-24T18:59:37.937 回答
1

ECL,一个 Common Lisp 实现,似乎可以做你想做的事情(不过我还没有使用它)。

于 2009-04-05T23:45:51.130 回答
1

Ecl lisp 可以编译非常小的可执行文件(几 kbs),但在 Ubuntu 上,为了执行这个可执行文件,/usr/local/lib 目录中必须有 libecl.so.11.1 文件。该文件为 5.7 MB。

于 2011-03-23T22:04:42.623 回答