标签: d

Alloca实施

如何在D,C和C++等语言中使用内联x86汇编程序实现alloca()?我想创建一个稍微修改过的版本,但首先我需要知道标准版本是如何实现的.从编译器中读取反汇编并没有帮助,因为它们执行了很多优化,我只想要规范形式.

编辑:我想困难的部分是我希望它具有正常的函数调用语法,即使用裸函数或其他东西,使它看起来像普通的alloca().

编辑#2:啊,到底是什么,你可以假设我们没有省略帧指针.

c c++ assembly memory-management d

28
推荐指数
4
解决办法
8771
查看次数

D有类似于C++ 0x的移动语义吗?

外部资源(如std::vector<T>std::string)的"值类型"问题是复制它们往往非常昂贵,并且副本是在各种上下文中隐式创建的,因此这往往是性能问题.C++ 0x对这个问题的回答是移动语义,它在概念上基于资源窃取的思想,并且由rvalue引用技术驱动.

D是否有类似于移动语义或右值引用的东西?

c++ d rvalue-reference move-semantics c++11

28
推荐指数
1
解决办法
2969
查看次数

D语言中结构和类之间的使用偏好

我应该何时将类型定义为结构或类?

我知道struct是值类型,而类是引用类型.所以我想知道,例如,我应该将堆栈定义为结构还是类?

d

28
推荐指数
2
解决办法
3852
查看次数

vim:将扩展名与语言相关联

我有gvim 7.2,它识别.d文件并根据D编程语言的语法正确突出显示.但是,.di文件无法识别为D文件,并且不存在突出显示.

如何让vim根据D语言突出显示.di文件?

vim d syntax-highlighting

27
推荐指数
1
解决办法
6540
查看次数

在哪里可以找到标准数学函数的算法?

我希望向D编程语言标准库提交一个补丁,它将允许在编译时使用该语言的编译时功能评估工具评估大部分std.math.编译时功能评估有几个局限性,最重要的是:

  1. 您不能使用汇编语言.
  2. 您无法调用源代码不可用的C代码或代码.

有几个std.math函数违反了这些函数,需要编写编译时版本.我在哪里可以获得有关计算诸如对数,指数,幂和三角函数等优良算法的信息?我更喜欢算法的高级描述和实际代码,原因有两个:

  1. 为避免法律含糊不清,需要让我的代码看起来与源代码"不同",以确保我拥有版权.

  2. 我想要简单,便携的算法.我不关心微优化,只要它们至少是渐近有效的.

编辑:D的编译时函数评估模型允许在编译时计算的浮点结果与运行时计算的浮点结果不同,所以我不在乎我的编译时算法是否提供与运行时版本完全相同的结果只要它们在实际上并不那么准确.

algorithm math d reference standard-library

27
推荐指数
4
解决办法
6278
查看次数

什么是D编程语言中的"收益率"等价物?

这是C#中的一个简单生成器.

    IEnumerable<int> Foo()
    {
        int a = 1, b = 1;
        while(true)
        {
            yield return b;
            int temp = a + b;
            a = b;
            b = temp;
        }
    }
Run Code Online (Sandbox Code Playgroud)

如何在Digital Mars D中编写类似的发生器?

(问题是关于收益率报表)

谢谢!


更新.那很有意思.由于我只是生成一个数学序列,因此使用递归可能是一个不错的选择.

auto fib = recurrence!("a[n-1] + a[n-2]")(1, 1);

foreach (e; take(fib, 10)) // <- prints first ten numbers from the sequence
{ 
    writeln(e); 
}
Run Code Online (Sandbox Code Playgroud)

d dmd

26
推荐指数
3
解决办法
2724
查看次数

我应该使用Phobos还是Tango?

我决定学习D,我想知道我应该使用哪个标准库.我应该使用Phobos还是Tango?各自的优点和缺点是什么?

d tango phobos

25
推荐指数
6
解决办法
3892
查看次数

D编程语言中的Erlang风格并发

我认为Erlang风格的并发性是核心数量呈指数级增长的答案.你可以用其他主流语言伪造它.但解决方案总是让我失望.我不愿意放弃多范式编程(C++/D)来切换到Erlang的严苛语法.

什么是Erlang风格的并发:

来自其中一位语言作者(究竟什么是Erlang的并发模型?):

  • 轻量级并发.
    便宜的创建线程和廉价来维持疯狂的数字.
  • 异步通信.
    线程仅通过消息进行通信.
  • 错误处理.
  • 过程隔离.

或者来自知情的博主(什么是Erlang风格的并发?):

  • 快速创建/销毁流程
  • 能够支持>> 10 000个并发过程,特征基本不变.
  • 快速异步消息传递.
  • 复制消息传递语义(无共享并发).
  • 过程监控.
  • 选择性的消息接收.

我认为D的消息传递可以完成大部分功能.我想知道的是" >> 10,000个并发进程(线程) "和" 快速进程创建/销毁 ".

D如何处理这些要求?

我认为要正确支持它们,你必须使用绿色线程.可以将D的消息传递功能与绿色线程库一起使用吗?

concurrency erlang d

25
推荐指数
2
解决办法
3680
查看次数

C++与D,Ada和Eiffel(模板的可怕错误消息)

C++的一个问题是我们从密集使用模板和模板元编程的代码中获得的可怕错误消息.这些概念旨在解决这个问题,但遗憾的是它们不会出现在下一个标准中.

我想知道,这个问题是否适用于支持通用编程的所有语言?或者C++模板出了什么问题?

不幸的是,我不知道任何其他支持泛型编程的语言(Java和C#泛型太简单了,没有C++模板那么强大).

所以我问你们:D,Ada,Eiffel模板(仿制药)是否也会产生如此丑陋的错误消息?是否可以使用具有强大通用编程范例的语言,但没有丑陋的错误消息?如果是,这些语言如何解决这个问题?

编辑:为downvoters.我真的很喜欢C++和模板.我不是说模板很糟糕.实际上我是泛型编程和模板元编程的忠实粉丝.我只是问为什么我从编译器那里收到如此丑陋的错误信息.

c++ templates d ada generic-programming

25
推荐指数
5
解决办法
3714
查看次数

感叹号运营商?

我正在学习D并且已经看到了很多像这样的代码:

ushort x = to!ushort(args[1]);
Run Code Online (Sandbox Code Playgroud)

我认为这蒙上args[1]ushort,但是这是什么之间的区别cast(ushort)

编辑:感叹号运算符还有其他用途吗?

d operators

25
推荐指数
1
解决办法
3225
查看次数