Acucobol
是的,我读过几乎所有 comp.* 新闻组中关于 COBOL 的激烈争论。它们与本文无关。在评估 Acucobol 这款产品时,我感兴趣的是以下语句是否
move 2 to x. add 3 to x.
产生值 5,而不是编码更好还是更差
x = 2; x += 3:
代替.
我之前在 SCO Xenix 环境中使用过 Acucobol。我对这款产品很满意,所以我只需确保 Linux 版本与 Xenix 版本一样好用即可。
与目前适用于 Linux 的大多数商业产品一样,Acucobol 已被移植到大量平台。Acucobol 更进一步。Acucobol 编译器实际上将 COBOL 源代码转换为“b 代码”文件。当您执行 Acucobol 程序时,您实际上是在运行 b 代码解释器。在一个机器上编译的程序在任何其他运行 Acucobol 的机器上执行都没有问题。您可以在 Linux 上编译程序,并在 Sun 工作站、Vaxen 甚至 MS-DOS 或 Windows NT 上运行它们。(是的,Acucobol 非常智能,可以将路径中的 / 字符转换为 \。但是,我不确定当路径的组件长于八个字符时会发生什么。)
如果您上次接触 COBOL 是在大型机、批处理环境中,您会看到一些重大差异。Acucobol 对语句从哪一列开始并不十分挑剔。有一些重要的新语言特性。我特别喜欢的一个是 EVALUATE 语句,它类似于 C 语言中的 switch 语句。还有更多可以使用 ELSE 语句的地方。可以使用 COBOL 中所谓的“引用修改”来引用子字符串;形式为 data-name (leftmost-position: length)。SCREEN SECTION、窗口功能以及 ACCEPT 语句引入整个数据屏幕的能力都是 Acucobol 扩展。甚至可以在屏幕部分中引用“嵌入式过程”。
另一个新功能是名为 W$MENU 的子程序。旧版本的 Acucobol 附带一个名为 MENUBAR 的子程序。它完全用 COBOL 编写,并且运行良好。W$MENU 拥有 MENUBAR 的所有功能,但有一个例外。W$MENU 的设计使得您的菜单始终通过热键激活。假设您希望在程序需要菜单选择时显示菜单。我能想到的唯一方法是调用另一个内置子程序 W$KEYBUF,它会填充输入缓冲区。我使用 W$KEYBUF 将热键填充到输入缓冲区中,菜单就会出现。(Acucobol Inc. 已承诺在未来提供更简洁的方法。)W$MENU 由一个基本的菜单生成器补充;它是批处理的,而不是交互式的。
可以开发可由 Acucobol 调用的 C 函数,并且手册很好地解释了如何做到这一点。唯一的问题是,这些函数必须链接到 b 代码解释器中。
Acucobol 既不使用 termcap 也不使用 terminfo。相反,它使用一个名为 a_termcap 的文件,您通常会将其安装在 /etc 目录中。提供的 a_termcap 文件包含一个 xterm 条目,但此条目没有颜色或图形支持。我能够通过蚕食其他 a_termcap 条目来创建彩色 xterm 条目。最终它看起来像这样
xterm-c|color xterm:\ :GO=\E(0:GF=\E(B:GM=qxlkmjvtwun:VB:\ :C1=\E[30m:C2=\E[34m:C3=\E[32m:\ :C4=\E[36m:C5=\E[31m:C6=\E[35m:\ :C7=\E[33m:C8=\E[37m:\ :B1=\E[40m:B2=\E[44m:B3=\E[42m:\ :B4=\E[46m:B5=\E[41m:B6=\E[45m:\ :B7=\E[43m:B8=\E[47m:UL@:RU@:tc=xterm:
Acucobol 附带参考手册和用户指南。它们都是活页装订,每本大约 1,000 页。这些手册用于所有 Acucobol 实现,包括 Unix、MS-DOS 和 VMS。
与任何其他 COBOL 实现一样,Acucobol 支持顺序文件、索引文件和“相对”(直接访问)文件。Acucobol 的索引文件系统称为 Vision,它是 Acucobol 的专有系统。Vision 文件将键和数据组合到一个文件中,索引结构是 b 树。Vision 高效可靠。唯一的问题是,如果您希望非 Acucobol 程序访问 Vision 文件,您将必须从 Acucobol Inc. 购买许可证。一个更有趣的解决方案是 Acucobol 附加组件,称为“Plug and Play”。它的工作原理如下:所有 COBOL ISAM 语句(READ NEXT、START 等)都映射到一个调度表。在标准 Acucobol 运行时中,表条目指向 Vision 函数。您可以将此表替换为另一个表,以便表条目指向 D-ISAM 或 Codebase 函数。我的办公桌上有一个 Codebase 的评估副本(我下次评测的主题),所以我计划实际尝试一下。
Acucobol 应该能够编译和运行任何符合标准的 COBOL 程序。但是,除非程序没有任何用户界面,否则您可能需要做一些转换工作。特别是,Acucobol 具有 RM/COBOL 兼容模式。它运行得非常好,但我的经验是,最好还是重新排列数据在终端屏幕上的显示和接受方式,因为 Acucobol 允许您以一种不那么繁琐的方式执行此操作。
有大量的应用程序软件和附加组件可用于 Acucobol。值得一提的两个是 MCBA 和 Real World 会计软件包。
我为 Acucobol 开发了一个简单的 基准测试,它是我为 xBASE 产品做的另一个基准测试的翻译。(参见Linux 杂志第 14 期,1995 年 6 月,第 27 页。)此基准测试处理了一个包含 33,830 条记录的文件,并在配备 SCSI 磁盘的 66 mHz 486 上运行。
可以合理地预期 Acucobol 会比 Flagship 明显慢,因为 Flagship 程序被编译成机器代码,而 Acucobol 程序被编译成 b 代码,必须在运行时解释。

图 1. 基准测试结果
Acucobol Inc. 每年在圣地亚哥举办一次开发者大会。下一次会议是在 9 月 18 日至 20 日。我还没有参加过这些会议,但我从他们那里得到了很好的报告;与会者受到 Acucobol, Inc. 的良好待遇。
手册中提到了 GUI 和鼠标支持,但它们似乎仅适用于 Windows NT。Acucobol, Inc. 似乎有兴趣最终提供某种 UNIX GUI 支持。
这款产品可能不会引起硬核 Linux 用户的太多兴趣;他们宁愿免费用 C 语言编程,也不愿花大价钱使用 COBOL。但是,Acucobol, Inc. 花费精力移植他们的产品应该引起 Linux 社区的兴趣,因为它赋予了 Linux 更多的合法性。
但是,Acucobol 的 Linux 版本对于另一个社区来说应该非常重要:开发和维护 COBOL 应用软件的系统集成商。当这些系统集成商向最终用户销售产品时,最终用户不仅必须购买应用程序,还必须购买运行该应用程序的硬件和其余的软件环境。例如,如果应用程序在 Windows 95 或 SCO Unix 下运行,则客户或系统集成商必须购买 Windows 95 或 SCO Unix 的副本。拥有 COBOL 应用程序要销售的系统集成商现在可以尝试说服客户接受 Linux 作为软件环境,并可以为客户提供更低的总成本。
Robert Broughton (roberb7@iceonline.com) 从事软件开发 24 年,自 1993 年 2 月起开始使用 Linux。他受雇于加拿大 BC 省伯纳比的 Zadall Systems Group。他的网页地址是:www.iceonline.com/home/roberb7/WWW/index.html。