D 无法在字符数组上使用并行?
我在D的在线旅行和当地的ldc上都尝试过这一点。这个错误使我困惑。 与int相比,char有什么特别之处,以至于它不能从parallel变成refD 无法在字符数组上使用并行?,d,D,我在D的在线旅行和当地的ldc上都尝试过这一点。这个错误使我困惑。 与int相比,char有什么特别之处,以至于它不能从parallel变成ref import std.stdio : writeln; import std.parallelism; void main() { auto arr = [1,2,3,4,5,6,7,8]; foreach(ref i; parallel(arr)) { //writeln(typeid(i)); i
import std.stdio : writeln;
import std.parallelism;
void main()
{
auto arr = [1,2,3,4,5,6,7,8];
foreach(ref i; parallel(arr)) {
//writeln(typeid(i));
i = i*i;
}
writeln(arr);
auto result = [ 'w','e','l','c','o','m','e','t','o','d'];
//foreach( ref c; parallel(result)) --> Error: foreach: cannot make c ref
foreach( ref c; result)
{
//writeln(typeid(c));
c = 'a';
}
writeln(result);
writeln(typeid(arr));
writeln(typeid(result));
}
char
是一种局部类型-它表示unicode字符的一部分,而不是整个字符。考虑汉字维 - 它在内存中的表示形式是e7bbb4
,或三个char
s的数组。因此,D不允许您以与其他类型相同的方式对char
进行操作
D没有单独的ASCII文本类型,因此如果要将字符串视为ASCII,则应使用
ubyte[]
而不是char[]
默认情况下,Phobos将char数组视为dchar的双向范围。要覆盖该值,请使用std.utf.byCodeUnit 哼唱,以防止在给定位置平行分裂。这就是为什么普通foreach可以工作但不能并行?这并不能阻止代码点的拆分,您可能会在不同线程之间拆分多个单元代码点。然而,foreach是一种语言特性。该语言将字符数组视为具有切片和索引的数组。Phobos不依赖于语言,而是对字符数组有自己的看法。e、 g.hasLength!(字符串)=false,但“hello”。长度==5
。这就是所谓的自动解码问题,在D中有点混乱。