编写便携式Scheme代码的最佳方法?

时间:2009-09-19 11:09:58

标签: scheme portability

在Common Lisp中,我可以有条件地排除或包含不同实现的代码,如下所示:

#+sbcl (use-sbcl-cool-feature)
#-sbcl (use-my-own-not-so-cool-version)

这样我就可以通过隔离非便携式位来编写可移植代码。

如何在Scheme中完成?有没有办法向Scheme解释器或编译器询问它的名称(甚至是它实现的标准)?

(cond ((r6rs?)
       (make-eq-hashtable))
      ((gambit?)
       (make-table))
      ;; other cases here
      (#t (make-my-inefficient-hash-table))

我知道我可以在不同的程序中包装所有可能的非可移植代码,然后使用这样的兼容包:

;; in my-libs-gambit.scm:
(define make-hash-table make-table)

同样适用于我的libs- [其他方案 - 这里] .scm

这是唯一的方法吗?

我不会尝试在Scheme中创建一个完全可移植的应用程序,但如果我可以在两个或三个不同的实现中运行我的程序,那就太好了。

1 个答案:

答案 0 :(得分:2)

Dorai Sitaram就此主题发表了{p> Slides of a talk。 按照here给出的指示也可能有所帮助。