标签: gdc

DMD与GDC与LDC的比较

不同D编译器的优缺点是什么?性能和标准合规性/ D2如何支持?调试器的支持程度如何?错误消息有多好,IDE集成是什么?64位支持有多好?到目前为止我的想法:

DMD

  • 成熟且维护良好
  • 只有一个平台,64位支持并不好
  • 不是FOSS

GDC

  • 支持各种平台
  • 有非常成熟的优化,所以它很快?
  • 过时的运行时间?
  • GCC这么好的调试器支持?

LDC

  • 支持各种平台
  • LLVM,所以它支持JITing?
  • 有非常成熟的优化,所以它很快?
  • 保养得不是很好?
  • 过时的运行时间?

死了/不工作

  • SDC
  • MiniD - 非常,非常好,但不是D(但从未声称是)

我正在考虑针对ARM,我认为GDC是首选工具,但我不确定.

compiler-construction d dmd gdc

55
推荐指数
2
解决办法
1万
查看次数

什么库ld选项-lrt引用(Bionic libc)?

这个选项对ld意味着什么?

-lrt

我知道在某种程度上它意味着ld正在寻找具有实时扩展的库,但是在广泛搜索之后,我找不到这是指的确切定义(或哪个库).

使用Bionic(android)libc,android NDK文档详细说明了这个(以及pthreads)已经集成.

我问,因为它似乎是隐式的(即当我调用编译器时,直接调用自定义编译的gdc,我得到一条消息说ld找不到-lrt)

编辑

来自仿生概述

Bionic的C库附带了自己的pthread实现.这与其他历史C库不同:

- place it in an external library (-lpthread)
- play linker tricks with weak symbols at dynamic link time
Run Code Online (Sandbox Code Playgroud)

对实时功能(aka -lrt)的支持也捆绑在C库中.

问题是collect2将选项-lrt(以及-lpthreads)传递给ld.

dan@devbox:~/projects/gdc_test/jni/src$ $DC gdc_test.d -v -mthumb
Using built-in specs.
Target: arm-linux-androideabi
Configured with: /arm/ndk-git/src/build/../gcc/gcc-4.4.3/configure --prefix=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 --target=arm-linux-androideabi --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/arm/ndk-git/build_run/temp-install --with-mpfr=/arm/ndk-git/build_run/temp-install --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --enable-languages=c,d,c++ --enable-lto --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --enable-shared--prefix=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 --enable-initfini-array --disable-nls --prefix=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 --with-sysroot=/arm/ndk-git/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/sysroot --with-binutils-version=2.19 --with-mpfr-version=2.4.1 --with-gmp-version=4.2.4 --with-gcc-version=4.4.3 --with-gdb-version=6.6 --with-arch=armv5te --enable-libstdc__-v3 …
Run Code Online (Sandbox Code Playgroud)

c c++ android-ndk bionic gdc

34
推荐指数
3
解决办法
5万
查看次数

优雅的运算符在D中重载

有一段时间我对D'运算符重载的方向感到困惑,但现在我意识到它是一个漂亮的系统...如果它只适用于核心类型(int,float等).考虑以下代码:

struct Vector {
    float X, Y;

    void opOpAssign(string op)(Vector vector) {
        X.opOpAssign!op(vector.X); // ERROR: no property "opOpAssign" for float
        Y.opOpAssign!op(vector.Y); // ERROR: ditto
    }
}
Run Code Online (Sandbox Code Playgroud)

这将是漂亮的代码,如果它工作,看到它在一个方法中重载所有+ =, - =,*=等运算符.但是,正如您所看到的,它不是开箱即用的.我用模板创建了一个解决方案(上帝,我爱D):

template Op(string op, T) {
    void Assign(ref T a, T b) {
        static if (op == "+") a += b;
          else if (op == "-") a -= b;
          else if (op == "*") a *= b;
          else if (op == "/") a /= b;
    }
}

struct Vector {
    float …
Run Code Online (Sandbox Code Playgroud)

d operator-overloading dmd gdc

19
推荐指数
2
解决办法
2163
查看次数

哪个D编译器可以使用?

我想尝试D,但我不太确定使用什么编译器.我在这个主题上找到了一些文章和SO问题,但我没有找到任何最新的文章.

每个编译器有什么好处,有什么缺点?现在DMD编译器对我来说似乎是最好的,但我可能会被过时的信息误导.

compiler-construction d dmd gdc

14
推荐指数
2
解决办法
4318
查看次数

D中的扩展函数

不久前我买了"D编程语言".好书,很有教育意义.但是,我在编写本书中列出的语言功能时遇到了麻烦:扩展功能.

在书中,Andrei写道任何函数(a,b)都可以调用,如:a.function(b); 所以我应该能够做到这一点:

struct Person {
    string name;
}

void foo(Person person, string name) {
    person.name = name;
}

void main() {
    auto bob = Person();
    bob.foo("Bob Dole");  // ERROR: Person does not have method 'foo'
}
Run Code Online (Sandbox Code Playgroud)

正确?这个功能还没有实现,或者我只是遗漏了什么?我注意到导入std.range会向数组添加方法,因此它似乎在某种程度上实现.

d dmd gdc

12
推荐指数
2
解决办法
339
查看次数

在GDC和DMD之间进行选择

我是D新编程的新手.选择DMD(2.061)或GDC(4.6,4.7或4.8,快照)的优缺点是什么.我应该选择哪种GDC版本?我已成功构建了GCC-4.8和GDC-4.8的最新快照,并编译了一个hello world程序.

以下是我对专业人士的看法:

  • GDC:更多平台,运行时性能
  • DMD:编译性能,更多测试?

如何通过GDB调试支持 - GDC和DMD之间有什么不同?

debugging d version dmd gdc

10
推荐指数
1
解决办法
1349
查看次数

使用D编程语言来修复api

我试图用神经网络教自己AI.简而言之,我想创建一个简单的图形,使用ncurses显示我的程序中发生的事情.我正在使用的教程可以在这里找到.

我的印象是D与C兼容,理论上我可以相对容易地调用C函数.

我发现事实并非如此.我是一个相对新手的程序员,所以即使是简单的解释也有点高于我的头脑.我在这里找到了这个.

D旨在与目标系统的C编译器舒适地配合.D通过依赖目标环境的C运行时库来弥补没有自己的VM.尝试移植到D或为大量可用的C API编写D包装器将是毫无意义的.直接调用它们要容易多少.

这是通过匹配C编译器的数据类型,布局和函数调用/返回序列来完成的.

听起来很棒.有点过头了.我测试了一个简单的C程序:

#include <curses.h>

int main(void) {
    int ch;

    initscr();
    noecho();
    cbreak();
    printw("Hit Ctrl+C to exit ...\n\n");
    for (;;) {
      ch = getch();
      printw("Value of char: %d (%02x)\n", ch, ch);
    }
    endwin();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

从SO上的另一个问题无耻地复制和粘贴.至少我做了我的作业.

我从一个简单的D程序尝试了基本相同的东西.我收到了这个错误:

Error: module curses is in file 'curses.d' which cannot be read
Run Code Online (Sandbox Code Playgroud)

我绝对肯定我正在尝试一些非常愚蠢的事情.

有一种简单的方法在D程序中使用ncurses吗?

我正在零睡眠和咖啡因,所以请温柔!即使是链接到网站也将非常感谢!

我可能没有包括我应该拥有的所有东西,所以AMA.

随意侮辱我的智慧.

c linker d ncurses gdc

9
推荐指数
2
解决办法
1721
查看次数

crtbegin_so.o缺少android工具链(自定义构建)

我使用android build-gcc.sh脚本与gcc一起编译了gdc,并在build/core/definitions.mk中包含了一个新的存根来处理D语言文件,作为构建过程的一部分.我知道事情正在编译好,但我的问题是链接:

当我构建项目时,我收到此错误:

ld: crtbegin_so.o: No such file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

对于常规的仅限c的项目也是如此.现在我在构建目录中运行了一个快速查找,发现文件(crtbegin_so.o)确实存在于我编译gcc时指定的sysroot中(或者更确切地说,当build-gcc.sh构建它时).

  • 有什么东西我可以寻找找到这个问题的解决方案?

  • 在本地复制文件并直接链接到它们是一个不错的解决方案吗?

  • 为什么ld(或collect2)会尝试将这些包含在gdc(D语言)链接中?

gcc android-ndk gdc

7
推荐指数
2
解决办法
1万
查看次数

D表现:联盟vs @property

我正在将我们的统治SDK移植,增强和D-atizing 从C#到D.目前正在处理Vector2数学模块.

以下两种结构之间是否会有任何性能差异?我的基准测试表现出相同的性能,但我想获得一些专家见解:)

struct Vector2(T)
{
    T x, y;
    @property T u() { return x; }
    @property T v() { return y; }
    @property void u(T value) { x = value; }
    @property void v(T value) { y = value; }
}

struct Vector2(T)
{
    union { T x, u; }
    union { T y, v; }
}
Run Code Online (Sandbox Code Playgroud)

显然,我想使用工会来实现语法简洁.但使用它们有任何不可预见的陷阱吗?我不熟悉他们的低级细节.

另外,我正在添加类似于HLSL/GLSL的vector属性语法,例如,vec1.yxz + = vec2.xyz; 有......没有..可能的方式与工会而不是@property这样做?

benchmarking d dmd gdc

7
推荐指数
1
解决办法
219
查看次数

D2 gdc链接错误 - 未定义对`_D3std6stdint12__ModuleInfoZ的引用

我正在使用https://bitbucket.org/goshawk/gdc/downloads/gcc-4.5.2-tdm-1-gdc-r575-20110723.zip与TDM GCC 4.5.2 in -v2模式来构建DLL.在我做的其中一个模块中import std.stdint.所以我认为我应该链接libgphobos2来解决这个问题,但它给了我更多的错误:

c:/mingw32/bin/../lib/gcc/mingw32/4.5.2/../../../libgphobos2.a(thread.o): In function `D4core6thread6Thread6__ctorMFZC4core6thread6Thread':
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:1363: undefined reference to `__emutls_v._tlsstart'
c:/mingw32/bin/../lib/gcc/mingw32/4.5.2/../../../libgphobos2.a(thread.o): In function `thread_entryPoint@4':
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:173: undefined reference to `__emutls_v._tlsend'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:173: undefined reference to `__emutls_v._tlsstart'
C:\crossdev\gdc\v2\build\mingw32\libphobos/../../../gcc-4.5.2/libphobos/core/thread.d:173: undefined reference to `__emutls_v._tlsstart'
c:/mingw32/bin/../lib/gcc/mingw32/4.5.2/../../../libgphobos2.a(thread.o): In …
Run Code Online (Sandbox Code Playgroud)

d undefined-reference gdc

6
推荐指数
1
解决办法
1179
查看次数