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?

More than 1 year has passed since last update.

SuperPascal を動かしてみる

Last updated at Posted at 2021-12-22

はじめに

パー・ブリンチ・ハンセンが書いた並行処理可能な Pascal に SuperPascal (1993 年) があります。今回はこれを動かしてみようという趣旨です。

なお、『データ構造とアルゴリズム』においてアルゴリズムの説明に使われた疑似言語 Super Pascal と名前は同じですが別物です。

See also:

使い方

SuperPascal のビルド

本家の SuperPascal は Standard Pascal (ISO Pascal) でコンパイルできる事になっていますが、実際にはいくらかの拡張を施された Pascal でないとコンパイルできません。また、オリジナルのアーカイブは shar 形式なので、解凍するのが少々面倒です。

Free PascalGNU Pascal でコンパイルできる改変版がそれぞれ GitHub で公開されています。

上記リポジトリのファイルを少し改変したものが pascal.hansotten.com で公開されています。zip 形式のアーカイブとなっており、特に理由がなければこちらのアーカイブを使う事をオススメします。

しかしながら、いずれにせよ UNIX 系の環境でないと正しくコンパイルできないと思われます。

■ GPC (Linux)

普通に動作します。
image.png

ビルド

$ ./configure
$ make install

■ GPC (MinGW) (Windows)

動作しました。
image.png

ビルド

MSYS を使う場合は次のようになります。

$ ./configure
$ make install

GPC で直接コンパイルする場合には次のようになります。

gpc --classic-pascal-level-0 --no-warnings --transparent-file-names --no-range-checking -o sr.exe interpret.p
gpc --classic-pascal-level-0 --no-warnings --transparent-file-names --no-range-checking -o sc.exe compile.p

■ FPC (Linux)

普通に動作します。
image.png

ビルド

$ fpc -O3 -Miso -Fabaseunix -osr interpret.p
$ fpc -O3 -Miso -osc compile.p

■ FPC (Windows)

Free Pascal (Windows) でコンパイルする場合には fptime() を実装する必要があります。
image.png

ビルド

次のユニットを用意します。

baseunix.pp
unit baseunix;
{$mode objfpc}
interface

uses
  DateUtils, SysUtils;

function fptime(var tloc: Int64): Int64;

implementation

function fptime(var tloc: Int64): Int64;
begin
  tloc := DateTimeToUnix(Now);
  fptime := tloc;
end;
end.
fpc -O3 -Miso -Fabaseunix -osr.exe interpret.p
fpc -O3 -Miso -osc.exe compile.p

SuperPascal の使い方

SuperPascal の文法や使い方に関しては次のドキュメントを参考にしてください。

■ sc

scSuperPascal コンパイラです。ソースコードを正しくコンパイルできると、中間形式ファイルを出力します。

入力項目 意味
source ソースコード名
code 中間形式ファイル名

■ sr

srSuperPascal インタプリタです。中間形式ファイルを解釈し実行します。

入力項目 意味
code 中間形式ファイル名
select files? no = 入力はキーボード、出力はスクリーン。
yes = 入力ファイルと出力ファイルを指定。

おわりに

SuperPascal には Occam 2 を参考に導入された parallel や、

parallel
    source() |
    sink()
end

forall 等のシンプルな並列実行文が用意されていて面白いですね。

forall i := 0 to 10 do
    something()

Concurrent Pascal も試せるとよかったのですが...。

See also:

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?