契約にこのコード:ldcとgdcはD言語契約をサポートしていますか?
import std.stdio;
int TestContract(int a)
in
{
assert(a > 0);
}
do
{
return a + 1;
}
int main(string[] args)
{
auto a = 2;
try
{
writeln(a," + 1 is ",TestContract(a));
a = -2;
writeln(a," + 1 is ",TestContract(a));
}
catch (Exception e)
{
writeln(e);
}
return 0;
}
コンパイル及びDMD(v2.076.0-汚い)ではなく、LDC(0.17.1)又はGDC(5.4.0 20160609)で実行されます。
LDCは言う:
contracts.d(12): Error: declaration expected, not 'do'
contracts.d(15): Error: unrecognized declaration
とGDC言う:
contracts.d:12:1: error: declaration expected, not 'do'
do
^
contracts.d:15:1: error: unrecognized declaration
}
編集:ではなく "やる" の "体" でコンパイル、答えあたりは、LDCに成功します。現時点でcontract programmingためdlang.orgのドキュメントの可能性が高い非推奨ながら体が、まだ動作していることを言及していない、とDMDのバージョンのために必要であることを
/usr/include/d/core/stdc/stdarg.d:48:5: error: undefined identifier __va_list_tag
alias __va_list = __va_list_tag;
注:GDCは、新しいコンパイルエラーを取得しますコンパイラは[未知のバージョン]より前のコンパイラと、バージョン[未知のバージョン]よりも前にdmdフロントエンドを使用するgdcまたはldcのすべてのバージョンです。
ldc(0.17.5)は、私のために 'do'を使って動作し、' body'は使用しませんでした。 dmd(2.077.0)もうまくいきました。驚くことではありません。おかげさまで – Eljay