问题标签 [phobos]
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.
d - D 并联回路
一、D如何创建并行foreach(底层逻辑)?
其次,为什么它比简单的 foreach 慢?最后,如果我创建自己的 taskPool(并且不使用全局 taskPool 对象),程序永远不会结束。为什么?
d - 尝试安装 Tango+D2 但编译时错误符号未定义(窗口)
我尝试在 D2 中一起使用 Tango 和 Phobo,我从链接下载了包并按照它的安装过程进行操作。
但它只有Linux安装,没有Windows。
这就是我所做的。
- 已经安装了 Visual-D 和 DMD。关联
- 我将文件保存到 c:\Tango-D2-d2port
修改我的 C:\D\dmd2\windows\bin\sc.ini 如下
[版本] version=7.51 Build 020
; 32/64 位环境
[环境]
DFLAGS= -IC:\Tango-D2-d2port\ -L-LC:\Tango-D2-d2port\ "-I%@P%....\src\phobos" "-I%@P%... .\src\druntime\import"
; optlink 仅从 Environment 部分读取,因此我们需要这种冗余;来自 Environment32 部分(bugzilla 11302)
LIB="%@P%..\lib"
[环境32]
LIB="%@P%..\lib"
LINKCMD=%@P%\link.exe
[环境64]
LIB="%@P%..\lib64"
DFLAGS=%DFLAGS% -L/OPT:NOICF
LINKCMD=%VCINSTALLDIR%\bin\link.exe
我使用以下 shell 脚本文件编译我的代码,并使用 dmd2\windows\bin\shell.exe 执行。
DMD=C:\D\dmd2\windows\bin\dmd
DFLAGS=
$(DMD) Main.d -debug -L+C:\Tango-D2-d2port\libtango-dmd
我上面提到的安装页面的示例代码。
导入 tango.io.Stdout;
无效的主要()
{
}
错误信息。
外壳 1.05
C:\D\dmd2\windows\bin\dmd Main.d -debug -L+C:\Tango-D2-d2port\libtango-dmd
适用于 Win32 版本 8.00.12 的 OPTLINK (R)
版权所有 (C) Digital Mars 1989-2010 保留所有权利。
http://www.digitalmars.com/ctg/optlink.html
Main.obj(主)
错误 42:符号未定义 _D5tango2io6Stdout12__ModuleInfoZ
Main.obj(主)
错误 42:符号未定义 _D5tango2io6Stdout6StdoutC5tango2io6stream6Format20__T12FormatOutputTaZ12FormatOutput
Main.obj(主)
错误 42:符号未定义 _D5tango2io6stream6Format20__T12?Outp垿aZ?7newli唛FNdZC铜</p>
Main.obj(主)
错误42:符号未定义_D5tango2io6stream6Format20__T12?Outp垿aZ?5printMFYC酷</p>
--- 错误级别 4
我已经尝试了 1-2 周,这是我在查找了很多地方以供参考后能得到的最好的结果,但都是徒劳的。
pointers - 比较指向结构的指针以用于 Phobos 的二进制堆
我编写了一个名为 的结构Node
,并希望能够使用指向该结构的指针作为 Phobos 中的条目BinaryHeap
。但是,我不确定如何opEquals
以及如何opCmp
实现指向结构的指针(或者实际上,一般来说)。我无法在文档中找到任何可以帮助我的东西。谁能指出我正确的方向?
templates - 无法解析模板函数的类型
我正在尝试在 D 中编写一些非常简单的代码,但是我在使用其中一个标准库模板函数(特别是nextPermutation
from std.algorithm
)时遇到了一些问题。
我要做的关键是创建泛数字的所有排列(即,包括所有值 1 到 9 的数字恰好一次)。
为此,我做了以下工作:
这给了我错误:
错误:无法解析 nextPermutation 的类型!(初始)
我还尝试明确设置类型:
但是,这会给出一个错误,指出它无法匹配模板:
错误:模板实例 std.algorithm.nextPermutation!("a < b", char[]) 与模板声明不匹配 nextPermutation(alias less = "a < b", BidirectionalRange)(ref BidirectionalRange range) if (isBidirectionalRange!BidirectionalRange && hasSwappableElements!BidirectionalRange)
调用的正确形式是什么?
d - 确定性销毁容器拥有的对象(或如何将 Unique (std.typecons.Unique) 放入 D Phobos 容器中)?
我正在尝试实例化一个充满独特资源的容器,以确保当容器被销毁时,容器管理(拥有)的所有项目也立即自动被销毁。
以下(非唯一)代码按预期运行。请注意 Foo 对象在应用程序退出之前不会被销毁(GC 最终会回收它们)。暂时忽略 GC,通过在 DList 被销毁时不确定地销毁它们——在“退出范围”消息中——容器中的对象在应用程序的生命周期内有效地泄漏:
正如预期的那样,给出以下输出:
但是当我更新应用程序以使用 Unique's 时,事情就崩溃了:
上面的代码给出了以下输出:
注释掉 list.insertBack() 行可以消除总线错误 10。关于如何自动和确定性地销毁容器拥有的对象有什么想法吗?
regex - std.regex.regex 的返回值?
我正在尝试编写一个函数,该函数采用输入字符串、正则表达式(由原始字符串制成std.regex.regex
)和错误消息字符串,并尝试使用正则表达式匹配输入字符串中的某些内容,如果没有则显示错误消息火柴。到目前为止,我想出了以下签名:
但是,这似乎不起作用,因为编译器抱怨说:
那么我应该改用什么?
d - 表示 D 中的可选值
我即将编写一个解析器,将文本文件逐行读取到不同类型的结构中,并将这些结构提供给回调(观察者或访问者 - 尚不确定)。
文本文件包含 MT-940 数据 - SWIFT 银行对帐单。
这些行由一个指定类型的标记和一些字段(例如日期)组成,这些字段应该被解析为我的消息的类型安全成员。其中一些字段是可选的 - 所以我的问题是:如何在 D 中表示可选值。
C++ 提供了我的东西,比如你可能知道的 boost::optional。
我目前通过自己实现一个 Optional(T) 来解决这个问题(请参阅本文末尾的代码)。它是一个结构,其中包含一个可能为 null 的 ValueHolder 实例——这标志着没有赋值的情况。如有必要,我重写了 copy-c'tor 和赋值运算符以创建 ValueHolder 的深层副本。
这是要走的路吗?还有其他更简单的选项我看不到吗?
这是我的代码 - 功能不一定完整:
pointers - D:似乎无法创建 const struct 指针的 std.container.Array
假设我有一个 struct type Foo
。我正在尝试创建一个std.container.Array
指向Foo
. 我首先尝试了明显的:
但是,这会导致编译器错误。然后我用更少的括号尝试了它:
但这给出了同样的错误(error instantiating
显然)。我在这里做错了什么?
d - 从 D 中的标准输入读取单个字符
的文档std.stdio
没有列出可用于从标准输入中获取单个字符的函数read
,仅readln
用于获取一行。std.file
具有read
功能,但它需要一个文件名,据我所知,该文件名不适用于标准输入。
如何从 中读取单个字符stdin
?
constants - D:为什么 opIndex 在 std.container.Array 类中不是 const 限定的?
我最近想使用 std.container.Array 并继续创建一个具有 getter 成员函数的类,该函数从 Array 类返回一个值。我很快意识到我无法对我的 getter 进行 const 限定,因为 opIndex 是一个可变函数。
我尝试将源代码更改为 const-qualify Array.opIndex,它构建得很好。但是,std.algorithm 中的一些单元测试没有通过,抱怨 Array.opIndex 的返回值不是左值。
这是 Array.opIndex 的代码:
我在这里缺少什么吗?为什么它不是 const 限定的?