コンテンツにスキップ

Oberon言語

出典: フリー教科書『ウィキブックス(Wikibooks)』

言語概要

[編集]

Oberon言語は、Niklaus Wirthによって設計された強い型付けを持つモジュラー言語です。Pascal言語の後継として位置づけられ、シンプルさと安全性を重視しています。

主な特徴:
MODULE Example;  (* モジュール宣言の例 *)
IMPORT Texts;    (* 明示的なインポート *)
TYPE
  Counter = RECORD  (* レコード型の定義 *)
    value: INTEGER;
  END;
END Example.

基本構文

[編集]

Oberonの構文は読みやすさを重視しています。以下に基本的な制御構造を示します:

MODULE ControlFlow;

PROCEDURE Example;
VAR
  i: INTEGER;
  found: BOOLEAN;
BEGIN
  (* IF文の例 *)
  IF x > 0 THEN
    DoSomething
  ELSIF x < 0 THEN
    DoOther
  ELSE
    DoDefault
  END;

  (* WHILE文の例 *)
  WHILE i < 10 DO
    INC(i)
  END;

  (* REPEAT文の例 *)
  REPEAT
    SearchNext
  UNTIL found
END Example;

END ControlFlow.

データ型

[編集]

Oberonは強力な型システムを持ちます。基本データ型と構造化データ型の対応表:

カテゴリ データ型 サイズ 説明
基本型 INTEGER 32bit 整数
REAL 32bit 単精度浮動小数点
BOOLEAN 8bit 真偽値
CHAR 8bit 文字
構造型 ARRAY 可変 配列
RECORD 可変 レコード
SET 32bit 集合
型の使用例:
MODULE DataTypes;

TYPE
  Point = RECORD
    x, y: INTEGER
  END;

  Points = ARRAY 10 OF Point;

VAR
  p: Point;
  pts: Points;
  flags: SET;

BEGIN
  p.x := 10;
  p.y := 20;
  flags := {0..4, 8};  (* 集合の例 *)
END DataTypes.

モジュールシステム

[編集]

Oberonのモジュールシステムは、カプセル化と分割コンパイルを実現します:

MODULE Graphics;  (* インターフェースモジュール *)

TYPE
  Color = INTEGER;
  
  Shape* = RECORD  (* エクスポートされる型 *)
    color: Color;
    visible: BOOLEAN;
  END;

PROCEDURE Draw*(s: Shape);  (* エクスポートされる手続き *)
BEGIN
  (* 実装 *)
END Draw;

END Graphics.

型拡張と継承

[編集]

Oberonは型拡張による単一継承をサポートします:

MODULE Shapes;

TYPE
  Shape* = RECORD
    x*, y*: INTEGER;
  END;

  Circle* = RECORD (Shape)  (* Shapeの拡張 *)
    radius*: INTEGER;
  END;

PROCEDURE (c: Circle) Area*(): REAL;
BEGIN
  RETURN 3.14159 * c.radius * c.radius
END Area;

END Shapes.

メモリ管理

[編集]

Oberonはガベージコレクションを採用し、安全なメモリ管理を実現します。ポインタ型の宣言と使用:

MODULE Memory;

TYPE
  Node = POINTER TO NodeDesc;
  NodeDesc = RECORD
    data: INTEGER;
    next: Node;
  END;

PROCEDURE CreateNode(): Node;
VAR
  n: Node;
BEGIN
  NEW(n);  (* メモリ割り当て *)
  n.data := 0;
  n.next := NIL;
  RETURN n
END CreateNode;

END Memory.

並行処理

[編集]

Oberonの並行処理モデルは協調的マルチタスキングに基づきます:

MODULE Concurrent;
IMPORT Oberon;

PROCEDURE Task;
BEGIN
  LOOP
    (* 処理 *)
    Oberon.Yield;  (* 他のタスクに制御を渡す *)
  END
END Task;

END Concurrent.

標準ライブラリ

[編集]

主要な標準モジュールとその機能:

モジュール名 主な機能
Texts テキスト処理
Files ファイル操作
Math 数学関数
Out 出力処理
Input 入力処理

コンパイラ

[編集]

Oberonコンパイラの特徴的な最適化と警告:

最適化/警告 説明
定数畳み込み コンパイル時の定数計算
未使用変数検出 使用されていない変数の警告
型チェック 厳密な型チェック
インライン展開 小さな手続きの展開

ベストプラクティス

[編集]
MODULE GoodPractices;
(* モジュール名は内容を適切に表す *)

IMPORT
  Texts, (* 標準モジュール *)
  CustomTypes; (* カスタムモジュール *)

CONST
  MaxSize = 100; (* 定数の使用 *)

TYPE
  Buffer = ARRAY MaxSize OF CHAR;

VAR
  buf: Buffer;

PROCEDURE Clear*(VAR b: Buffer);
(* 引数の意図を明確にする *)
BEGIN
  (* 実装 *)
END Clear;

END GoodPractices.

このハンドブックは、Oberon言語の基本から応用まで、実践的なコード例を交えて解説しています。さらに詳しい説明が必要な部分がありましたら、お申し付けください。