为什么你应该考虑使用 Rexx 进行脚本编写

Rexx 可以说是第一个通用的脚本语言。它功能强大且易于使用。
4 位读者喜欢这篇文章。
Green graph of measurements

Internet Archive Book Images。由 Opensource.com 修改。CC BY-SA 4.0

你如何设计一种功能强大且易于使用的编程语言? Rexx 提供了一个例子。本文介绍了 Rexx 如何调和这两个看似矛盾的目标。

Rexx 编程语言的历史

几十年前,计算机正在从批处理转向交互处理。开发人员需要一种脚本或“胶水”语言将系统连接在一起。 该工具需要执行从支持应用程序开发到发出操作系统命令到充当宏语言的所有操作。

IBM Fellow Mike Cowlishaw 用一种他命名为 Rexx 的语言创建了一个解决方案。 它被广泛认为是第一种通用的脚本语言。

Rexx 非常易于使用且功能强大,因此它迅速渗透到 IBM 的所有软件中。 如今,Rexx 是 IBM 所有商业操作系统(z/OS、z/VM、z/VSE 和 IBM i)上的捆绑脚本语言。 毫不奇怪,在 20 世纪 90 年代,IBM 将 Rexx 与 PC-DOS 和 OS/2 捆绑在一起。 在 Windows XP 资源工具包中出现了 Rexx(在 Microsoft 决定使用其专有的脚本语言 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 语言的核心

Rexx layered design

(Howard Fosdick,CC BY-SA 4.0)

围绕核心的是该语言的 70 多个内置函数

  • 算术
  • 比较
  • 转换
  • 格式化
  • 字符串操作
  • 杂项

额外的功能以外部函数库的形式添加。 您可以像调用内置函数一样从 Rexx 程序中调用外部函数。 只需在脚本顶部通过正确的引用使它们可访问即可。

函数库可用于所有内容:GUI、数据库、Web 服务、OS 服务、系统命令、图形、访问方法、高级数学、显示控制等等。 结果是一个功能强大的开源生态系统。

最后,回想一下 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

标签
User profile image.
Howard Fosdick 是一位独立顾问,以 DBA/SA 的身份进行实际操作。 他撰写了几本技术书籍、许多文章,并且是一位受欢迎的会议演讲者。

7 条评论

30 多年前,我曾在 IBM 大型机上使用过 Rexx。 我们使用的编辑器之一是 Xedit。 有一个名为 Kedit 的 Xedit PC 变体。 我今天仍然使用该编辑器。 它的宏语言是 Rexx 的一个子集,他们称之为 Kexx。 一个很棒的脚本语言。

Kedit 来自 Mansfield Software,他们一直销售到去年(2021 年)我认为。

我很高兴看到你回来写关于 Rexx 的文章。 我更高兴看到你的 rexx.info 网站再次活跃起来。 自 1994 年以来,我一直在 VM/SP 上使用 REXX 进行编程,并且很高兴今天在 Windows 和 Linux 上使用 ooRexx 进行编码。 Rexx 仍然活跃。

Rexx 是一种很棒的语言。 很高兴看到一篇最新的文章。 我要强调的是,那里有 ObjRexx(Rexx 的面向对象风格)。 Z/VM 上的管道工具是一个很棒的伴侣。 希望能找到一个像 Linux 那样可用的当前选项。 是的,Unix 有管道数据,但 John Hartman 管道工具是类固醇上的管道。

Bill,你很幸运。RexxLA 在 NetRexx 中有管道(Pipelines)。它以 CMS 版本为模型,但存在差异:CMS 使用单个处理流,而 Java VM 是多线程的。字符集不同。每个版本中都有一些额外的阶段。阶段中存在一些不同的选项。可以在 NetRexx 中编写用户自定义的阶段。请参阅 https://netrexx.org/documentation.nsp 上的“NetRexx 管道快速入门指南”。它还记录了两个版本中所有可用的内置阶段以及它们之间的差异。

作为一种 Java VM 语言,它几乎可以在任何地方运行,包括 Linux。

回复 作者: Lhasadad

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.