PlusCal入門1: hello, world
概要
このページでは最初の PlusCal の例として hello, world と表示するプログラムをレビューし、その基本的な記述構造について考える。PlusCal での仕様記述や TLC 実行のための環境設定は環境設定と検証の実行を参照。
Table of Contents
hello, world の実行例
この記事では TLA+ と同様に Visual Studio Code (vscode) を使用して PlusCal の実行を行う。環境構築は vscode に TLA+ 拡張機能をインストールするだけである (環境設定と TLC の実行参照)。
まず最初に簡単な hello, world を実行してみよう。vscode で以下のような内容の HelloWorld.tla
ファイルを作成する。
---- MODULE HelloWorld ----
EXTENDS TLC
(* --algorithm HelloWorld
begin
Greeting:
print "hello, world";
end algorithm; *)
====
最初に知っておくべき基本的な注意点:
構文の境界: PlusCal の構文は
algorithm [モジュール名]
からend algorithm;
までの間で、それより外は TLA+ の構文である。モジュール名の統一: ファイル名の
[モジュール名].tla
と TLA+ 構文のMODULE [モジュール名]
でモジュール名を同じにしなければならない。ただし PlusCal 構文のalgorithm [アルゴリズム名]
はモジュール名とは異なる名前にしても良い。EXTENDS: PlusCal のコードから TLA+ の機能を使用するときは TLA+ 構文で
EXTENDS
を指定する。EXTENDS
の機能的な意味は Java や Python の import と同じで識別子を解決する。この例では HelloWorld モジュール内でprint
という機能を使用するためにTLC
モジュールをEXTENDS
している。標準で使用できるモジュールとその機能については StandardModules 参照。
この記事ではトランスパイラによって生成される TLA+ 構文やモデル (*.cfg
ファイル) については特に説明しないが、TLC の検証エラーは TLA+ 構文上の位置が示されるため読める程度には慣れておくことを薦めておく。
参考文献
- Leslie Lamport (2009) The PlusCal Algorithm Language
- Leslie Lamport (1997) The Operators of TLA+