混乱的 Common Lisp “流” 市场
2007-02-02 01:02:06| 分类:
Lisp
| 标签:
|举报
|字号大中小 订阅
流 (stream) 是 Common Lisp 实现的核心部分。由于 ANSI Common Lisp 标准中只规定了流的很小一部分行为,而日常生活中对流的需求无处不在,所以各家厂商都有自己的实现和扩展方式,给编写跨 Lisp 平台的可移植程序带来麻烦。
流的最大作用是简化编程,文件操作、字符串处理、网络通信本质上都是对数据流的计算,拥有一个功能强大,稳定可靠的流实现,可以统一 Lisp 世界中很多软件包中程序员自行实现的类似对象,将所有流归结在一个类继承树里,最大程度地实现流组件的共享。SBCL 文档中提到,目前主要有三种流扩展:
Bivalent Streams: 一种可同时读写 character 和 (unsigned-byte 8) 类型数据的流类型
Gray Streams: 用户可重载的 CLOS 类,其实例可用作 Lisp 流 (例如作为 format 的第一个参数)
Simple Streams: Franz 提出的 Allegro simple-streams 标准草案
从设计理念和特性上来讲 simple-stream 是未来的发展方向。simple-stream 解决了 gray-stream 的下列问题:
1. gray stream 区分每个流的输入和输出方向,对各种流类强制分成三种类型(只输入、只输出,既输入又输出)
2. gray stream 按照固定的元素类型来区分流,实践发现这种限制很不合理,使得在同一个流里传输不定宽度的元素变得困难
3. gray stream 的方法,直接定义在 Common Lisp 流接口的下面,带来一些优化和语义不清之类的难题
4. 由于实现的级别太高,扩展 gray stream 需要重写大量不必要的代码。
simple-stream
将输入、输出特性作为所有流的一种标记属性来对待,同时不定义任何元素类型,所有元素均在底层按照8位元处理,通过适当的扩展,可以把simple-
stream用作外部IO设备或者伪设备等。可以说,simple-stream是未来 Common Lisp 流的发展方向。
但是目前 simple-stream 只在 Allegro Common Lisp 拥有最完整的实现,在 CMUCL 和 SBCL
上只有部分实现,在 CLISP 和 LispWorks 上没有实现,其他 Lisp 厂商的情况不清楚。而 Gray stream 是所有
Lisp 厂商都实现,并且有 trivial-gray-stream 项目提供跨 Lisp 平台的兼容层。所以,推广
simple-stream 的关键在于:
1. 继续开发 SBCL 和 CMUCL 上拥有共同来源的 simple-stream 实现,使之完全兼容 Allegro Common Lisp
2. 至少实现 LispWorks 上的 simple-stream 支持,借此促使 CLISP 和 OpenMCL 也跟风实现 simple-stream
3. 开发一个 trivial-simple-stream 包用于提供跨 Lisp 平台的 simple-stream 兼容层
4. 实现一些简单的 simple-stream 扩展,例如 Allegro CL 已经实现了的 inflate 压缩算法流
5. 实现一些复杂的扩展,例如建立在网络流基础上的 BER 编解码流,进而支持 SNMP 和 LDAP 协议流;另一个方向是在终端流的基础上实现 ANSI 彩色终端流,进而为基于 Lisp 的 BBS 开发打下一个良好的基础。
所以,还是有很多事要做的。
评论这张
转发至微博
转发至微博
评论