问题标签 [d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - memchr() 如何在后台工作?
背景: 我正在尝试创建一个纯 D 语言实现的功能,它大致相当于C 的 memchr,但使用数组和索引而不是指针。原因是 std.string 将与编译时函数评估一起使用。对于那些不熟悉 w/D 的人,如果满足某些限制,可以在编译时评估函数。一个限制是它们不能使用指针。另一个是他们不能调用 C 函数或使用内联汇编语言。在编译时让字符串库工作对于一些编译时代码生成黑客很有用。
问题: memchr 是如何在幕后工作的,以实现如此快速的性能?在 Win32 上,我能够使用简单循环在纯 D 中创建的任何内容都至少慢 2 倍,即使使用明显的优化技术,例如禁用边界检查、循环展开等。有哪些不明显的技巧可用于像在字符串中查找字符一样简单?
.net - 在 .NET 上下文中使用 D 编程语言
我很好奇:有人将 D 与 .NET 语言一起使用吗?这甚至可能吗?什么样的东西在 D 中更容易/更有意义,而在 C++/CLI 中很难做到?
arrays - D 编程语言 char 数组
这听起来可能很愚蠢。但我对 D 编程语言有一个奇怪的问题。当我尝试像这样创建一个新数组时:
DMD 编译器总是给我这个错误:
test.d(5):错误:无法将不变量(char[5u])类型的表达式(“值”)隐式转换为 char[]
知道为什么吗?我正在为 Ubuntu 使用 2.014 alpha(可在此处获得)。
d - D 编程语言 IRC 库
嘿,我正在寻找一个 D IRC 库。是的,我知道有dirclib,但不幸的是,这个似乎与该语言的版本 1 或 2 不兼容(不再)。当我尝试将它与 Ubuntu 的 2.014 alpha 一起使用时,它会引发几个错误。
你有什么想法/建议吗?
performance - 如何并行化小的纯函数?
我有 D2 程序,在其当前形式下,它是单线程的,并且对于该程序的外循环的每次迭代,在内循环中调用相同的纯函数大约 10 到 100 次。调用之间没有数据依赖关系,即没有调用使用来自任何其他调用的结果。总的来说,这个函数被调用了数百万次,是我程序的主要瓶颈。参数几乎每次都是唯一的,因此缓存无济于事。
乍一看,这似乎是并行化的完美候选者。唯一的问题是该函数每次调用只需要大约 3 微秒,远低于创建新线程的延迟,并且不高于将作业添加到任务池的开销(意思是,获取互斥体,分配内存到保存有关任务的信息,处理可能的任务池队列争用等)。有没有什么好的方法可以利用这种细粒度的并行性?
optimization - D中的常量与枚举
从此处查看此报价,位于页面底部。(我相信引用的关于const
s 的评论也适用于invariant
s)
枚举与 const 的不同之处在于它们不会占用最终输出的对象/库/可执行文件中的任何空间,而 const 会。
所以显然value1
会使可执行文件膨胀,而value2
被视为文字并且不会出现在目标文件中。
回到 C++ 中,我一直认为这是由于遗留原因,以及无法优化常量的旧编译器。但如果这在 D 中仍然成立,那么这背后一定有更深层次的原因。有谁知道为什么?
null - 关于不可为空类型的争论
我不断听到人们谈论不可为空的引用类型如何解决如此多的错误并使编程变得如此容易。甚至 null 的创建者也称其为十亿美元的错误,并且Spec#引入了不可为 null 的类型来解决这个问题。
编辑:忽略我对 Spec# 的评论。我误解了它是如何工作的。
编辑2:我一定是在和错误的人说话,我真的希望有人与之争论:-)
所以我猜,作为少数派,我错了,但我不明白为什么这场辩论有任何价值。我认为 null 是一种查找错误的工具。考虑以下:
砰!访问冲突。有人忘记初始化了c
。
现在考虑一下:
哎呀。循环被静默地跳过。可能需要一段时间才能找到问题所在。
如果你的类是空的,那么代码无论如何都会失败。为什么不让系统告诉你(尽管有点粗鲁),而不必自己弄清楚呢?
matrix - D 编程语言的线性代数库
我正在寻找一个包来做矩阵数学高达大约 100 x 100 的矩阵。
我至少需要做逆运算、乘法运算和转置运算。我更喜欢更封装的接口而不是更高的性能。
file-io - 独立于平台的文件锁定?
我正在执行一项计算量非常大的科学工作,时不时地吐出结果。这项工作基本上只是模拟同一件事一大堆时间,所以它被分配给几台使用不同操作系统的计算机。我想将所有这些实例的输出定向到同一个文件,因为所有计算机都可以通过 NFS/Samba 看到同一个文件系统。以下是约束:
- 必须允许安全的并发追加。如果另一台计算机上的其他实例当前正在附加到文件,则必须阻止。
- 性能不算。每个实例的 I/O 每分钟只有几个字节。
- 简单确实很重要。这样做的全部意义(除了纯粹的好奇心)是这样我就可以停止让每个实例写入不同的文件并手动将这些文件合并在一起。
- 不能依赖于文件系统的细节。必须在 NFS 或 Samba 挂载上使用未知文件系统。
我使用的语言是 D,以防万一。我看过,标准库中似乎没有任何东西可以做到这一点。特定于 D 的和一般的、与语言无关的答案都是完全可以接受和赞赏的。