Help us understand the problem. What is going on with this article?

<3> Macintosh 用 Pascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi)

3. Macintosh 用 Pascal のオブジェクト指向拡張

Apple の Object Pascal の源流はラリー・テスラーが 1985 年に書いた "Object Pascal Report"1 2 です。Object Pascal は Apple のテスラーのチームと Pascal の生みの親であるニクラウス・ヴィルトが開発したものです。Clascal との関係はハッキリしませんが、Clascal を叩き台として Object Pascal へとブラッシュアップしたような印象を受けます。

当初、Macintosh にはセルフ開発用環境が用意されておらず、Lisa を使ったクロスコンパイルが行われていました。クロスコンパイル用環境 Lisa Workshop で使われたのが (Lisa) Object Pascal で、1986 年の 3 月にリリースされました。

その後、セルフ開発用環境である Macintosh Programmer's Workshop (MPW) が 1986 年の 10 月にリリースされました。MPW 用の言語の一つが (Macintosh) Object Pascal です 3
image.png
Apple の Object Pascal には名前が付いておらず、後になって Mac Pascal という名前が付けられたようですが一般的ではないようです。Lisa の Object Pascal も Macintosh の Object Pascal も言語仕様は同じものなので、ひっくるめて Apple Object Pascal と記述するのが正しい気がします。
MPW.gif
また、MPW Pascal にはオブジェクト指向部分以外の拡張もあり、ダン・アレンは次のような言葉を残しています。

MPW Pascal overcomes most of Brian Kernighan's objections to Pascal included in his famous memo "Why Pascal Is Not My Favorite Programming Language."

See also:

3.1. Apple Object Pascal のクラス

Apple Object Pascal のオブジェクト指向拡張はオブジェクト型によって行われています。用語の使い方が曖昧なのですが ”オブジェクト型でクラスを作る” みたいな使われ方をしています。オブジェクト型は型宣言部 (type) にて "型名 = objectend;" として定義します。

3.1.1. オブジェクト型の定義

以下のコードでルートクラスを作れます。

type
  TClass = object { オブジェクト型 TClass の定義 }
    FID: Integer;
  end;

普通のルートクラスは ObjIntf.p で定義されている TObject です。MacApp アプリケーションを作る場合には通常 TApplication を継承します。多重継承は行えません。

uses
  ObjIntf;

type
  TClass = Object (TObject) { TObject を継承したオブジェクト型 TClass の定義 }
    FID: Integer;
  end;

Apple Object Pascal のオブジェクト型にはコンストラクタやデストラクタがなく、プロパティもありません。

  • 多重継承はできません。
  • 可視性指定子はありません。
  • 自クラスを表すにはキーワード SELF を使います。
  • Clascal にあった抽象メソッドはありません。

3.1.2. オブジェクト型の作成と破棄

生成と破棄は New() と Dispose() で行います。

ClassTest.p
program ClassTest;

type
  TClass = object
    FID: Integer;
    FFirstName: string;
    FLastName: string;
    function GetName: string;
  end; { TClass }

  TClassEx = object(TClass)
  end; { TClassEx }

function TClass.GetName: string;
begin
  GetName := Concat(FFirstName, FLastName);
end;

var
  ClassEx: TClassEx;

begin
  New(ClassEx); 

  ClassEx.FID := 100;
  ClassEx.FFirstName := 'Hello,';
  ClassEx.FLastName  := 'world.';
  writeln(ClassEx.FID       );
  writeln(ClassEx.GetName   );

  Dispose(ClassEx);  
end.

TObject から派生していれば、Dispose() の代わりに Free() メソッドを呼ぶ事もできます。

uses
  ObjIntf;

type
  TClass = object
    ...
    procedure Free; override;
  end; { TClass }
...

procedure TClass.Free;
begin
  inherited Free;
end;

ObjIntf.p の TObject には最低限のメソッドしか実装されていません。

ObjIntf.p
{
  File: ObjIntf.p

  Pascal Interface to the Macintosh Libraries
  Copyright Apple Computer, Inc.  1986 - 1988
  All rights reserved.  
}

UNIT ObjIntf;

INTERFACE

TYPE
  TObject = OBJECT
    FUNCTION  ShallowClone: TObject;
      {Lowest level method for copying an object; should not be overridden
        except in very unusual cases.  Simply calls HandToHand to copy
        the object data.}
    FUNCTION  Clone: TObject;
      {Defaults to calling ShallowClone; can be overridden to copy objects
        refered to by fields.}
    PROCEDURE ShallowFree;
      {Lowest level method for freeing an object; should not be overridden
        except in very unusual cases.  Simply calls DisposHandle to
        free the object data.}
    PROCEDURE Free;
      {Defaults to calling ShallowFree; can be overridden to free objects 
        refered to by fields.}
    END;


END.

See also:

3.3. 命名規則

Apple の Object Pascal のコードはなんだか読みやすく、初めて読んでもさほど違和感がありません。

  • クラスは型 (Type) を拡張して作られているので、名前を T で始める。
  • インスタンス変数はオブジェクトのフィールドでもあるので名前を f で始める。
  • 名前の境界はアンダースコア(_)で区切らず大文字で示す。

これらは Apple 社が推奨した命名規則です。Borland 系のオブジェクト指向 Pascal もこれを踏襲しています。

3.4. MPW Pascal の使い方

備忘録的に、軽く Macintosh Programmer's Workshop (MPW) の使い方を説明します。資料が少ないので "Hello World が書けるまで" くらいの説明しかできません。

  1. プロジェクト用のフォルダを作成します。ここではデスクトップに Projects/Hello フォルダを作成しています。
    image.png

  2. MPW Shell を起動します。
    image.png

  3. [Directory | Set Directory] で作業フォルダを設定します。
    image.png
    Projects/Hello フォルダを辿って開いて行き、最後に [Select Current Directory] ボタンを押します。一つ前のフォルダ (画像の状態) で [Directory] ボタンを押しても構いません。
    image.png

  4. [File | New] で新しいファイルを作成します。
    image.png
    Projects/Hello フォルダに Hello.p という名前のファイルを作ります。拡張子は *.p である必要があります。
    image.png
    新規エディタが開きます。分かりやすいように右上に Finder で Projects/Hello フォルダを開いておきました。
    image.png

  5. Hello World を記述します。書き終わったら [File | Save] で保存しておきます。
    image.png

  6. [Build | Create Build Commands] でビルドコマンド (.make ファイル) を作成します。
    image.png
    設定項目を埋めます。[Program type] を SIOW App 4、[Target] を 68K Only にすれば SIOW アプリケーション (コンソールアプリケーションのようなもの) が作れます。[68K Model] は Model NearModel Far のいずれかを選びます。
    image.png
    埋めたら [Source Files] ボタンを押し、ソースファイルを指定します。目的のファイルをダブルクリックするか、選択して [Add] ボタンを押し、下側のボックスに移動させます。移動が終わったら [Done] ボタンで確定させます。
    image.png
    [Command Line] が画像のようになっていれば OK です。このまま [CreateMake] ボタンを押します。
    image.png
    hello.make ファイルができました。
    image.png

  7. もし、コード中でオブジェクト型 (クラス) を使うのなら、リンカに ObjLib.o を渡さないとエラーになります。.make ファイルをダブルクリックするとコードエディタで開けますので、"{Libraries}"ObjLib.o" ∂ を追加して保存します。
    image.png

  8. [Build | Build] でプロジェクトをビルドします。
    image.png
    プログラム名を尋ねられますので Hello と入力します。
    image.png
    しばらくするとビルドが完了し、実行ファイルが生成されます。
    image.png

  9. プログラム Hello を実行します。Finder からダブルクリックします。
    image.png
    終了ボタンがなくて面食らうかもしれませんが、MacOS のメニューの [File | Quit] でアプリケーションを終了させる事ができます。

See Also:

3.4.1. MPW Pascal が必要とする標準ライブラリ

Pascal コンパイラが必要とする標準ライブラリは次の通りです 5。次に挙げる標準ライブラリは最初からビルドコマンドに含まれています。

機能 ライブラリ 場所
低レベル I/O IntEnv.o Libraries
ToolBox, OS Interface.o Libraries
ランタイムサポート MacRuntime.o Libraries
SANE 6 SANELib.o PLibraries
SANE 6 (Far & コプロセッサ 7 ) SANELib881.o PLibraries
Pascal PasLib.o PLibraries

次に挙げる標準ライブラリはビルドコマンドの Program Type によって自動的に追加されます。

機能 ライブラリ 場所
SIOW 4 SIOW.o Libraries
標準ライブラリ Stubs.o Libraries
MPW tools ToolLibs.o Libraries

次に挙げる標準ライブラリは追加で指定する必要があります。

機能 ライブラリ 場所
数値演算 MathLib.o Libraries
数値演算 (Far & コプロセッサ 7 ) MathLib881.o Libraries
Object Pascal ObjLib.o Libraries
68K セグメント操作 (Far) RTLib.o Libraries

See also:

3.5. Delphi 1 の疑似コンソールアプリケーション

Delphi 1 (や Turbo Pascal for Windows) にも SIOW アプリケーションみたいな WinCRT がありました。

Delphi 1 では MS-DOS アプリケーションを作れない代わりに疑似コンソールアプリケーションを作る事が可能でした。
-image.png

3.6. その他の Macintosh 用 Object Pascal

オブジェクト指向拡張されている Pascal は他に Symantec の THINK Pascal や Metrowerks の CodeWarrior Pascal があります。

3.6.1. Symantec THINK Pascal

Symantec THINK Pascal は WPM Pascal と高い互換性を持っています。以前は LightSpeed Pascal と呼ばれていました。
image.png
最終的に無償公開されました。現在でも DL 可能です。

See also:

3.6.2. Metrowerks CodeWarrior Pascal

Metroweaks CodeWarrior は 1998 年の Pro 4 まで Pascal コンパイラが付属しました。Windows 版もありました。
image.png

See also:

参考文献

image.png

タイトル 著者 ISBN-10
(Amazon)
出版年
オブジェクト指向プログラミング〈上巻〉 カート・J.シュマッカー (著)
大谷 和利 (訳)
4890520910 1989/12/15

MPW は開発者登録しないと購入できなかった上に高額だったらしく 8、MPW Pascal の資料は殆ど残っていません。インターネット普及期には既にディスコンだったため 9、ウェブサイトにも殆ど情報がありません。

どなたか僕に『Macintosh Programmer’s Workshop Object Pascal 日本語版』を譲ってください!

同様の理由で C+- (typo ではない) の言語仕様を調べるのも困難です。

See also:

索引

[ ← 2. Clascal のオブジェクト指向拡張 ] [ ↑ 目次へ ] [ → 4. Turbo Pascal のオブジェクト指向拡張 ]


  1. "Object Pascal Report", Structued Programming (Structured Language World) 9, 3 (1985), pp. 10-15. 

  2. "Object Pascal Report", Apple Technical Report No.1 (1985) 

  3. 当初は Object Pascal のみで、後に C と C++ が追加された。 

  4. Simple Input/Output Window 

  5. 『Building and Managing Programs in MPW』の "Switching between MPW libraries (Table 9-2)" より。 

  6. Standard Apple Numerics Environment 

  7. コプロセッサ (68881 / 68882) の有無はビルドコマンドの [68K Options] で指定できます。 

  8. 後に無償公開されました。 

  9. Power Macintosh の時代になると MPW での Pascal サポートは打ち切られてしまいます。具体的には 1995/11 に打ち切られています。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした