如何设计一种既强大又易于使用的编程语言?Rexx 提供了一个例子。本文介绍了 Rexx 如何调和这两个看似矛盾的目标。
Rexx 编程语言的历史
几十年前,计算机正在从批处理转向交互式处理。开发人员需要一种脚本或“胶水”语言来将系统连接在一起。该工具需要完成从支持应用程序开发到发出操作系统命令到充当宏语言的各种任务。
IBM 院士 Mike Cowlishaw 创建了一种名为 Rexx 的语言来解决这个问题。它被广泛认为是第一个通用脚本语言。
Rexx 非常易于使用且功能强大,因此迅速渗透到 IBM 的所有软件中。如今,Rexx 是 IBM 所有商业操作系统(z/OS、z/VM、z/VSE 和 IBM i)上捆绑的脚本语言。毫不奇怪,在 1990 年代,IBM 将 Rexx 与 PC-DOS 和后来的 OS/2 捆绑在一起。Rexx 在 Windows XP Resource Kit 中出现(在微软决定用其专有的脚本语言 VBScript 和 PowerShell 锁定客户之前)。Rexx 也成为流行的 Amiga PC 的脚本语言。
开源 Rexx
随着 Rexx 在各个平台上的 распространение,标准化变得必要。美国国家标准协会 (ANSI) 于 1996 年挺身而出。
这打开了闸门。开源 Rexx 解释器开始出现。如今,超过六个解释器在每个可以想象的平台和操作系统上运行,以及许多开源工具。
有两个 Rexx 变体值得一提。Open Object Rexx 是过程式或“经典” Rexx 的兼容超集。ooRexx 是基于消息的,并提供了人们可能期望的所有类、对象和方法。例如,它支持多重继承和混入类。
与 Java 的流行度上升并行,Mike Cowlishaw 发明了 NetRexx。NetRexx 是 Rexx 的变体,它与 Java 的一切(包括其对象模型)完全集成,并在 Java 虚拟机上运行。
ooRexx 于 2004 年开源;NetRexx 于 2011 年开源。如今,Rexx 语言协会 增强和支持这两种产品。RexxLA 还支持 Regina,最流行的经典 Rexx 解释器,以及 BSF4ooRexx,一种将 ooRexx 与 Java 完全集成的工具。一切 Rexx 都是开源的。
分层设计
那么,回到最初的难题。编程语言如何将强大功能与易用性结合起来?
解决方案的一部分是分层架构。运算符和最少量的指令构成了经典 Rexx 语言的核心

(Howard Fosdick,CC BY-SA 4.0)
围绕核心的是该语言的 70 多个内置函数
- 算术
- 比较
- 转换
- 格式化
- 字符串操作
- 杂项
以外部函数库的形式添加了额外的功能。您可以从 Rexx 程序中调用外部函数,就像它们是内置函数一样。只需在脚本顶部通过正确的引用使它们可访问即可。
函数库可用于所有内容:GUI、数据库、Web 服务、操作系统服务、系统命令、图形、访问方法、高级数学、显示控制等等。结果是一个功能强大的开源生态系统。
最后,回想一下 Open Object Rexx 是经典 Rexx 的超集。因此,您可以使用过程式 Rexx,然后通过迁移到 ooRexx 将您的技能和代码过渡到面向对象编程。从某种意义上说,ooRexx 是 Rexx 的又一个扩展,这次是扩展到面向对象编程。
Rexx 是一种以人为本的语言
Rexx 以一致、极其简单的语法将所有指令、函数和外部库粘合在一起。它不依赖于特殊字符、神秘的语法或保留字。它不区分大小写且格式自由。
这种方法最大限度地将编程的负担从程序员转移到机器。结果是一种相对容易学习、编码、记住和维护的语言。Rexx 旨在成为一种以人为本的语言。
Rexx 实现了最小惊讶原则,即系统应该以人们假设或期望的方式工作。例如,Rexx 的默认十进制算术(精度由您控制)意味着您不会对舍入误差感到惊讶。
另一个例子:所有变量都包含字符串。如果字符串表示有效数字,则可以使用它们执行算术运算。动态类型的这个简单概念使所有数据都可见,并简化了跟踪和调试。
Rexx 利用解释器的优势来简化程序开发。跟踪工具允许开发人员以各种方式指导和见证程序执行。例如,可以单步执行代码、检查变量值、在执行期间更改它们等等。
Rexx 还引发程序员可以轻松捕获的常见错误条件。此功能使代码更标准化、更可靠。
数组
Rexx 处理数组(或表格)的方法是它如何将简单性与强大功能相结合的一个很好的例子。
与所有 Rexx 变量一样,您不必提前声明它们。它们会自动扩展到可用内存的大小。此功能减轻了程序员的内存管理负担。
要形成一个数组,所谓的复合变量将词干变量与一个或多个下标缝合在一起,如下例所示
my_array.1
my_table.i.j
my_list.index_value
my_list.string_value
my_tree.branch_one
my_tree.branch_one.branch_two
下标可以表示数值,正如您可能习惯于标准表格处理中的那样。
或者,它们可以包含字符串。字符串下标允许您使用与常用表格相同的简单语法来构建关联数组。有些人将关联数组称为键值对或内容可寻址内存。允许通过任意字符串而不是简单的数值来访问数组内容,开辟了一个全新的算法解决方案世界。
使用这种灵活但一致的语法,您可以构建几乎任何数据结构:列表、二维或三维或 n 维表格、键值对、平衡树、非平衡树、密集表格、稀疏表格、记录、行等等。
美妙之处在于简单性。这一切都基于复合变量的概念。
总结
将来,我将演示一些 Rexx 程序示例。一个真实的例子将展示如何使用关联数组的简短脚本将旧程序的运行时从几个小时减少到不到一分钟。
您可以免费加入 Rexx 语言协会。如需免费 Rexx 下载、工具、教程等,请访问 RexxInfo.org。
7 条评论