Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ldc和gdc是否支持D语言合同?_D_Dmd_Gdc_Ldc - Fatal编程技术网

ldc和gdc是否支持D语言合同?

ldc和gdc是否支持D语言合同?,d,dmd,gdc,ldc,D,Dmd,Gdc,Ldc,此代码包含一个合同: 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 ",Tes

此代码包含一个合同:

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-dirty)编译和运行,但不使用ldc(0.17.1)或gdc(5.4.0 20160609)

最不发达国家说:

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
 }
编辑:使用“body”而不是“do”进行编译,根据ldc的回答,编译成功。gdc获取一个新的编译错误:

/usr/include/d/core/stdc/stdarg.d:48:5: error: undefined identifier __va_list_tag
     alias __va_list = __va_list_tag;

请注意,目前的dlang.org文档中没有提到body,虽然可能已弃用,但仍然有效,并且对于早于[unknown version]的dmd编译器版本以及在[unknown version]之前使用dmd前端的任何gdc或ldc版本都是必需的。

使用
body
,不
do
。允许
do
而不是
body
是最近的事情(我甚至不知道这个更改已经被接受,尽管它是用当前的dmd编译的,所以我猜是这样)


dmd、ldc和gdc都共享同一个前端,但它们的版本不同。即使您使用的是最新的ldc,它也至少比dmd落后一个,也许是两个版本,除非您使用的是gdc的开发版本,否则它目前远远落后(它的IIRC为2.068,而DMD2.077.0目前处于测试阶段),尽管下一个版本最终应该与dmd相当接近(从C++到D的前端切换导致了它们的主要延迟)。

< P>使用代码>正文< /C> >,而不是<代码> do/COD>。允许<代码> do>代码>代替<代码>正文是一个很新的事情(我不知道这个改变甚至被接受,虽然它与当前DMD编译,所以我猜是这样)。< /P>
dmd、ldc和gdc都共享同一个前端,但它们的版本并不都相同。即使您使用的是最新的ldc,它也至少有一个,也许有两个版本落后于dmd,而且除非您使用的是gdc的开发版本,否则它目前远远落后(IIRC为2.068,而DMD2.077.0目前处于测试阶段)虽然下一个版本的发行版本应该相当接近DMD(前端交换机从C++到D导致了它们的主要延迟).

是的,ldc和gdc都支持合同。这是最近的一次语言更改-将合同中的
do
替换为
body
,并进行编译。您应该始终注意,您使用的是相同的D前端版本。
ldc
显示为
ldc2--version

是的,ldc和gdc都支持端口合同。这是最近的一次语言更改-将合同中的
do
替换为
body
,然后进行编译。您应该始终注意,您使用的是相同的D前端版本。
ldc
显示为
ldc2--version

谢谢。他们可能应该在文档p上显示body年龄-“23.合同编程”LDC可以处理body,GDC得到了一个关于uu va_list_tag的新错误一个不喜欢使用
body
的人,当切换到
do
并远离
body
成为关键字的DIP被接受时,可能会急切地更新文档。我不知道GDC为什么会失败,但正如我所说的,除非你使用de开发版本,相当旧。gdc(5.4.0 20160609)。此版本号表示您使用的是gdcproject.org的二进制版本?那么druntime源代码不应位于
/usr/include/d/core/stdc/stdarg.d
中,并且可能属于LDC或DMD。GDC始终在
/usr/include/d
中搜索其他d文件,因此您不应放置编译器特定的include文件(druntime,phobos)在那里。@jpf我正在Ubuntu 16.04上使用一个GDC,它来自通过Synaptic下载的GDC-5软件包。谢谢。它们可能应该在文档页面上显示正文-“23.合同编程”LDC可以处理body,GDC得到了一个关于uu va_list_tag的新错误一个不喜欢使用
body
的人,当切换到
do
并远离
body
成为关键字的DIP被接受时,可能会急切地更新文档。我不知道GDC为什么会失败,但正如我所说的,除非你使用de开发版本,相当旧。gdc(5.4.0 20160609)。此版本号表示您使用的是gdcproject.org的二进制版本?那么druntime源代码不应位于
/usr/include/d/core/stdc/stdarg.d
中,并且可能属于LDC或DMD。GDC始终在
/usr/include/d
中搜索其他d文件,因此您不应放置编译器特定的include文件(druntime,phobos)在那里。@jpf我在Ubuntu 16.04上使用一个GDC,它来自通过Synaptic下载的GDC-5软件包。它与LDC一起工作,但我在GDC(5.4.0 20160609)中遇到了一个不同的错误。我本应该尝试body,但“23.合同编程”只显示“do”。我认为“body”应重新添加。更改的原因如下:。我同意文档中应提及已弃用的
body
关键字。这对LDC有效,但我在gdc(5.4.0 20160609)中遇到不同的错误。本应尝试body,但“23.合同编程”仅显示“do”。我认为“body”应该添加回来。更改的原因如下:。我同意文档中应该提到不推荐使用的
body
关键字。ldc(0.17.5)对我有效,使用
do
和not
body
。dmd(2.077.0)也有效,这并不奇怪。ldc(0.17.5)对我来说,使用
do
和not
body
,dmd(2.077.0)也很有效,这并不奇怪。