d的2.101版下

运行时更改

添加了avx512f检测到core.cpuid

已添加core.cpuid.avx512f特征标志,来允许在具有512位向量支持的CPU上运行时检测.

--DRT-oncycle=deprecate

参考
帮助迁移,模块构造器的旧的易错循环检查器.现在与--DRT-oncycle=abort一样.

更改库

添加可在@safe,同-preview=dip1000一起用的SafeRefCounted.

RefCounted仅适合@system代码,因为有可能在生命期结束后,逃逸负载引用.已添加它的std.typecons.SafeRefCounted修改副本.还添加了可安全访问和修改负载的borrow函数.在@safe代码中,-preview=dip1000避免逃逸对它的引用.

@safe pure nothrow void fun()
{
    import std.typecons;

    auto rcInt = safeRefCounted(5);
    assert(rcInt.borrow!(theInt => theInt) == 5);
    auto sameInt = rcInt;
    assert(sameInt.borrow!"a" == 5);

    // 函数中用`引用`
    auto arr = [0, 1, 2, 3, 4, 5, 6];
    sameInt.borrow!(ref (x) => arr[x]) = 10;
    assert(arr == [0, 1, 2, 3, 4, 10, 6]);

    // 通过别名修改负载
    sameInt.borrow!"a*=2";
    assert(rcInt.borrow!"a" == 10);
}

直接访问负载必须是@system.尽管-dip1000可防止逃逸引用,可在域尾消灭最后引用:

int destroyFirstAndUseLater()
{
    import std.typecons;
    auto rc = SafeRefCounted!int(123);
    int* ptr = &rc.refCountedPayload();
    destroy(rc);
    return *ptr; // 从释放内存中读,不要这样!
}

可用-preview=dip1000使std.file.dirEntries``@safe.
RefCounted的一些@safe成员函数在SafeRefCounted不再@安全.RefCounted类型和refCounted函数仍可用.但是,主要目的是后向兼容.不建议用于新代码.

std.socket.Socket方法现在只接受scope数组

为了符合dip1000,std.socket.Socket方法现在对所有切片参数,都有scope属性.包括receivesend,还有setOption.虽然,对使用Socket,不是大更改,如果从它继承,则必须应用这些属性至继承类,否则无法编译.

添加自定义填充值std.outbuffer.OutBuffer

扩展std.outbuffer.OutBufferfill,alignSize,align{2,4}方法,以在填充(甚至对齐)时指定要写入的值.

OutBuffer buf = new OutBuffer();
buff.fill( 1234, 42 ); 
// 在偏移处用42填充1234字节
buff.fill( 10 );
// ==fill0( 10 );

修改alignSize,align{2,4}方法来,让用户定义值来填充到请求的对齐边界.

OutBuffer buf = new OutBuffer();
buf.write(cast(ubyte) 1);
buf.align2(0x55);
assert(buf.toBytes() == "\x01\x55");
buf.write(cast(ubyte) 2);
buf.align4(0x55);
assert(buf.toBytes() == "\x01\x55\x02\x55");
buf.write(cast(ubyte) 3);
buf.alignSize(8, 0x55);
assert(buf.toBytes() == "\x01\x55\x02\x55\x03\x55\x55\x55");

DUB更改

构建特殊测试运行器配置

现在可用dub build --config=unittest --build=unittest[-cov]来模拟构建测试运行器可执行的dub test[--coverage].注意,不需要现有的unittest配置.

dub describe --config=unittest

允许导出可执行路径.

高亮输出

dub现在对无法识别设置或选择文件发出警告

已添加cov-ctfeunittest-cov-ctfe两种新的构建类型.

分别通过附加-cov=ctfe传递给编译器的标志集,来扩展现有的covunittest-cov构建类型.

大改DUB设置和包目录位置

现在可在环境变量或用dub配置来配置DUB下载包位置用户配置位置.要用环境变量或系统级配音配置来指定存储用户配置位置.
默认,DUB
窗口:%APPDATA%/dub/settings.json+%LOCALAPPDATA%/dub/packages/
Posix:$HOME/.dub/{packages/,settings.json}
存储包.
现在如果DUB_HOME设置了环境变量,则在$DUB_HOME/{packages/,settings.json}存储.
或,如果没有设置DUB_HOME,但是设置了DPATH,则使用$DPATH/dub/{packages/,settings.json}路径:

DPATH环境变量旨在供所有与D工具相关的,在用户空间安装事物时使用.用于避免使主目录混乱.

除了环境变量外,还可用DUBsettings.json文件配置包位置路径+settings.json路径.要配置用户可编辑的settings.json位置,需要调整系统级配音配置.
settings.json中,可设置以下字段:

{
    "dubHome": "/path/to/dub",
// 设置包存储和配置位置
}

此外,这些配置路径使用$VARIABLE环境变量解析语法.
以下列表描述了从上到下选择哪条路径,只要找到一条就停止:
1,$DUB_HOME环境变量
2,$DPATH环境变量
3,系统级的settings.json"dubHome"属性(仅用于userSettings)
4,最特定的settings.json"dubHome"属性(仅适合localRepository)

已删除"安装"和"卸载"命令

用于复制只读文件的copyFiles,现在使副本可写.

dub run可跑子包

dub :subpackage
//==
dub run :subpackage
//类似
dub
//==
dub run

一次升级所有子包

-s开关,允许dub upgrade升级所有子包.
为了可重现的构建和测试,提供更好的工作流程.

posted @   zjh6  阅读(15)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示