Esterelは、複雑な
リアルタイムシステムを対象とした同期型
プログラミング言語です。
命令型プログラミングのスタイルを基盤としており、並列性と
プリエンプションを直感的に表現できます。そのため、制御システムの設計において特に有効です。
開発は、
1980年代初頭にGérard Berry氏が率いる
パリ国立高等鉱業学校とINRIAのチームによって開始されました。現在のコンパイラは、Esterelのソースコードから
C言語のコードや、
レジスタ転送レベルのハードウェア記述(VHDLやVerilog)を生成できます。開発は継続されており、商用版には統合開発環境であるEsterel Studioが存在します。また、開発企業であるEsterel Technologiesは、
IEEEでの標準化を進めており、「Esterel v7 Reference Manual Version v7 30 – initial
IEEE standardization proposal」が公開されています。
時間の多形記法
Esterelにおける時間の扱い方は、非同期言語とは大きく異なります。具体的な時間を用いるのではなく、イベントの順序関係のみを記述します。つまり、具体的な時間そのものには意味がなく、事象の有無とその同時性のみが重要となります。これを「時間の多形記法」と呼びます。Esterelでは、論理的な実体を完全に順序付けして記述し、各実体内で(ゼロ個を含む)任意の数の事象が発生します。同一の実体内で発生した事象は同時発生とみなされ、異なる実体で発生した事象の順序は、それらの実体の順序によって決定されます。文には、実行と完了が同じ実体内で完結する(時間を消費しない)文と、一定のサイクル数の遅延を伴う文が存在します。
シグナル
Esterelにおける唯一の通信手段は「シグナル」です。シグナルには、値を持つものと持たないものがあり、それぞれ入力シグナル、出力シグナル、ローカルシグナルに分類されます。一つのシグナルは、ある実体において「存在するかしないか」という属性を持ち、値付きシグナルの場合はさらに値という属性を持ちます。シグナルはプログラム全体にブロードキャストされ、任意のプロセスがシグナルを読み書きできます。値付きシグナルの値は、そのシグナルが存在しない場合でも任意のプロセスが決定できます。デフォルトではシグナルは存在せず、明示的に`emit`文で存在するようにしない限り、存在しない状態が維持されます。通信は即座に行われ、あるサイクルで発行されたシグナルはそのサイクル内で全てのプロセスから観測可能です。
シグナルの一貫性規則
Esterelのシグナルには以下の重要な規則があります。
各シグナルは、1つのサイクル内において存在するかしないかのどちらか一方のみであり、両方の状態を取り得ることはない。
シグナルの書き込み(emit)操作は、読み取り操作よりも前に実行される必要がある。
これらの規則から、以下のようなコードは誤りとなります。
present A else
emit A
end
このコードは、シグナル`A`が存在しない場合に、それをブロードキャストしようとするため、矛盾が生じます。
言語構文
基本的なEsterelの文は以下の通りです。
`emit S`: 現在の実体でシグナル`S`を存在させます。シグナルは`emit`されるまで存在しません。
`pause`: 実行を一時停止し、次のサイクルで再開します。
`present S then stmt1 else stmt2 end`: 現在の実体でシグナル`S`が存在するならば`stmt1`を実行し、そうでなければ`stmt2`を実行します。
`await S`: シグナル`S`が存在するまで待ちます。`await`は通常、サイクルの開始時には`S`の存在をチェックしません(最低1サイクルは待ちます)。`await immediately`は、サイクルの開始時にチェックします。
`loop p end`: `p`を無限に繰り返します。ループ本体に`pause`や`await`などの遅延操作がない限り、ループは停止しません。
`p||q`: `p`と`q`を並行して実行します。両方のグループが完了した時に完了となります。
例 (ABRO)
以下のプログラムは、`A`と`B`を同時に受信すると`O`を出力し、`R`を受信すると動作がリセットされる例です。
esterel
module ABRO:
input A, B, R;
output O;
loop
[ await A || await B ];
emit O
each R
end module
利点
Esterelには、以下のような利点があります。
時間モデルにより、プログラマーは正確な制御を実装可能
並行性のサポートにより、制御システムの記述が容易
完全に決定的な動作が保証される
有限状態言語であるため、実行時間が予測可能(最悪実行時間の算出が可能)
形式的な検証が容易
ソフトウェアとしてもハードウェアとしても実装可能
欠点
一方で、Esterelには以下のような欠点も存在します。
有限状態性により、言語としての柔軟性が低い(ただし、適用分野における表現能力としては十分)
意味論的な問題が存在する
因果律違反を防ぐのが難しい場合がある
一般的にコンパイルが困難だが、単純な正当性検証手法が存在する
外部リンク
Esterel - Best Seller Products Collection
Synfora, Inc.
Esterel Web
The Esterel Language
*
The Columbia Esterel Compiler: An open-source Esterel compiler