14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

割と簡単に ’標準 Modula-2 / Oberon-2' を試してみたい

Last updated at Posted at 2019-11-22

はじめに

Delphi を使っていて、Modula-2 や Oberon-2 と何が違うのか、ふと知りたくなることがあります。Wirth 先生が元々 Pascal で書いた書籍を Modula-2 や Oberon で書き直して改版したものを読んでいると実際にコードを実行して試したい事がよくあります...ないですか?ありますよね?あるでしょ、普通?

Modula

Pascal の後継言語 (1976 年)。

ソースコードのモジュール化が可能。モジュール は UCSD Pascal の unit とは異なり、ソース分割や分割コンパイルだけを目的としたものではない。モジュール化を行う事でオブジェクト指向言語のカプセル化に類似した機能を実現できる。

並行処理のための プロセス が実装されている。

レポートが提出された後、すぐに開発は中止され、Modula-2 へと移行した。

See also:

Modula-2

Pascal の後継言語 (1979 年)。Modula をより実用的にしたもの。

プロセスの代わりに コルーチン が実装されている。コルーチンとは、端的に言えば中断と再開が可能なサブルーチン (または関数) である。

プログラミング言語 Mesa に強い影響を受けている。

Wirth の書籍『Programming in Modula-2』は版によって PIM と呼ばれる方言になっている。

方言 書籍
PIM 1982 Programming in Modula-2
PIM2 1983 Programming in Modula-2 [第 2 版]
PIM3 1985 Programming in Modula-2 [第 3 版]
PIM4 1988 Programming in Modula-2 [第 4 版]

ISO 規格は ISO/IEC 10514-1:1996 (Standard Modula-2) で、2 つのオプション規格が存在する。

  • ISO/IEC 10514-2:1998: Generics Modula-2 (ジェネリクス拡張)
  • ISO/IEC 10514-3:1998: Object Oriented Modula-2 (オブジェクト指向拡張)

ジェネリクス拡張やオブジェクト指向拡張はオプションなので、実装してもしなくてもいい。

Delphi には Modula-2 の機能に類似した機能があるが、Pascal 方言を Modula-2 が採用したから似ているのか、Modula-2 の機能を Delphi が採用したから似ているのか、或いはその両方なのか断定できない。

例えば Modula-2 には LOOPEND という無限ループと、そこから抜ける EXIT 手続きがあるが、前身の Modula (1976) や、ほぼ同時期の Pascal 8000 (1976) にもその機能がある。 Modula-2 にはオープン配列パラメータがあり、Delphi にもオープン配列パラメータがある。

すべての Pascal 方言を知っている訳ではないので「これは Modula-2 由来」と言い切れないのがモヤっとする。さらに言えば、ユニット単位に分割できる Pascal 方言や、コルーチンが使える Pascal 方言もあった。

See also:

Oberon

Modula-2 の後継言語 (1988 年, 1990 年改訂)。Oberon (OS) を記述するために Modula-2 を使おうとしたが問題が発生したために再設計したのが言語としての Oberon である。Oberon を 2007 年に再定義した Oberon-07 / Revised Oberon (2007 年, 2016 年改訂) もある。言語仕様がかなり小さい。

See also:

Oberon-2

Oberon の後継言語 (1991 年) でありスーパーセットだが、Oberon-07 があるため Oberon の方言の一つとも言える。オブジェクト指向拡張を取り入れているが、それでも言語仕様が小さい。

前身は Oberon にオブジェクト指向拡張を施した Object Oberon (1989)。

See also:

純粋な '標準 Modula-2 / Oberon-2' を求めて

Windows 環境で最も簡単に実行できる標準 Modula-2 / Oberon-2 は XDS-x86 だと思われます。ライセンスは Apache 2.0 です。

Modula-2、Oberon-2 いずれもコンパイルできます。Modula-2 は ISO/IEC 10514-1 のみの実装です。ジェネリクス拡張もオブジェクト指向拡張も使えません。Oberon は Oberon-2 なのでオブジェクト指向プログラミングが可能です。

Modula-2 や Oberon(-2) は ideone.com にもないので、手軽に試す事ができないんですよね...。

See also:

XDS-x86 のインストール

Github の bin フォルダにあるコンパイル済バイナリを取得します。

適当な場所に解凍し、XDS-x86\bin フォルダにパスを通すだけで使えます。

set path=C:\XDS-x86\bin;%PATH%

Modula-2 の Hello,world.

ソースコードはこんな感じです 1

HelloModula2.mod
MODULE HelloModula2;
IMPORT InOut;
BEGIN
  InOut.WriteString("Hello,world.");
  InOut.WriteLn;
END HelloModula2.

コンパイラのコマンドは xc です 2。拡張子 .mod は Modula-2 用のソースファイルとみなされます。拡張子を無視するには +M2 オプションを付け、Modula-2 コンパイラを呼び出すことを明示します。

=m(ake) オプションを付けると、リンクまで行って実行可能ファイル (.exe) を生成します。つまり、次のコマンドでコンパイルし、実行ファイルを生成します。

C:\WORK>xc =m HelloModula2.mod
O2/M2 development system v2.51 TS  (c) 1991-2010 Excelsior, LLC. (build 09.06.2019)
#project is up to date

XDS Link Version 2.11.19 Copyright (c) Excelsior 1995-2008.
No errors, no warnings

Oberon-2 の Hello,world.

ソースコードはこんな感じです 3

HelloOberon2.ob2
MODULE HelloOberon2;                     
IMPORT Out;
BEGIN
  Out.String("Hello,World.");
  Out.Ln;
END HelloOberon2.

コンパイラのコマンドは xc です 2。拡張子 .ob2 は Oberon-2 用のソースファイルとみなされます。拡張子を無視するには +O2 オプションを付け、Oberon-2 コンパイラを呼び出すことを明示します。

また、Oberon-2 の場合には +MAIN オプションを付け、これがメインモジュールである事を明示する必要があります。

=m(ake) オプションを付けると、リンクまで行って実行可能ファイル (.exe) を生成します。つまり、次のコマンドでコンパイルし、実行ファイルを生成します。

C:\WORK>xc =m HelloOberon2.ob2 +MAIN
O2/M2 development system v2.51 TS  (c) 1991-2010 Excelsior, LLC. (build 09.06.2019)
#project is up to date
New "tmp.lnk" is generated using template "C:/XDS-x86/bin/xc.tem"

XDS Link Version 2.11.19 Copyright (c) Excelsior 1995-2008.
No errors, no warnings

おわりに

とりあえず、目的は達成されました!めでたしめでたし...。
Oberon は去年 30 周年、Modula-2 は今年 40 周年、Pascal は来年 50 周年です。

See also:

Modula-2 についての個人的な感想

個人的には Modula-2 は Wirth 先生が Pascal についてあーだこーだ言われたので頭にきて作った言語だと思っています。Pascal の問題点を Pascal の改訂によって解決するのではなく、最初から問題が存在しない、仕様がコンパクトな言語を作る事に注力した感じです。

商用 Pascal を作っていた会社やそのユーザーは、多少言語仕様が大きくなっても Pascal の問題点は Pascal の拡張によって解決する道を選んだ、って感じです。過去の資産があるのとないのとでは大違いですからね。

Oberon についての個人的な感想

Oberon は ISO 規格がない事からも、あまり商用コンパイラの需要がなかった感じです。

『X68000 の筐体を担当していた技術者が「ネジが多すぎる!」と言われて頭にきて Compact の筐体はネジ一本でバラせるようにした (バラしやすいとは言っていない)』

という逸話くらいに極端な言語です。ミニマリストというか断捨離というか、確かに変な魅力はあります。『The Programming Language Oberon』 って、たったの 17P しかないんですよ?

Oberon-2 は Wirth 先生が作ったというより、Hanspeter Mössenböck (ハンスペーター・メッセンベック) 氏が作ったという印象が強いです。Object Pascal や Modula-2 のオブジェクト指向拡張もそうですが、Wirth 先生はオブジェクト指向を言語本体に組み込むべきではないと思ってるフシがあります。

あと、OS の方の Oberon は使い方がよくわかりませんでした。でも、確かに Apple の Macintosh Programmer's Workshop の操作性にちょっと似てるかも。
image.png
See also:

  1. Qiita では Modula-2 のシンタックスハイライトができないので Pascal のものを使っています。

  2. X68000 の C コンパイラではありません。 2

  3. Qiita では Oberon-2 のシンタックスハイライトができないので Pascal のものを使っています。

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?