是否可以为多个平台部署Common Lisp(或其他方言)桌面应用程序?

时间:2009-04-05 15:38:12

标签: deployment graphics lisp common-lisp

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

  1. 会编译代码
  2. 将使用通用图形库
  3. 不需要安装运行时环境。
  4. 我想制作一个小游戏或图形应用程序,并且能够通过在具有任何这些操作系统的计算机中进行简单安装来显示它。

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

    谢谢!

7 个答案:

答案 0 :(得分:19)

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

alt text 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。

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:6)

PLT Scheme可以做你所要求的一切。它开箱即用的库是WxWindows,但如果你真的想要,你可以获得其他GUI系统的绑定。

PLT Scheme可能是Lisp,其工作量最大,可以轻松编写和分发“一个小游戏或图形应用程序”。它们在基本发行版中包含许多examples of games,它们的旗舰IDE DrScheme是用自己的graphics framework编写的。可以在任何平台上自由创建和分发已编译的PLT Scheme代码。

编辑:你问过任何Lisp方言。 Clojure也可以选择吗?

编辑2:

你说Clojure是一个选择。如果你已经非常熟悉Java和Swing,我认为Clojure是一个很好的方法 - 需要注意的是它与其他Lisps有一些非常大的语法差异。 A book is forthcoming

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

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

答案 3 :(得分:4)

Rainer对基本问题有一个很好的评论:有很好的商业解决方案完全符合你的要求(但它们不是免费的开发环境,并且可能涉及经常性费用),并且支持得很好的跨平台库。还有自由软件方法,但是根据需要在所有三个平台上交付更加困难(不是不可能,而是更多的小问题)。

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

答案 4 :(得分: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 (虽然还没有上面的justinhj提到的lispbuilder,看起来很酷)。我在一两年前用wxCL做了一点实验,看起来很有希望。

CL的优点在于,有了这么多优秀的实现,您可以在您选择的实现中进行开发,并且您的大部分代码都应该轻松移植到您在给定平台上为应用程序交付选择的任何实现。

答案 5 :(得分:1)

ECL,一个Common Lisp实现似乎可以做你想要的(虽然我还没有使用它)。

答案 6 :(得分:1)

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