问题标签 [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.

0 投票
1 回答
388 浏览

d - D 并联回路

一、D如何创建并行foreach(底层逻辑)?

其次,为什么它比简单的 foreach 慢?最后,如果我创建自己的 taskPool(并且不使用全局 taskPool 对象),程序永远不会结束。为什么?

0 投票
1 回答
133 浏览

d - 尝试安装 Tango+D2 但编译时错误符号未定义(窗口)

我尝试在 D2 中一起使用 Tango 和 Phobo,我从链接下载了包并按照它的安装过程进行操作。

但它只有Linux安装,没有Windows。

这就是我所做的。

  1. 已经安装了 Visual-D 和 DMD。关联
  2. 我将文件保存到 c:\Tango-D2-d2port
  3. 修改我的 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

  4. 我使用以下 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

  5. 我上面提到的安装页面的示例代码。

    导入 tango.io.Stdout;

    无效的主要()

    {

    }

  6. 错误信息。

    外壳 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 周,这是我在查找了很多地方以供参考后能得到的最好的结果,但都是徒劳的。

0 投票
1 回答
102 浏览

pointers - 比较指向结构的指针以用于 Phobos 的二进制堆

我编写了一个名为 的结构Node,并希望能够使用指向该结构的指针作为 Phobos 中的条目BinaryHeap。但是,我不确定如何opEquals以及如何opCmp实现指向结构的指针(或者实际上,一般来说)。我无法在文档中找到任何可以帮助我的东西。谁能指出我正确的方向?

0 投票
1 回答
758 浏览

templates - 无法解析模板函数的类型

我正在尝试在 D 中编写一些非常简单的代码,但是我在使用其中一个标准库模板函数(特别是nextPermutationfrom 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)

调用的正确形式是什么?

0 投票
1 回答
56 浏览

d - 确定性销毁容器拥有的对象(或如何将 Unique (std.typecons.Unique) 放入 D Phobos 容器中)?

我正在尝试实例化一个充满独特资源的容器,以确保当容器被销毁时,容器管理(拥有)的所有项目也立即自动被销毁。

以下(非唯一)代码按预期运行。请注意 Foo 对象在应用程序退出之前不会被销毁(GC 最终会回收它们)。暂时忽略 GC,通过在 DList 被销毁时不确定地销毁它们——在“退出范围”消息中——容器中的对象在应用程序的生命周期内有效地泄漏:

正如预期的那样,给出以下输出:

但是当我更新应用程序以使用 Unique's 时,事情就崩溃了:

上面的代码给出了以下输出:

注释掉 list.insertBack() 行可以消除总线错误 10。关于如何自动和确定性地销毁容器拥有的对象有什么想法吗?

0 投票
1 回答
77 浏览

regex - std.regex.regex 的返回值?

我正在尝试编写一个函数,该函数采用输入字符串、正则表达式(由原始字符串制成std.regex.regex)和错误消息字符串,并尝试使用正则表达式匹配输入字符串中的某些内容,如果没有则显示错误消息火柴。到目前为止,我想出了以下签名:

但是,这似乎不起作用,因为编译器抱怨说:

那么我应该改用什么?

0 投票
1 回答
259 浏览

d - 表示 D 中的可选值

我即将编写一个解析器,将文本文件逐行读取到不同类型的结构中,并将这些结构提供给回调(观察者或访问者 - 尚不确定)。

文本文件包含 MT-940 数据 - SWIFT 银行对帐单。

这些行由一个指定类型的标记和一些字段(例如日期)组成,这些字段应该被解析为我的消息的类型安全成员。其中一些字段是可选的 - 所以我的问题是:如何在 D 中表示可选值。

C++ 提供了我的东西,比如你可能知道的 boost::optional。

我目前通过自己实现一个 Optional(T) 来解决这个问题(请参阅本文末尾的代码)。它是一个结构,其中包含一个可能为 null 的 ValueHolder 实例——这标志着没有赋值的情况。如有必要,我重写了 copy-c'tor 和赋值运算符以创建 ValueHolder 的深层副本。

这是要走的路吗?还有其他更简单的选项我看不到吗?

这是我的代码 - 功能不一定完整:

0 投票
1 回答
45 浏览

pointers - D:似乎无法创建 const struct 指针的 std.container.Array

假设我有一个 struct type Foo。我正在尝试创建一个std.container.Array指向Foo. 我首先尝试了明显的:

但是,这会导致编译器错误。然后我用更少的括号尝试了它:

但这给出了同样的错误(error instantiating显然)。我在这里做错了什么?

0 投票
1 回答
725 浏览

d - 从 D 中的标准输入读取单个字符

文档std.stdio没有列出可用于从标准输入中获取单个字符的函数read,仅readln用于获取一行。std.file具有read功能,但它需要一个文件名,据我所知,该文件名不适用于标准输入。

如何从 中读取单个字符stdin

0 投票
1 回答
122 浏览

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 限定的?