如何在D,C和C++等语言中使用内联x86汇编程序实现alloca()?我想创建一个稍微修改过的版本,但首先我需要知道标准版本是如何实现的.从编译器中读取反汇编并没有帮助,因为它们执行了很多优化,我只想要规范形式.
编辑:我想困难的部分是我希望它具有正常的函数调用语法,即使用裸函数或其他东西,使它看起来像普通的alloca().
编辑#2:啊,到底是什么,你可以假设我们没有省略帧指针.
外部资源(如std::vector<T>
或std::string
)的"值类型"问题是复制它们往往非常昂贵,并且副本是在各种上下文中隐式创建的,因此这往往是性能问题.C++ 0x对这个问题的回答是移动语义,它在概念上基于资源窃取的思想,并且由rvalue引用技术驱动.
D是否有类似于移动语义或右值引用的东西?
我应该何时将类型定义为结构或类?
我知道struct是值类型,而类是引用类型.所以我想知道,例如,我应该将堆栈定义为结构还是类?
我有gvim 7.2,它识别.d文件并根据D编程语言的语法正确突出显示.但是,.di文件无法识别为D文件,并且不存在突出显示.
如何让vim根据D语言突出显示.di文件?
我希望向D编程语言标准库提交一个补丁,它将允许在编译时使用该语言的编译时功能评估工具评估大部分std.math.编译时功能评估有几个局限性,最重要的是:
有几个std.math函数违反了这些函数,需要编写编译时版本.我在哪里可以获得有关计算诸如对数,指数,幂和三角函数等优良算法的信息?我更喜欢算法的高级描述和实际代码,原因有两个:
为避免法律含糊不清,需要让我的代码看起来与源代码"不同",以确保我拥有版权.
我想要简单,便携的算法.我不关心微优化,只要它们至少是渐近有效的.
编辑: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,我想知道我应该使用哪个标准库.我应该使用Phobos还是Tango?各自的优点和缺点是什么?
我认为Erlang风格的并发性是核心数量呈指数级增长的答案.你可以用其他主流语言伪造它.但解决方案总是让我失望.我不愿意放弃多范式编程(C++/D)来切换到Erlang的严苛语法.
什么是Erlang风格的并发:
来自其中一位语言作者(究竟什么是Erlang的并发模型?):
或者来自知情的博主(什么是Erlang风格的并发?):
我认为D的消息传递可以完成大部分功能.我想知道的是" >> 10,000个并发进程(线程) "和" 快速进程创建/销毁 ".
D如何处理这些要求?
我认为要正确支持它们,你必须使用绿色线程.可以将D的消息传递功能与绿色线程库一起使用吗?
C++的一个问题是我们从密集使用模板和模板元编程的代码中获得的可怕错误消息.这些概念旨在解决这个问题,但遗憾的是它们不会出现在下一个标准中.
我想知道,这个问题是否适用于支持通用编程的所有语言?或者C++模板出了什么问题?
不幸的是,我不知道任何其他支持泛型编程的语言(Java和C#泛型太简单了,没有C++模板那么强大).
所以我问你们:D,Ada,Eiffel模板(仿制药)是否也会产生如此丑陋的错误消息?是否可以使用具有强大通用编程范例的语言,但没有丑陋的错误消息?如果是,这些语言如何解决这个问题?
编辑:为downvoters.我真的很喜欢C++和模板.我不是说模板很糟糕.实际上我是泛型编程和模板元编程的忠实粉丝.我只是问为什么我从编译器那里收到如此丑陋的错误信息.
我正在学习D并且已经看到了很多像这样的代码:
ushort x = to!ushort(args[1]);
Run Code Online (Sandbox Code Playgroud)
我认为这蒙上args[1]
到ushort
,但是这是什么之间的区别cast(ushort)
?
编辑:感叹号运算符还有其他用途吗?