Oberon

**Oberon**（オベロン）は、チューリッヒ工科大学のニクラウス・ヴィルト率いるチームが設計開発したオペレーティングシステムとプログラミング言語の名称。天王星の衛星オベロンに由来する。

## Oberon オペレーティングシステム

オペレーティングシステムとしてのOberonは1980年代後半、チューリッヒ工科大学で同名の言語を使って開発された。独自のテキストベースのユーザインタフェースでコマンドを起動する。

### 歴史
NS32032ベースのワークステーションプロジェクトの一部として開発された。同名のプログラミング言語で記述されている。基本システムはニクラウス・ヴィルトと Jürg Gutknecht が設計・実装し、その全貌が彼らの著書 "Project Oberon" で詳述されている。その後、チューリッヒ工科大学のチームにより他のハードウェアにも移植され、雑誌などにも紹介されている。

### ユーザインタフェース
Oberonのユーザインタフェースはテキストユーザインタフェース (TUI) だった。GUIの便利さとCUIの記述能力を兼ね備えており、Oberon 言語の命名規則と密接に関連している。画面に表示されるあらゆるテキストを編集可能で、それをコマンド入力に使うことができる。コマンドプロンプトのようなものは必要とされない。一般的なCUIとは大幅に異なるが、そのTUIは非常に効率的で強力である。ただし、慣れるまで時間がかかる。その使用法とプログラミングについては Martin Reiser の著書 "The Oberon System" が詳しい。この方式は後のオペレーティングシステムに影響を与えたとは言えないが、ロブ・パイクのAcme (Plan 9) に強い影響を与えた。Macintosh Programmer's Workshop のインタフェースと似ているが、Oberonはヴィルトの以前のプロジェクトであるLilithに基づいており、MacintoshとLilithはどちらも Alto に触発されたものだという経緯がある。

### バージョン
Oberon OS は、一般に無料でいくつかのプラットフォーム上で動作する。非常に小型である。Oberon 言語コンパイラ、各種ユーティリティ、ウェブブラウザ、TCP/IPネットワーク、GUIなど全てのパッケージを入れても 3.5インチフロッピーディスク1枚に納まる。IBM PC互換機で動作するバージョンを Native Oberon と呼ぶ。

ヴィルトの開発したオリジナルに近いバージョンとして Oberon V4 がある。これもチューリッヒ工科大学で開発されたが、最新版はリンツ大学にある。ただし、2000年以降開発が停止している。

チューリッヒ工科大学は近年、動的オブジェクトとOSの並行性の研究に注力しており、新たな Active Object Oberon という言語とそれを使ったOSをリリースした。そのOSは当初 AOS と呼ばれていたが、現在は A2 または Bluebottle と呼称されている。チューリッヒ工科大学のサイトでは大部分のソースと共にこれを公開している。現在のバージョンではIA-32のデュアルプロセッサまでと、StrongARMファミリをサポートしている。

チューリッヒ工科大学の Native Systems Group では、Oberon をベースとした用途限定のOSである stailaOS を開発した。これは、リアルタイム解析、高速商取引システム、主記憶のみで動作するERPシステムなどが用途とされている。

### Native Oberon
**Native Oberon** はx86ベースのPC上で動作するOberonである。ハードウェアに対する要求仕様が小さい（Pentium 133MHz、ハードディスクは100MB、表示は1024×768ピクセル、オプションでスリーコム製ネットワークカード）。フロッピーディスク1枚で基本システムを動作させることが可能で、追加のソフトウェアはネットワーク経由でインストールできる。Native Oberon もシステム全体がOberon言語で書かれている。

## Oberon プログラミング言語

プログラミング言語の**Oberon**は、PascalやModula-2を生み出したニクラウス・ヴィルトがチューリッヒ工科大学のチームと共に1986年に開発した。OSのOberonの開発の一環として開発されたもので、Modula-2をシステム実装言語として使用しようとしたとき安全な型拡張機能がないことから新たに設計された。当初から教育目的で言語処理系とOSの詳細を書籍の形で出版する計画だった。そのため新言語は必要な基本機能のみを備えた設計になった。

文法はModula-2によく似ているが、かなり小さくなっている。その単純さから、コンパイラの生成するコードも小さく効率的である。言語仕様はEBNF1ページほどで記述できる。コンパイラも4000行ほどで記述されていた。Modula-2との大きな違いとしてガベージコレクションを備えている。

Oberonと後継のOberon-2は様々なOS上に移植されており、Javaプラットフォーム上でも動作する。OberonのソースコードからJavaのソースコードを生成する方式とJava-VM向けバイトコードを生成する方式がある。

### 設計目標
Oberon は安全性を指向した言語である。配列境界チェック、ガベージコレクション、強い型チェックなどの機能がある。これらはロジックのバグを早期に発見することを目的としており、プログラム実行時に顕在するバグの数を劇的に減少させる。しかし、他の言語がバグ削減を目的として採用している機能が実装されていない（例えば、enum型、プログラマ指定の整数範囲型）。結果として数式的部分に関してはプログラマが注意しなければならない。

### 特徴
Oberon はコードの不透明性をなくし、機能を限定して機能の誤用を防ぐことでミスを減らそうとした。この考え方は APL と共通するものがあるが、Oberon は簡略化しすぎて可読性を損なうことがないよう意図して設計された。

成功かどうかを定量的に測るのは難しいが、Oberon が当初の目標を達成したかどうかについては異論もある。Ada 設計者の1人 Jean Ichbiah は Oberon の簡略化の方針に異議を唱えた。これは、ヴィルトが Ada を「大きすぎる」と非難したことに応えたもので、彼は「ヴィルトは大きな問題への小さな解決策が存在すると考えている。私はそのような奇跡は信じない。大きな問題には大きな解決策しかない!」と言った。Oberon の開発者たちは、そういう意味では Oberon は行き過ぎていたと考え、Oberon-2 では FOR文の文法を差し戻した（初期の Oberon には WHILE文があれば十分と考え削除されていた）。

機能を省くことでプログラマが「車輪の再発明」のように機能を再実装しなければならなくなるという議論もある。ライブラリはそのような問題を多少なりとも和らげる。Javaは（Oberonほどではないが）単純な言語と大きな標準ライブラリの実例である（なお、Oberon の標準ライブラリは Java のものより小さい）。ある言語を習得するということは、その言語の標準ライブラリについても学ぶことであり、Ichbiah の上述の反論は、機能を標準ライブラリに移動させることによる単純化戦略にも拡大して当てはめることができる。ヴィルトや Oberon のファンは、Oberon が基本的かつ効果的にこの問題を防いでいるとしている。

* Pascal風だが、より一貫した文法
* 強力な型チェックと型拡張
* 型チェックインタフェース付きモジュールと分割コンパイル
* 全数値型間での互換性（式内で混用可能）
* 文字列操作
* システムプログラミングをサポート

#### Visibility Flag
グローバル変数、型、定数、プロシージャはデフォルトでは宣言しているモジュール内でのみ可視である。Visibility Flag をつけることで他のモジュールからも見えるようにできる。Visibility Flag とは例えばリードライト許可の場合アスタリスク(`*`)である。フラグをうっかり忘れた場合の安全を考慮してデフォルトが選ばれている。

ローカル変数、型、定数、プロシージャは常に宣言しているプロシージャ内でのみ可視である。

#### 参照渡しと値渡し
プロシージャの引数に関して2つのモードが可能である。値渡し（Call by value）では引数に式を使用でき、式を評価した結果の値がプロシージャに渡される。参照渡し（Call by reference）では変数を渡すことだけが許されるので、その変数の値はプロシージャ内で変更される可能性がある。参照渡しにする場合、プロシージャの定義で引数に VAR という予約語を付与する。

### 実装と派生
#### Oberon
OberonはOSとともにチューリッヒ工科大学などで公開されている。

#### Oberon-2

1991年に一部改訂を行い、オブジェクト指向を取り入れFOR文を復活させたものが**[[Oberon-2]]**であり、現在最も一般的実装となっている。Native Oberon と呼ばれるOSを含めた実装はPC上で動作する。.NET向けに若干の拡張を加えたバージョンもチューリッヒ工科大学で開発されている。

チューリッヒ工科大学が保守しているOberon-2コンパイラとしては、Windows版、Linux版、OS X 版がある。他にもやAmigaOSといった各種OSで動作するバージョンがある。

イギリスのマンチェスター大学の Stephen J Bevan は、LexとYaccでヴィルトらの仕様に基づいたOberon-2の字句解析器と構文解析器を作成した。最新バージョンは1.4である。

#### Oberon-07
ヴィルトが2007年に定義したのがOberon-07である。Oberon-2ではなく本来のOberonに基づいており、2011年に仕様が改訂されている。主な変更点は、数値型の明示的変換関数（FLOOR、FLTなど）を必ず使うようにした点、LOOP文とEXIT文を排除した点、WHILE文が拡張された点、RETURN文が関数の最後にのみ存在するようにした点、インポートされた変数や構造のある引数がリードオンリーとなった点、配列をCOPY文を使わずに代入できるようになった点などである。

コンパイラの実装としては、32ビットWindows版 Oberon-07M、32ビットARM版、Cortex-M3マイクロコントローラ版、ヴィルトが設計したRISCプロセッサを Xilinx FPGA Spartan-3 ボードに実装したもので動作する版がある。

#### Active Oberon
 はOberonの別の拡張版で、オブジェクト指向を取り入れ（オブジェクト単位のアクセス制限など）、表明、プリエンプティブな優先度付きスケジューリング、メソッドの文法の若干の変更などがなされている。オブジェクトはスレッドまたはプロセスとして機能させることもできる。対応するOSはA2またはBluebottleと呼ばれる。

#### 関連言語
Oberon系統の言語開発は継続している。Oberon-2をさらに発展させたのが Component Pascal で、チューリッヒ工科大学からスピンオフしたオベロン・マイクロシステムズやクイーンズランド工科大学がサポートしている。他にも特定分野向けにOberonの精神を受け継いだ言語として、LagoonaやObliqがある。

チューリッヒ工科大学にて、.NET環境向けに Zonnon という新言語が開発されている。Oberonの特徴を引き継ぎつつ、Pascalから一部機能を復活させたものだが、文法は異なる。動的オブジェクト、演算子オーバーロード、例外処理などの機能が追加されている。.NET向けに Microsoft Visual Studio のプラグインとして処理系を使用することができる。

Oberon-Vは数値解析向けにOberonを拡張した言語で、特にベクタープロセッサやパイプラインアーキテクチャのスーパーコンピュータでの利用を意図している。元々は小セネカにちなみ Seneca と呼ばれていた。

## 脚注

## 外部リンク
### OS
* The ETH Oberon Homepage
* Native Oberon Home Page at ETHZ (Archived page)
* Genealogy and History of The Oberon System
* Oberon Community Platform - Wiki & Forum
* BlueBottle/Aos/A2 An evolution of Native Oberon with support for Multiprocessor systems with Active Objects (kind of threads running on separate processors, if available) and a Zooming User Interface
* Native Oberon Home Page
* Native Oberon Hardware Compatibility
* Notes and bug repairs for ETH Native Oberon
* Lukas Mathis' Blog about Oberon  Oberonとユーザインタフェースの歴史

### 言語
* Niklaus Wirth's Oberon page at ETH-Zürich
* Oberon Language Genealogy
* Oberon Web Ring
* Oberon at SSW, Linz
* Linux Native Oberon related section
* Astrobe - ARM Oberon-07 Development System
* Oberon System V4 for HP OpenVMS Alpha with source code upward-compatible 64 bit addressing
* 64 bit Oberon-2 compiler for HP OpenVMS Alpha

### 言語の変遷
* "*[http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon.Report.pdf The Programming Language Oberon]*" Wirth, (1988/90)
* "*[http://www-vs.informatik.uni-ulm.de:81/projekte/Oberon-2.Report/ The Programming Language Oberon-2]*" H. Mössenböck, N. Wirth, Institut für Computersysteme, ETH Zürich, January 1992
* "*[http://www.oberon.ch/pdf/CP-New.pdf What's New in Component Pascal]*" (Changes from Oberon-2 to CP), Pfister (2001)
* "*[http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.pdf Differences between Oberon-07 and Oberon]"* Wirth (2007)
* "*[http://www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf The Programming Language Oberon-07 (Revised Oberon)]*" Wirth, 2007/11 (Most current language report)

be-x-old:Oberon