当使用具有try/catch/finally的语言时,D的失败/成功/退出范围语句是否仍然有用?D似乎没有最终可以解释为什么在D中使用这些语句.但是使用像C#这样的语言是否有用?我正在设计一种语言,所以如果我看到很多专业人士,我会加入它.
今天我听说过D编程,它与C代码兼容.不过我还没有找到任何关于是否可以使用D的GT库或PortAudio等C库的信息?如果有可能,你能解释一下如何做到这一点吗?
我一直想知道:根据定义,不ptrdiff_t应该能够保持任何两个指针的差异吗?当两个指针太远时怎么会失败呢?(我没有指出任何特定语言......我指的是所有具有此类型的语言.)
(例如1,0xFFFFFFFF当你有32位指针时,从带有地址的字节指针中减去带有地址的指针,它会溢出符号位...)
我习惯了C++ STL容器.D有数组,关联数组和字符串,但其余部分在哪里?我知道std.container,但据我所知它只有一个容器,红黑树,如果我需要类似的东西,我可以使用它std::set.但是,如果我需要一个list怎么办?我应该使用数组吗?
std::vector - > array
std::deque - > ?
std::queue - > ?
std::stack - > ? maybe array and std.container functions ?
std::priority_queue - > BinaryHeap
std::list - > ?
std::set - > std.container RedBlackTree
std::multiset - > ?
std::unordered_set - > ?
std::map - > associative arrays
std::multimap - > ?
std::unordered_map - > ?
有没有计划支持任何失踪人员?
这是一个C++/D交叉问题.的d的编程语言具有范围件是在对比到C++库如Boost.Range -不是基于迭代器对.官方的C++ Ranges Study Group似乎陷入了制定技术规范的困境.
问题:当前的C++ 11或即将推出的C++ 14标准是否有任何阻碍采用D范围的障碍 - 以及<algorithm>- 批发的适当范围版本?
我不太了解D或它的范围,但它们似乎是懒惰和可组合的,并且能够提供STL算法的超集.鉴于他们声称D的成功,作为C++库可能会非常好.我想知道D的独特功能(例如字符串mixins,统一函数调用语法)是如何实现其范围的,以及C++是否可以模仿而不需要太多努力(例如C++ 14 constexpr看起来与D编译时功能评估非常相似)
注意:我正在寻求技术答案,而不是D系列作为C++库的正确设计.
目前是否可以跨模块扫描/查询/迭代所有具有某些属性的函数(或类)?
例如:
source/packageA/something.d:
@sillyWalk(10)
void doSomething()
{
}
Run Code Online (Sandbox Code Playgroud)
source/packageB/anotherThing.d:
@sillyWalk(50)
void anotherThing()
{
}
Run Code Online (Sandbox Code Playgroud)
source/main.d:
void main()
{
for (func; /* All @sillWalk ... */) {
...
}
}
Run Code Online (Sandbox Code Playgroud) 所以我正在阅读Walter Bright关于Bitwise D语言的采访(http://www.bitwisemag.com/copy/programming/d/interview/d_programming_language.html),我看到了这个非常有趣的关于语言的引用解析:
然而,从理论角度来看,能够生成良好的诊断要求语法中存在冗余.冗余用于猜测预期的内容,冗余越多,猜测的可能性就越大.它就像英语一样 - 如果我们偶尔拼写错误,或者如果一个单词缺失,冗余使我们能够正确地猜出其含义.如果语言中没有冗余,则任何随机字符序列都是有效的程序.
而现在我正试图弄清楚当他说"冗余"时他意味着什么.
我几乎无法绕过最后一部分,在那里他提到可以使用一种语言,其中"任何随机的字符序列都是有效的程序".我被告知有三种错误:句法,运行时和语义.是否存在唯一可能的错误是语义的语言?这样的集会吗?机器代码怎么样?
为什么Phobos enum用来定义常量?例如,在std.math中:
enum real E = 2.7182818284590452354L;
Run Code Online (Sandbox Code Playgroud)
为什么不使用全球immutable?有什么优势/劣势enum了immutable?
我是D编程语言的新手,刚开始阅读D编程语言书.
尝试一个关联数组示例代码时遇到错误
#!/usr/bin/rdmd
import std.stdio, std.string;
void main() {
uint[string] dict;
foreach (line; stdin.byLine()) {
foreach (word; splitter(strip(line))) {
if (word in dict) continue;
auto newId = dict.length;
dict[word] = newId;
writeln(newId, '\t', word);
}
}
}
Run Code Online (Sandbox Code Playgroud)
DMD显示此错误消息:
./vocab.d(11):错误:关联数组只能用不可变键赋值,而不是char []
我正在使用DMD编译2.051
我猜测关联数组的规则自TDPL书以来已经发生了变化.
我应该如何使用带有字符串键的关联数组?
谢谢.
更新:
我在本书的后半部分找到了解决方案.
在放入数组之前使用string.idup创建重复的不可变值.
所以
dict[word.idup] = newId;
Run Code Online (Sandbox Code Playgroud)
会做的.
但这有效吗?
我已经阅读了解释如何从D解释C++的文档:http://dlang.org/cpp_interface.html.然而,有一些事情对我来说并不十分清楚.
以D网站上提供的示例为例:
#include <iostream>
using namespace std;
class D {
public:
virtual int bar(int i, int j, int k)
{
cout << "i = " << i << endl;
cout << "j = " << j << endl;
cout << "k = " << k << endl;
return 8;
}
};
D *getD() {
D *d = new D();
return d;
}
Run Code Online (Sandbox Code Playgroud)
然后可以从D调用C++类,如下所示:
extern (C++) {
interface D {
int bar(int i, int j, int k); …Run Code Online (Sandbox Code Playgroud)