Rexx語言

Rexx語言

REXX(Restructured Extended Executor)是IBM在1980年代發明的一種程式設計語言。主要用在IBM的大型計算機(Mainframe Computer)上,但在大部分其他的平台上也可以找到它的解譯器或編譯器。另有面向對象的版本,稱為ObjectRexx。

基本介紹

  • 中文名:Rexx語言
  • 外文名:Restructured Extended Executor
  • 發明時間:1979 年
  • 發明者:IBM
  • 主要套用:大型計算機
  • 其他版本:面向對象的ObjectRexx
概述,語言特點,語言組成,流和棧,變數和關聯數組,文本處理函式,總結,

概述

Rexx 程式語言最初創建於 1979 年,是一個層次非常高的腳本語言,有特彆強大的用於文本處理任務的工具。從 Rexx 誕生起,IBM 就將各種版本的 Rexx 加入到它的作業系統中 —— 從主機到中型機再到終端用戶作業系統,比如 OS/2 和 PC-DOS。其他 OS 製造商,比如 Amiga,也將 Rexx 作為永遠可用的系統腳本語言集成進來。此外,許多獨立軟體開發商為很多平台創建了 Rexx 環境。再晚些時候,ANSI 於 1996 年正式為 Rexx 採納了一個標準。
當前(尤其是在 Linux 或者起源於 BSD 的 OS 上),Rexx 的那些大部分早期實現,主要作為歷史足跡為人們所關心。不過,兩個當前保持的 Rexx 實現可以用於包括 Linux、MacOSX 和 Windows 在內的許多平台:Regina 和NetRexx。Regina 是本地執行檔案,以免費軟體原始碼方式,或者為諸多平台預編譯好的方式獲得 —— 您可以像安裝任何其他語言解釋器一樣安裝它。NetRexx 是一個有趣的“混合物”。此語言派生自普通的 Rexx。更類似於 Jython 或者 Jacl,NetRexx 將類似於 Rexx 原始碼編譯為 Java 位元組代碼,並(可選)在 JVM 中運行作為結果生成的.class檔案。
NetRexx 是一個 IBM 項目,用於為 Java 虛擬機編譯類似於 Rexx 的代碼。在實際能力和編程級別上,Rexx 最接近於bash加上 GNU 檔案工具(外加grep和sed);或者可能相當於awk或 Perl。當然,相對於 Python、Ruby 或者 Java 來說,Rexx 讓人感覺更為快而粗糙。Rexx 的冗長 —— 或者更應該說是,簡潔 —— 類似於 Perl、Python、Ruby 或者 TCL。並且,Rexx 當然是完全 Turing 的,支持模組和結構化編程,有面向專門任務的庫,例如 GUI 接口、網路編程和資料庫訪問。但是它最自然的目標在於系統腳本的自動化和本文處理任務。與 shell 腳本一起,Rexx 使得應用程式的控制非常自然且顯而易見;但相對於bash(或者tcsh、ksh等等),Rexx 中包含了更豐富的內置控制結構和(文本處理)函式。
在文體上,Rexx 的 IBM/mainframe 根源體現在它對命令的大小寫敏感;在某種次要程度上也體現在它使用標點符號相對較少 (更多用關鍵字而不是符號)。我傾向於認為這些特性的目的是提高可讀性;但這在很大程度上取決於個人的愛好。

語言特點

十進制浮點數算術:能準確計算表示和計算0.1之類的數字。
Rexx 一個層次非常高的腳本語言,有特彆強大的用於文本處理任務的工具。

語言組成

基本的 REXX 組成包括了指令和內置函式兩部分,此外 TSO/E 環境下的 REXX 還提供了外部函式以及數據堆疊函式等。

流和棧

作為一個簡單的小例子,讓我來介紹一個特別簡單的工具的多個版本,它可以列出檔案並對其進行編號。Rexx 和 shell 腳本的一個共同點是,它用於和底層作業系統打交道的函式相對很少 —— 幾乎僅限於可以打開、讀和修改檔案。對大部分其他事情,您需要依賴於外部實用程式來完成手頭上的工作。實用程式numbered-1.rexx只是處理 STDIN:
numbered-1.rexx
#!/usr/bin/rexx
DO i=1 UNTIL lines()==0
PARSE LINEIN line
IF line\="" THEN
SAY i || ") " || line
END

變數和關聯數組

在 Rexx 中 —— 有些類似於在 TCL 中 —— 在很大程度上一切都是字元串。由多行組成的棧和流給您一個簡單的字元串列表或者數組。但是,通常,根據需要字元串完全可以有像其他數據類型一樣行為。例如,包含有對一個數字(阿拉伯數字、十進制數、指數“e”,等等)適當描述的字元串可以用於數學運算。對於處理報告、日誌檔案等類似工作,這是您實際上期望的行為。
不過,Rexx 確實有一個另外的標準數據類型:關聯數組。在 Rexx 中,它們被命名為“詞幹變數”,但是其概念非常類似於很多其他語言中的程式庫。詞幹變數的語法對 OOP 語言 (如 Java、Python 或者 Rudy) 的用戶來說也會驚人地熟悉:一個句點將“對象”和它們的“屬性”隔開。這不是真正的面向對象,但是其語法確實(偶然地)突出了對象與特別健壯的程式庫的相似程度。

文本處理函式

作為一門文本處理語言,Rexx 的最強大之處在於它所具備的實用的內置字元串處理函式。可能有超過一半的標準 Rexx 函式用於處理字元串,其他的大部分被用來以極其顯而易見的方式處理位向量。此外,甚至位向量也經常作為由 1 和 0 構成的向量來處理(或者讀入)。

總結

由於來自 IBM “大型機”環境比重多於 Unix 系統,Rexx 對很多Linux程式設計師和系統管理員是鮮為人知的。但是在 Linux 中仍然有一個重要的領域,在這裡,相對於“過輕量級”的bash或kshshell,或者“過重量級”的解釋性程式語言例如 Python、Perl、Ruby、TCL,或者可能還有 Scheme,Rexx 是更好的腳本解決方案。作為可以快速且簡單易讀的腳本,在對外部進程的輸入和輸出進行文本處理方面,Rexx 無懈可擊,而且學習和安裝也不困難。

相關詞條

熱門詞條

聯絡我們