Oberon 是一種通用程式語言，最初由尼克勞斯維爾特在 1987 年推出，是維爾特風格的類 ALGOL 語言中的最後一員（繼、ALGOL W、Pascal、Modula 和 Modula2 之後）。Oberon 是增進 Pascal 的直接後繼者 Modula2 的能力，並減少其複雜度的集中努力的結果。它的原理性新特徵是記錄型別的資料型別擴充套件的概念。它允許新資料型別構造在現存資料型別之上並將它們關聯起來，脫離了嚴格的靜態型別資料的教條。Oberon 是在瑞士的蘇黎世聯邦理工學院作為實現的一部份而開發的。這個名字來自天王星的衛星奧伯隆。 Oberon 的當前版本是 2007 年修訂的 Oberon07，它由維爾特來維護而 Oberon 計劃編譯器最近更新於 2020 年 3 月 6 日。 設計 Oberon 的基本指導原則是集中於基礎和根本的特徵，並忽略短暫性的問題。另一個因素是認識到了在語言如 C 和 Ada 中複雜度的增長。與它們相反，Oberon 強調使用庫概念來擴充套件語言。在 Modula2 中提供的列舉和子範圍型別被省略了，並且集合型別被限制為小的整數集合。所有的匯入專案都必須用它們在其中宣告的那個模組的名字來限定。透過只允許低層設施在包含了識別符號 SYSTEM 於其匯入列表的模組中使用而突顯了它們。甚至跨越模組的非常嚴格的型別檢查、執行時間索引檢查、空指標檢查和安全的型別擴充套件概念，在很大程度上允許程式設計單獨的依仗於語言規則。 這種策略的意圖是產生易於學習、實現更簡單和高效的語言。Oberon 編譯器被認為是簡明和快速的，卻提供了可比擬於商業編譯器的程式碼質量。 特徵 刻畫 Oberon 語言的特徵包括： 具有大寫關鍵字的大小寫敏感語法。 具有型別測試的型別擴充套件。 模組和分離編譯。 字串操作。 孤立不安全程式碼。 支援系統程式設計。 面向物件示例 Oberon 支援對記錄型別的擴充套件，用於抽象和異構結構的構造。不同於後期方言即 1991 年提出的和 1998 年提出的，最初的 Oberon 缺乏作為語言特徵的分派機制，而是把它作為一種程式設計技術或設計模式。這給出了在 OOP 上的巨大靈活性。在中，兩種技術被一起用於分派呼叫：方法套件和訊息處理器。 方法套件 在這種技術中，泛化模組定義過程變數的一個表格型別，而擴充套件模組中宣告這個型別的一個共享變數，泛化模組中的方法要訪問這個表格的對應專案，而擴充套件模組將這個表格的專案指派到自己相應的過程： MODULE Figures 抽象模組 TYPE Figure POINTER TO FigureDesc Interface POINTER TO InterfaceDesc InterfaceDesc RECORD draw PROCEDURE f Figure clear PROCEDURE f Figure mark PROCEDURE f Figure move PROCEDURE f Figure dx dy INTEGER END FigureDesc RECORD if Interface END PROCEDURE Init f Figure if Interface BEGIN fif if END Init PROCEDURE Draw f Figure BEGIN fifdraw f END Draw 這裡是其他過程 Clear、Mark 和 Move END Figures 擴充套件泛化型別 Figure 為特定形狀 Rectangles： MODULE Rectangles IMPORT Figures TYPE Rectangle POINTER TO RectangleDesc RectangleDesc RECORD FiguresFigureDesc x y w h INTEGER END VAR if FiguresInterface PROCEDURE New VAR r Rectangle BEGIN NEW r FiguresInit r if END New PROCEDURE Draw f Figure VAR r Rectangle BEGIN r f Rectangle f 具有 Rectangle 型別 END Draw 這裡是其他過程 Clear、Mark 和 Move BEGIN 模組初始化 NEW if ifdraw Draw ifclear Clear ifmark Mark ifmove Move END Rectangles 動態分派只能透過泛化模組的 Figures 中的方法集合完成，比如這裡的 Draw、Clear、Mark 和 Move 過程，它們透過介面表格呼叫了擴充套件模組 Rectangles 中的同名過程。 訊息處理器 這種技術形成於，在泛化模組中定義一個單一的處理器過程型別，並在擴充套件模組中宣告這個型別的一個過程，用它處理對應各種方法幷包含了相應的實際引數的訊息記錄： MODULE Figures 抽象模組 TYPE Figure POINTER TO FigureDesc Message RECORD END DrawMsg RECORD Message END ClearMsg RECORD Message END MarkMsg RECORD Message END MoveMsg RECORD Message dx dy INTEGER END Handler PROCEDURE f Figure VAR msg Message FigureDesc RECORD 抽象 handle Handler END PROCEDURE Handle f Figure VAR msg Message BEGIN fhandle f msg END Handle PROCEDURE Init f Figure handle Handler BEGIN fhandle handle END Init END Figures 擴充套件泛化型別 Figure 為特定形狀 Rectangles： MODULE Rectangles IMPORT Figures TYPE Rectangle POINTER TO RectangleDesc RectangleDesc RECORD FiguresFigureDesc x y w h INTEGER END PROCEDURE Draw r Rectangle BEGIN END Draw 這裡是其他過程 Clear、Mark 和 Move PROCEDURE Handle f Figure VAR msg FiguresMessage VAR r Rectangle BEGIN r f Rectangle IF msg IS FiguresDrawMsg THEN Draw r ELSIF msg IS FiguresMarkMsg THEN Mark r ELSIF msg IS FiguresMoveMsg THEN Move r msg FiguresMoveMsgdx msg FiguresMoveMsgdy ELSE 忽略 END END Handle PROCEDURE New VAR r Rectangle BEGIN NEW r FiguresInit r Handle END New END Rectangles 在 Oberon 作業系統中，這兩種技術都用於動態分派。前者用於已知的方法集合；後者用於在擴充套件模組中宣告的任何新方法。例如，如果擴充套件模組 Rectangles 要實現一個新的 Rotate 過程，在擴充套件模組之外只能透過它的訊息處理器過程來呼叫。 參見 引用 外部資源連結 一般性 Official website latest available copy at archive org at ETHZürich Niklaus Wirths Oberon Page at ETHZürich Oberon Page at SSW Linz Oberon The Programming Language at Ulm Project Oberon The Design of an Operating System and a Compiler book in PDF by Niklaus Wirth and Jürg Gutknecht 2005 Edition Oberon Language Genealogy Astrobe ARM Oberon07 Development System Oberon System V4 for HP OpenVMS Alpha with source code upwardcompatible 64 bit addressing 64 bit Oberon2 compiler for HP OpenVMS Alpha Oxford Oberon2 Compiler and its User Manual Free Oberon07 IDE Free Oberon07 IDE for Windows Macintosh and Linux with syntax colouring semantic navigation and source code debugger Oberon article by Joseph Templ in the January 1994 issue of DrDobbs Oberon 的演化 Modula2 and Oberon Wirth 2005 The Programming Language Oberon Wirth 198890 The Programming Language Oberon Oberon7 Revised Oberon Wirth 2016 most current language report Differences between Oberon07 and Oberon Wirth 2011 The Programming Language Oberon2 H Mössenböck N Wirth Institut für Computersysteme ETH Zürich January 1992 Differences between Oberon and Oberon2 Mössenböck and Wirth 1991 Whats New in Component Pascal Changes from Oberon2 to CP Pfister 2001 Category 程序式程式設計語言 Category 系統程式語言 Category 基於類的程式語言 CategoryModula 程式語言家族 Category1986 年建立的程式語言