概述
Babel協定由LLNL( Lawrence Livermore National Laboratory)實驗室開發的一個用於實現多語言互操作的工具,這就有效避免了傳統的構件模型由於無法滿足科學計算程式多語言互操作而不適合科學計算的問題。Babel解析SIDL或XML檔案以生成多語言互操作所需的各類黏合代碼。目前Babel所支持的語言有C、C++、FORTRAN77/93/2003、Python和Java(只支持客戶端)。Babel主要針對相同地址空間內的多語言實現互操作,如在分散式環境中,一般以遠程方法調用的方式實現不同進程間的函式調用。
構成
SIDL解析器、XML解析器、代碼生成器、運行時庫和構件庫共同構成了Babel。通過命令行指令或構件庫提供的web接口可以調用SIDL解析器。SIDL通過分析SIDL檔案以生成XML中間表達層,而代碼生成器則對這些XML檔案進行解析並生成相關程式的黏合代碼。這些黏合代碼主要作用是在相同的地址空間內為不同語言提供函式調用。Bebal的代碼生成器主要完成構件框架代碼的生成以及Makefile片段的生成。Babel運行時庫可用於計數及鑑別動態類型。
黏合代碼
基於Babel進行構件開發,首先需要通過SIDL來描述軟體接口信息,Babel利用SIDL對接口的描述自動生成相應的黏合代碼,而Babel所支持的所有語言就可以利用這些代碼對構件進行調用。在生成構件實現代碼的過程中,Babel自動生成的黏合代碼主要有以下3種:
(1)樁代碼(Stub代碼):主要功能是將客戶端語言翻譯成中間對象表現代碼語言。
(2)骨架代碼(Skeleton代碼):該代碼的主要功能在於將服務端語言翻譯為中間對象表現語言。
(3)中間對象表現代碼(IOR代碼):該代碼是C語言表達的函式指針表。
分析上述3類代碼,不難發現,樁代碼與骨架代碼的功能相對應,二者與中間對象表現代碼相協作,共同實現在不同語言間進行方法調用。一般來講,客戶端主要由樁代碼負責,而骨架代碼則主要用於伺服器端。