当前位置: 首页 > news >正文

2501d,d.109

原文

2.109.0带来了15主要更改26个修复的Bugzilla问题.非常感谢39位贡献者,是他们使2.109.0变成可能.

更改编译器

1,[下一版]现在,为类型实例成员设置别名是个错误
2,添加位字段内省功能
3,添加了从CTFE写入消息的__ctfeWrite
4,现在-verrors也限制弃用警告
5,dtohextern(Windows)extern(System)函数生成签名.
6,动态数组上的每一可有小于size_t索引类型
7,在闭包上每一逆现在是个错误
8,添加标识表的扩展以允许新符匹配C23CLI可配置性
9,ImportC改进了统一支持
10,缺少符号错误不再神秘
11,已删除窗口OMF支持

更改运行时

1,添加core.sys.linux.sys.mount模块.
2,从d运行时中删除了所有collectNoStack函数和API.
3,按@trusted标记Thread.sleep

更改库

1,添加std.process.Config.preExecDelegate

更改编译器

[下一版]现在,为类型实例成员设置别名是个错误

此别名实际上是实例类型成员的别名,而不是实例成员自身的别名.会很怪,现在是一个错误.相反,请为以下类型的成员设置别名:

struct Foo
{int v;void test(Foo that) const{alias a = this.v;//好alias b = that.v;//错误,请改用`'typeof(that).v'`assert(&a is &b);//通过assert(&b !is &that.v);}
}
struct Bar
{Foo f;alias v = f.v;//错误,请使用`'typeof(f).v'`
}

添加位字段内省功能

增加:
1,.bitoffsetOf属性取位域的开始位号.
2,.bitwidth属性取位域中的位数.
3,如果字段元素位域,则__traits(isBitfield,symbol),返回

添加了从CTFE写入消息的__ctfeWrite

类似pragma(msg,...),__ctfeWrite特殊函数,现在可用来在CTFE写入消息.实现定义如何给用户渲染消息;
推荐方法打印消息stderr标准错误流.该函数object.d中可用,并接受隐式const(char)[]转换任意值.
如:

int greeting()
{__ctfeWrite("Hello from CTFE. Today is ");__ctfeWrite(__DATE__);__ctfeWrite("\n");return 0;
}
enum forceCTFE = greeting();

编译此程序生成以下输出:

 来自`CTFE`的你好.今天是<当前日期>

现在-verrors也限制弃用警告

默认,编译器会在20错误消息后停止,除非传递-verrors=50-verrors=0(不限制)指定不同的数.
错误限制现在也适合弃用消息,因此在编译尚未修复所有弃用大项目时,命令行不会被数百个弃用消息淹没.

deprecated void f()
{
}
void main()
{f();f();f();f();
}
> dmd verrors=3 app.d

app.d(7):废弃:已弃用app.f函数
app.d(8):废弃:已弃用app.f函数
app.d(9):废弃:已弃用app.f函数
省略了1个弃用警告,使用-verrors=0显示所有.

dtohextern(Windows)extern(System)函数生成签名.

使用-HC开关时,除了extern(C)extern(C++)函数外,extern(Windows)extern(System)函数也会输出.h文件中.
示例D模块:

extern(Windows) int hello()
{return 0;
}
extern(System) int myFriend()
{return 0;
}

-HC开关:

//省略了完整头
#ifndef _WIN32
#define EXTERN_SYSTEM_AFTER __stdcall
#define EXTERN_SYSTEM_BEFORE
#else
#define EXTERN_SYSTEM_AFTER
#define EXTERN_SYSTEM_BEFORE extern "C"
#endif
int32_t __stdcall hello();
EXTERN_SYSTEM_BEFORE int32_t EXTERN_SYSTEM_AFTER myFriend(x);

动态数组上的每一可有小于size_t索引类型

以下情况,在编译时数组长度已知的:
1,数组一个文本.
2,该数组是在编译时已知其上限一个切片式.
3,对a数组,索引类型可以是I整数类型,其中a.length<=I.max.
4,尚未实现其他情况.

在闭包上每一逆现在是一个错误

使用每一逆时,编译器不会试反向遍历闭包返回的结果.这会导致难以阅读代码,因此,(多年来)已弃用.
现在,闭包上用每一逆是个错误.

添加标识表的扩展以允许新符匹配C23CLI可配置性

当前,可对DImportC,在c99,c11,UAX31(C23)all(最少限制集)间选择.
这可通过-identifiers=<table>和对ImportC-identifiers-importc=<table>来完成.

当前按all设置D的默认表,而按c11设置ImportC.以前,DImportC都使用c99表.
稍后D的表会切换到UAX31,这应该在2.117中完成.如果你此时正在使用c99指定符,且不愿意更改它们,可切换all.

ImportC改进了统一支持

现在支持通用符名,允许按标识的一部分使用\uXXXX\UXXXXXXXX语法,其中X十六进制数字.
DigitalMarssppn不支持C99以上的更新版本.已知它是有限的,使用不在这些区间内的统一符都会导致错误.

缺少符号错误不再神秘

经常忘记链接库,在命令行上列举.d文件或包含函数.例:

module app;
unittest
{import assertions;assertEquals('D', 'D');
}
module assertions;
void assertEquals(char a, char b)
{assert(a == b);
}

如下编译时:

> dmd unittest app.d

编译器不会看到错误,但在链接缺少符号.以前,这会导致一个带混杂符号名神秘的链接器错误,错误略.
现在,当编译器调用链接器程序时,它读取其输出,扫描未定义的符号错误,并解混杂名字:
错误:未定义
错误:未定义void assertions.assertEquals(char,char)引用
引用自void app.__unittest_L5_C1()
也许可定义一个void main(){}函数,或使用-main开关
也许需要在命令行中添加.d文件,或使用-i编译导入
错误:链接器退出,状态为1

这样可更轻松地修复命令:

> dmd -unittest -main -i app.d

当前支持的链接器包括ld,bfd,gold,moldMicrosoftLINK.如果未检测到链接器的错误,请提交问题.

已删除窗口OMF支持

窗口上,支持默认设置PECOFF两年后,现在不再支持OMF.
这包括开关(-m32omf).

更改运行时

添加core.sys.linux.sys.mount模块.

core.sys.linux.sys.mount新模块,提供了与Linux上的<sys/mount.h>头文件中的对应的定义.

d运行时中删除所有collectNoStack函数和API.

@trusted标记Thread.sleep

现在按@trusted标记core.thread.Thread.sleep静态方法,可直接从@安全代码中调用它.

更改库

添加std.process.Config.preExecDelegate

std.process.Config.preExecDelegatestd.process.Config.preExecFunction类似,但可抓环境,如:

import core.sys.linux.sys.prctl : PR_SET_PDEATHSIG, prctl;
import std.process : Config, execute;
void runProgram(int pdeathsig)
{execute(["program"],config: Config(preExecDelegate: () @trusted =>prctl(PR_SET_PDEATHSIG, pdeathsig, 0, 0, 0) != -1,),);
}

preExecFunction为兼容而保留,如果同时给出了preExecFunctionpreExecDelegate,则会调用两者.

相关文章:

2501d,d.109

原文 2.109.0带来了15个主要更改和26个修复的Bugzilla问题.非常感谢39位贡献者,是他们使2.109.0变成可能. 更改编译器 1,[下一版]现在,为类型实例的成员设置别名是个错误 2,添加位字段内省功能 3,添加了从CTFE写入消息的__ctfeWrite 4,现在-verrors也限制弃用警告 5,dtoh为e…...

1、蓝牙打印机环境搭建

本项目采用stm32f103c8T6芯片&#xff0c;通过库函数实现打印功能&#xff0c;并配置有小程序蓝牙通信上位机。 1、创建文件夹目录 core文件夹存放核心库文件 LIB文件夹存放标准库函数文件 这里可以删减&#xff0c;用不到的可以不要。 obj存放编译后的文件 project存放项目…...

Axure RP11安装学习

安装&#xff1a; 官网下载地址&#xff1a;Axure RP - UX Prototypes, Specifications, and Diagrams in One Tool 设置自己的安装目录&#xff0c;一步步安装即可。 汉化&#xff1a; 汉化包下载地址&#xff1a; 链接: https://pan.baidu.com/s/1eIRoGkVqAY3u3I27lgDJ6A…...

axios和fetch的实现原理以及区别,与XMLHttpRequest的关系,并结合react封装统一请求示例

Axios 和 Fetch 对比及统一请求封装 1. Axios 基础用法 1.1 安装和引入 // 安装 npm install axios// 引入 import axios from axios;1.2 基本请求方法 // GET 请求 axios.get(/api/users).then(response > console.log(response.data)).catch(error > console.error…...

矩阵运算提速——玩转opencv::Mat

介绍:用Eigen或opencv::Mat进行矩阵的运算&#xff0c;比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因&#xff1a; 优化的底层实现…...

C++软件设计模式之模板方法模式

模板方法模式是面向对象软件设计模式之一&#xff0c;其主要意图是在一个方法中定义一个算法的骨架&#xff0c;而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 动机 在软件开发中&#xff0c;常常会遇到这样的情…...

神经网络的初始化方式都有哪些?

一、概念 神经网络的初始化是深度学习中的一个关键步骤&#xff0c;它指的是在训练开始前为神经网络的权重和偏置设置初始值。合适的初始化方法可以加速模型的收敛&#xff0c;提高训练效果&#xff0c;甚至影响模型的最终性能。当然&#xff0c;目前我们使用Torch、TensorFlow…...

const成员函数

在c中经常看到这样的声明&#xff1a; class A{ ... int fun1() const; //const成员函数 int fun2() const; //const成员函数private: int a; //属于状态 static int b; //不属于状态&#xff0c;属于类 } 这个const关键字声明了这个函数是const成员函数&#xff0c;con…...

物理知识1——电流

说起电流&#xff0c;应该从电荷说起&#xff0c;而说起电荷&#xff0c;应该从原子说起。 1 原子及其结构 常见的物质是由分子构成的&#xff0c;而分子又是由原子构成的&#xff0c;有的分子是由多个原子构成&#xff0c;有的分子只由一个原子构成。而原子的构成如图1所示。…...

车载通信架构 --- 智能汽车通信前沿技术

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...

Flutter中添加全局防护水印的实现

随着版权意识的加强&#xff0c;越来越多的应用开始在应用内部增加各种各样的水印信息&#xff0c;防止核心信息泄露&#xff0c;便于朔源。 效果如下&#xff1a; 在Flutter中增加全局水印的方式&#xff0c;目前有两种实现。 方案一&#xff0c;在native层添加一个遮罩层&a…...

BGP(Border Gateway Protocol)路由收集器

全球 BGP&#xff08;边界网关协议&#xff09;路由收集器的分布情况以及相关数据。以下是主要的信息解读&#xff1a; 地图标记&#xff1a; 每个绿色点代表一个路由收集器的位置。路由收集器分布在全球不同的地区&#xff0c;覆盖了五大区域&#xff1a; ARIN&#xff08;美…...

【DAGMM】直接跑tip

1.from sklearn.externals import joblib 版本高 joblib没有 直接pip install joblib&#xff0c;然后 import joblib 2.AttributeError: module ‘tensorflow’ has no attribute ‘set_random_seed’ # tf.set_random_seed(args.seed)#tf<2.0 tf.random.set_seed(args.s…...

vscode中调用deepseek实现AI辅助编程

来自 Python大数据分析 费弗里 1 简介 大家好我是费老师&#xff0c;最近国产大模型Deepseek v3新版本凭借其优秀的模型推理能力&#xff0c;讨论度非常之高&#x1f525;&#xff0c;且其官网提供的相关大模型API接口服务价格一直走的“价格屠夫”路线&#xff0c;性价比很高…...

AI大模型语音识别转文字

提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字&#xff0c;也可从特定视频中提取对应音频进行转录成文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…...

可由 (5V) 单片机直接驱动的模块

可由 &#xff08;5V&#xff09; 单片机 直接驱动的模块 1. 传感器类 元器件描述温度传感器DS18B20&#xff08;数字温度传感器&#xff09;光强传感器光敏电阻&#xff08;通过 ADC 读取&#xff09;红外传感器红外接收模块&#xff08;如 VS1838&#xff09;超声波传感器HC…...

vue使用树形结构展示文件和文件夹

1. 树形结构显示 显示文件夹和文件&#xff1a;使用 el-tree 组件展示树形结构&#xff0c;文件夹和文件的图标通过 el-icon 进行动态显示。文件夹使用 Folder 图标&#xff0c;文件使用 Files 图标。节点点击&#xff1a;点击树形节点后&#xff0c;会将选中的节点保存到 sel…...

PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)

文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定&#xff1f; 聊天界面布局 在View/Index目录下创建index.html html代码 <div id"chat"><div id"nbar"><div class"pull-left">与牛德胜正在聊天...</div…...

LinuxUbuntu打开VSCode白屏解决方案

解决方法是 以root权限打开VSCode sudo /usr/share/code/code --no-sandbox --unity-launch...

在 ESP 上运行 AWTK

AWTK 基于 esp 的移植。 测试硬件平台为 ESP32-S3-Touch-LCD-4.3&#xff0c;其它平台请根据实际平台自行调整。 安装下载工具 建议下载离线版本 ESP IDF v5.3.2 下载代码 git clone https://github.com/zlgopen/awtk-esp.git cd awtk-esp git clone https://github.com/zlg…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...