0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

<0> はじめに (標準 Pascal 範囲内での Delphi 入門)〔裏〕

Last updated at Posted at 2021-02-16

0. はじめに

0.1. Pascal プログラムの概要

・uses 句の由来

Delphi にはソース分割のための uses 句があるため、

この拡張は Ada の機能を参考に UCSD Pascal が導入したようです。

・節入れ替えの由来

Delphi では実行部以外なら節を入れ替えても大丈夫ですし、

この拡張は Apple LISA Pascal 由来のようですが、他の Pascal にも類似の拡張があるようです。

See also

(0.1.1.) unit と uses

・宣言部 (interface) と実現部 (implementation)

C 言語で言う所のヘッダファイル (*.h) が宣言部、ソースファイル (*.c) が実現部に相当します。

・finalization

終了処理部 finalization は Delphi 2 で導入されました。Delphi 1 には同等の処理を行うための ExitProc()AddExitProc() がありました。

・to begin do / to end do (拡張 Pascal)

拡張 Pascal には initialization / finalization 同様の構造として、to begin do / to end do があります。

unit ユニット識別子;

// 宣言部
interface

  { 宣言部のコード }

// 実現部
implementation

  { 実現部のコード }

// 初期化文 (オプション)
to begin do
begin
  { 初期化のコード }
end;

// 終了処理文 (オプション)
to end do
begin
  { 終了処理のコード }
end;

end.             

共にとして定義されているようです。

ユニット初期化文 =
  to begin do 文 ";".
ユニット終了処理文 =
  to end do 文 ";".

・暗黙の uses

uses には暗黙的に System ユニットと SysInit ユニットが含まれています。

Modula-2 にも疑似モジュール SYSTEM がありました。

・in を伴う uses

プロジェクトファイル (*.dpr) の uses 句には in 指令を伴ってユニットが記述されている事があります。

Project1.dpr
program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

これは ユニット (Unit1) がプロジェクト (Project1) に含まれる事を意味し、ソースファイル (Unit1.pas) は IDE の管理下に置かれる事になります。

(0.1.1.1.) Propagated Uses (Uses Propagation / Unit Propagation)

・Propagated Uses

Mac 系の Pascal には Propagated Uses または Uses Propagation と呼ばれる機能があり、これをオンにするとユニットオブジェクトのスコープが拡張され、間接的に uses されたユニットのルーチン等を使用できるようになります。

unitA.pas
unit unitA;

uses
  unitB;
...
function FuncA: Integer;
unitB.pas
unit unitB;

uses
  unitC;

function FuncB: Integer;
...
unitC.pas
unit unitC;

function FuncC: Integer;
...

unitA のスコープでは、自身で定義されている FuncA() と unitB の FuncB() が使えますが、間接的に uses されている unitC の FuncC() も使えるのが Propagated Uses です。

・Symantec THINK Pascal の Propagated Uses

[コンパイラオプション] で "USES Extensions" にチェックを入れると Propagated Uses が有効になります 1 2
image.png

・Metroweaks CodeWarrior Pascal の Uses Propagation

[Pascal Language 設定パネル] で "Uses Propagation" にチェックを入れるか、プラグマ $pragma usespropagation on で Uses Propagation が有効になります。
image.png
See also

(0.1.2.) インクルードファイル

インクルードファイルの当初の目的はメモリ不足でエディタに収まらないソースファイルを分割して編集するためでした。

分割コンパイルのための仕組みではないので、コンパイル時に毎回読み込まれます。

(0.1.3.) パッケージとライブラリ

(0.1.3.1.) パッケージ

(0.1.3.2.) ライブラリ

0.2. 構文図

0.3. 拡張バッカス・ナウア記法 (EBNF)

0.4. 有効範囲 (スコープ)

索引

:ramen: [ ↑ 目次へ ] [ → 1. 記法: トークンと区切り文字〔裏〕 ]

  1. ノメモバスターズを入れていないので とか が表示されています。本来の表示は ‘USES’ Extensions です。

  2. "USES Extensions" のもう一つの拡張は実装部 (Implementation) での uses です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?