不能在 char 数组上使用 parallel?

Cannot use parallel on a char array?

我在 D 的在线游览和本地的 ldc 上都尝试过这个。这个错误让我很困惑。 与 int 相比,char 有什么特别之处,以至于它不能成为并行引用?

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 字符,而不是整个字符。考虑汉字维——它在内存中的表示是 E7 BB B4,或者三个 char 的数组。因此,D 不允许您以与其他类型相同的方式对 char 进行操作。

D 没有单独的 ASCII 文本类型,所以如果你想将字符串视为 ASCII,你应该使用 ubyte[] 而不是 char[]

默认情况下,Phobos 将 char 数组视为 dchar 的双向范围。要覆盖它,请使用 std.utf.byCodeUnit。 https://dlang.org/library/std/utf/by_code_unit.html