Ce code avec un contrat:Est-ce que ldc et gdc supportent les contrats en langage 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;
}
compile, et fonctionne avec DMD (v2.076.0-sale), mais pas ldc (0.17.1) ou gdc (5.4.0 20160609).
ldc dit:
contracts.d(12): Error: declaration expected, not 'do'
contracts.d(15): Error: unrecognized declaration
et gdc dit:
contracts.d:12:1: error: declaration expected, not 'do'
do
^
contracts.d:15:1: error: unrecognized declaration
}
Edit: Compiler avec "corps" au lieu de "faire", par la réponse réussit avec PMD. gdc obtient une nouvelle compilation erreur:
/usr/include/d/core/stdc/stdarg.d:48:5: error: undefined identifier __va_list_tag
alias __va_list = __va_list_tag;
Notez que à l'heure actuelle la documentation dlang.org pour contract programming ne mentionne pas que corps, tandis que dépréciée probablement, fonctionne toujours, et il est nécessaire pour les versions de la DMD compilateur plus tôt que [version inconnue] et toutes les versions de gdc ou ldc qui utilisent un frontal dmd avant la version [version inconnue].
ldc (0.17.5) a fonctionné pour moi, en utilisant 'do' et non' body'. Et dmd (2.077.0) a également fonctionné, ce qui n'est pas une surprise. – Eljay