复杂宏程序提出的新问题
REXX的早期使用环境,是IBM大型机上的会话监控系统(CMS)。用户把常用命令组合成EXEC程序,也为编辑器编写宏。程序一旦加入更多判断、循环和字符串处理,原先以命令为主的写法就显得累赘:变量与控制词前面充满“&”,带空格的文本也不易处理。
在英国赫斯利实验室工作的迈克·科利肖选择重新设计语言,而不是只给EXEC继续增加特殊指令。1979年3月29日的初始规范,把结构化控制、自由格式、表达式与函数调用列为目标。按他后来展示的研发时间线,构思始于3月20日;规范先于解释器形成,便于同事评论设计本身。
让字符串连接操作系统
新语言最初叫REX,保留命令程序能够调用宿主环境的长处,同时采用接近高级语言的表达方式。用户可以使用条件分支、循环和选择结构组织工作,而不必把全部逻辑写成跳转和带前缀的宏指令。
初始规范给出了一个CMS例子:先把文件名、类型和方式分别赋给fn、ft、fm,再写“State fn ft fm”。解释器求出表达式,拼成“STATE JACK RABBIT A1”交给CMS。相邻项之间的空格参与字符串连接,因此变量与命令文字能自然组合。查询文件的是CMS命令,负责组合、判断和组织流程的是REX,这种分工使语言可以嵌入不同应用环境。
内部网络中的共同改进
科利肖在2019年回顾说,可供他人使用的代码于1979年5月出现,赫斯利的雷·曼塞尔和美国罗利的莱斯·科勒是最早一批用户。通过IBM内部VNET网络、技术通讯和同事转告,试用范围很快扩大。
1979年8月21日的1.04版通告已经记载四十多个地点使用REX。它列出函数调用返回值、外部程序访问变量的接口、错误修复和文档澄清,也点名艾伦·斯普林格、罗恩·劳特曼、史蒂夫·戴维斯贡献的计算器或函数。早期发展由一个主要设计者掌握方向,却不断吸收实际用户编写的程序和反馈。
公开介绍与渐进采用
1981年2月18日的SHARE 56论文,把REX称为实验性的命令编程语言。科利肖说明,它既可替代CMS的EXEC、EXEC 2,也能作为编辑器的宏处理器;交互式跟踪帮助用户检查执行过程。
采用新语言不要求把全部旧程序一次改写。CMS接口查看文件特征,再交给相应解释器,因而三种语言可以共存。论文特别讨论可读性与执行效率的取舍:简单操作并非总比EXEC 2快,但复杂命令程序需要的表达式、字符串解析和控制结构,能够减少难以维护的写法。
参考:[3]
1983年的产品化阶段
1982年,名称为避开其他产品而增加一个X,形成REXX。1983年2月9日保存下来的技术通告说明,VM/SP第三版已于2月1日在美国、2月7日在欧洲宣布,其中包括系统产品解释器。产品号5664-167的公告将它定位为命令与宏处理器,也列举计算、解释型应用和编辑器宏等用途。
公告同时承诺继续支持EXEC和EXEC 2,并增配用户指南、参考手册与速查资料。这里的1979年标记语言创设和内部试验;对外会议介绍与纳入正式操作系统产品,则分别属于1981年和1983年的后续阶段。
稳定语言与多种实现
科利肖在《The Rexx Language》的背景篇中,将早期试验与商业发布后的谨慎增强分开叙述。广泛使用使接口和既有程序需要稳定,不能再轻易实施早年那样的大幅修改。
语言仍以文字、数字和名称等用户熟悉的对象为中心,用字符串处理与十进制运算降低表达负担。它后来进入其他系统并出现编译器,但这些实现扩展属于后续历史。早期REXX的具体成果,是把命令自动化、编辑器宏和个人程序放进一套较统一的语言中,并通过用户反馈反复调整。
参考:[5]