Digital Mars C++ Compiler
Digital Mars C++ Compiler
は DbC
を実装した唯一の C++
コンパイラです。これはオープンソースプロジェクトではありませんが、無料で入手することができます。プログラマはこのコンパイラと共に契約を自然に書くことができます。
このコンパイラはD言語の開発者でもある Walter Bright
氏によって開発されました。D言語はこのコンパイラの開発経験をベースにしていると思われます。
では、このコンパイラと共にどのように契約を書くのでしょうか? それはD言語の構文と似ていますが、アンダースコアを接頭する必要があります:
long
square_root(long
x)
__in
{
assert(x
>=
0);
}
__out
(result)
{
assert((result
*
result)
== x);
}
__body
{
return
sqrt(x);
}
契約の書き方
契約プログラミング(DbC)を実装するプログラム言語は、Eiffel、Digital
Mars C++ CompilerとD言語などです。これらの言語はいずれも、現在決してポピュラーとは言えません。しかし、これらの言語で書かれた
DbC
を読むことによって、契約を書く方法や DbC
の概念を理解することが容易になるでしょう。
D言語公式サイトのサンプルコードは、以下のようになっています:
long
square_root(long
x)
in
{
assert(x
>=
0);
}
out
(result)
{
assert((result
*
result)
== x);
}
body
{
return
math.sqrt(x);
}
in
は、事前条件です。out
は事後条件で、関数の戻り値である result
変数を得ることができます。
それぞれの条件チェックには assert()
を使用します。D言語の assert()
は、例外 AssertException
をスローするので、Cの assert()
より役に立つと主張されています。例外であれば、キャッチした後、どのようにも取り扱いができるからです。