您的位置:首页 > 其它

MIT/GNU Scheme用户手册(三)

2013-05-25 11:24 363 查看
2 运行Scheme
本章介绍如何运行Scheme,以及如何使用命令行选项和环境变量定制Scheme的行为。
2.1 启动Scheme
在unix环境下启动Scheme,在命令窗口输入命令如下:
    mit-scheme

在Windows下双击Scheme的快捷方式即可启动。启动时,Scheme都会加载其本身并输出版权及发布版本的详细信息(具体信息此处略)。这个信息也可以使用如下的语句输出:
    (identify-world)

其中的Release是整个Scheme系统的版本号;Microcode是由C写成的系统部分的版本号;Runtime是由Scheme本身写成的系统部分的版本号。
根据如上的规则,可能还存在特定子系统的其他版本号。SF表示scode优化程序sf;LIAR/ARCH是本地代码编译器,其中ARCH表示编译到的体系结构;Edwin是一个类Emacs的文本编辑器。未来可能会有其他子系统加入到Scheme中。
2.2 定制Scheme
可以通过多种手段定制安装Scheme:
    a 命令行选项。命令行选项中有很多参数可以修改,比如:内存使用、库位置等。详见第2.4节[命令行参数选项](P7)。

    b 命令脚本或批处理文件。你可能想要通过脚本传入命令行选项来启动Scheme。例如:你可能没有足够的内存来以默认的内存参数运行Edwin或者编译器(启动时可能提示“没有足够的内存来使用此配置”并终止程序);你可以使用'--heap'命令行参数和其他参数来指定适当的参数值,unix上可以写脚本,Windows上可以写bat文件。

    c Scheme支持初始化文件(init):初始化文件包含有Scheme代码,可以在启动时运行其中的代码,初始化代码在出现Scheme标识之后,提示输入之前运行。初始化文件会保存在你的用户文件夹中,由HOME环境变量指定。在unx系统下,文件叫做:scheme.init,在PC中叫做scheme.ini。

    另外,当Edwin启动时,它会从你的用户目录下加载一个单独的初始化文件到Edwin环境中。这个文件在unix中叫做'.edwin',在PC上叫做'edwin.ini'(见第8.1节[启动Edwin],P53)。
你可以使用这两种文件来定义新的程序或命令,或者修改系统的默认属性和行为。
命令行选项'--no-init-file'会让Scheme忽略掉'scheme.ini(t)'文件(见第2.节[命令行选项],P7)。
    d 环境变量。大部分的Microcode参数和一些运行系统以及Edwin参数,都可以通过环境变量进行配置。详见第2.8节[环境变量],P10。

    e 图标。在Windows和X11的一些窗口管理器下,可以建立不同的图标来以不同的参数启动Scheme。

2.3 内存使用
一些参数可以用来控制Scheme使用多少内存以及如何使用。本节介绍Scheme如何组织和使用内存;接下来的章节介绍如何使用命令行选项以及环境变量设置内存的使用。
    Scheme以四种方式使用内存:
    a 栈(stack):用于递归程序调用;

    b 堆(heap):用于动态分配的对象,如:对(cons),元胞(cells)以及字符串(string)。堆上的对象存储在不被引用后由垃圾回收进行清理;

    c  常空间(constant space):用于分配像堆这样的对象。但与堆不同,在常空间分配的对象不会被垃圾回收清理,而是会长期存在的,比如:运行系统中的过程(procedure)。
    d 额外的内存使用:由microcode使用的内存(用C实现的系统部分)。

除了最后一种内存方式,都可以用命令行选项或环境变量来控制。
    MIT/GNU Scheme使用两空间(two-space)复制垃圾回收来回收堆上的内存。第二个空间,仅仅在垃圾回收时使用,并且是动态的按需分配的。

    一旦内存被分配到常空间和堆上,Scheme将会动态的调整常空间在总的内存中的比例;栈和microcode内存不在调整范围内。在使用'--band'选项加载标识时,以前的Scheme版本需要给出常空间的所需使用量。动态调整堆和常空间避免了这个问题。
    若常空间的大小没有被指定,它会自动设置一个能加载标识的内存大小;基本不需要自己显式的设置常空间的大小。此外,每个标识都需要一小段堆空间;这段空间会添加到任何已指定的堆大小上,所以指定的堆大小就是可用的自由空间大小。

    Scheme表达式'(print-gc-statistics)'会输出可用的堆和常空间大小(见第3.4节[垃圾回收],P20)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Scheme