A brief interview with Rexx creator Mike Cowlishaw
pldb.com
pldb.com
We worked in Product Assurance (IBM's terminology for QA). We built hardware to test the system that was under test. We often worked the night shift as the developers got the working system during the day!
I don't recall Rexx from those days, so I think it came after 1977.
For those who have never heard of Rexx, it was developed in either late 60s or early 70s at IBM. It is a powerful scripting language.
I first encountered it in OS/2 where it was the default (built-in) scripting language. During the OS/2 days a couple of GUI drag-and-drop app development products were built with it (Watcom's VX-REXX and VisPro Rexx). I used VX-REXX to create a graphical client/server application for OS/2 that used DB2/2. It was unbelievably productive. I've heard that VisPro Rexx was also just as good.
I also worked with Rexx in z/VM (and z/OS to much lesser extent). It was nice to know one powerful scripting language that could be used across various IBM systems.
There were a few odd things in the language -- 'stem' variables come to mind. This was Rexx's way of doing arrays (or dynamic lists). You stored the number of elements in $stem_var_name.0. Good times!
I think PowerShell is the spiritual successor to Arexx. (Because you could do GUI stuff in ARexx and script GUI programs!)!
Something I've been wondering about lately is how much language developers get to code in their actual language. Perhaps if things get really really far along, the language interpreter/compiler/runtime/whatever becomes self-hosting. But I suspect many languages never actually get that far. I was just thinking about the fact that maybe most language developers today still code in C (I have no idea if this is actually true). Perhaps in the future they will code in Rust or Go.
He does briefly speak to part of this point:
> I don't think I'd change anything in them except to emphasise more that a programming language is a Human-Computer-Interface and the language designer should design for the users of the language, not just for himself or herself.
--
I personally have never used Rexx. But I remember many years ago I made an attempt to sign up for an OS/2 Warp beta and being shocked when I actually got picked. I recall installing it and the OS contained what was the first instance I had seen of some sort of voice control for computers. Even at the time my IBM PS/2 (a 386sx running at 20MHz) was at the low end of the requirements for OS/2 Warp and the system didn't perform very well at all. But I have a memory of speaking something like "Computer: Go to sleep!" and my brother laughing at me and repeating it from time-to-time after that, long after I'd uninstalled OS/2 and went back to Windows 3.11 or DOS or whatever I was running in those days.
It worked, was fairly easy to learn and teach, and didn't it's job.
Another day, another language, fun times.
> Rexx (Restructured Extended Executor) is a programming language that can be interpreted or compiled. It was developed at IBM by Mike Cowlishaw.[2][3] It is a structured, high-level programming language designed for ease of learning and reading. Proprietary and open source Rexx interpreters exist for a wide range of computing platforms; compilers exist for IBM mainframe computers.[4]
>
> Rexx is a full language that can be used as a scripting, macro language, and application development language. It is often used for processing data and text and generating reports; these similarities with Perl mean that Rexx works well in Common Gateway Interface (CGI) programming and it is indeed used for this purpose. Rexx is the primary scripting language in some operating systems, e.g. OS/2, MVS, VM, AmigaOS, and is also used as an internal macro language in some other software, such as SPF/PC, KEDIT, THE and the ZOC terminal emulator. Additionally, the Rexx language can be used for scripting and macros in any program that uses Windows Scripting Host ActiveX scripting engines languages (e.g. VBScript and JScript) if one of the Rexx engines is installed.
The page goes on to discuss ARexx (the Amiga port) and Compound variables, which can be used as arrays (both of these things have been mentioned here by other commenters).
I wrote some great stuff in REXX both for work and for fun. Mike's stated goal with the language was to make programming as easy as possible for the programmer, compiler be damned! In fact, it was quite difficult to create a REXX compiler and that didn't come until much later.
Where REXX fell apart for me is that it didn't keep up with browsers and the internet, which is where the bulk of development work shifted -- at least my development work! REXX was also strictly imperative/procedural and didn't include the functional concepts that were also invented by John Backus, a contemporary of ours there at the time. Today, functional is my religion and I can't imagine going back. I've become a big fan of TS. I wonder what Mike thinks of it?
I don't know much about Lua or mruby but I understand they may fill such needs too.
Also fun to note that John Backus was at IBM. I have some vague memories of BNF. I imagine that AT&T Bell Labs and IBM and Xerox were amazing places to work at one time. I do hope that things are generally trending for the better, in that ideas can be exchanged digitally, and that things are de facto more inclusive today, but I bet it would have been a heady thing to have a lounge filled with people like at those offices and then go back to your own office and noodle away on ideas that had been discussed.
There was an internal version of WebExplorer (OS/2 web browser) that used it as a scripting language in 1995 (also never saw the light of day outside IBM).
My biggest complaint would be that it didn’t have a consistent way of invoking external programs or libraries. Perl won out for CGI and web scripting inside IBM over Rexx from a lack of libraries and some weird performance issue on AIX I no longer recall.