2501d,d.109
原文
2.109.0带来了15个主要更改和26个修复的Bugzilla问题.非常感谢39位贡献者,是他们使2.109.0变成可能.
更改编译器
1,[下一版]现在,为类型实例的成员设置别名是个错误
2,添加位字段内省功能
3,添加了从CTFE写入消息的__ctfeWrite
4,现在-verrors也限制弃用警告
5,dtoh为extern(Windows)和extern(System)函数生成签名.
6,动态数组上的每一可有小于size_t的索引类型
7,在闭包上每一逆现在是个错误
8,添加了标识表的扩展以允许新符匹配C23及CLI可配置性
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显示所有.
dtoh为extern(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,尚未实现其他情况.
在闭包上每一逆现在是一个错误
使用每一逆时,编译器不会试反向遍历闭包返回的结果.这会导致难以阅读的代码,因此,(多年来)已弃用.
现在,闭包上用每一逆是个错误.
添加了标识表的扩展以允许新符匹配C23及CLI可配置性
当前,可对D和ImportC,在c99,c11,UAX31(C23)和all(最少限制集)间选择.
这可通过-identifiers=<table>和对ImportC用-identifiers-importc=<table>来完成.
当前按all设置D的默认表,而按c11设置ImportC.以前,D和ImportC都使用c99表.
稍后D的表会切换到UAX31,这应该在2.117中完成.如果你此时正在使用c99指定符,且不愿意更改它们,可切换回all.
ImportC改进了统一支持
现在支持通用符名,允许按标识的一部分使用\uXXXX和\UXXXXXXXX语法,其中X是十六进制数字.
DigitalMars的sppn不支持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,mold和MicrosoftLINK.如果未检测到链接器的错误,请提交问题.
已删除窗口的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.preExecDelegate与std.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为兼容而保留,如果同时给出了preExecFunction和preExecDelegate,则会调用两者.
相关文章:
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芯片,通过库函数实现打印功能,并配置有小程序蓝牙通信上位机。 1、创建文件夹目录 core文件夹存放核心库文件 LIB文件夹存放标准库函数文件 这里可以删减,用不到的可以不要。 obj存放编译后的文件 project存放项目…...
Axure RP11安装学习
安装: 官网下载地址:Axure RP - UX Prototypes, Specifications, and Diagrams in One Tool 设置自己的安装目录,一步步安装即可。 汉化: 汉化包下载地址: 链接: 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进行矩阵的运算,比用cpp的vector或vector进行矩阵运算要快吗? 使用 Eigen 或 OpenCV 的 cv::Mat 进行矩阵运算通常比使用 std::vector<int> 或 std::vector<double> 更快。这主要有以下几个原因: 优化的底层实现…...
C++软件设计模式之模板方法模式
模板方法模式是面向对象软件设计模式之一,其主要意图是在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 动机 在软件开发中,常常会遇到这样的情…...
神经网络的初始化方式都有哪些?
一、概念 神经网络的初始化是深度学习中的一个关键步骤,它指的是在训练开始前为神经网络的权重和偏置设置初始值。合适的初始化方法可以加速模型的收敛,提高训练效果,甚至影响模型的最终性能。当然,目前我们使用Torch、TensorFlow…...
const成员函数
在c中经常看到这样的声明: class A{ ... int fun1() const; //const成员函数 int fun2() const; //const成员函数private: int a; //属于状态 static int b; //不属于状态,属于类 } 这个const关键字声明了这个函数是const成员函数,con…...
物理知识1——电流
说起电流,应该从电荷说起,而说起电荷,应该从原子说起。 1 原子及其结构 常见的物质是由分子构成的,而分子又是由原子构成的,有的分子是由多个原子构成,有的分子只由一个原子构成。而原子的构成如图1所示。…...
车载通信架构 --- 智能汽车通信前沿技术
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...
Flutter中添加全局防护水印的实现
随着版权意识的加强,越来越多的应用开始在应用内部增加各种各样的水印信息,防止核心信息泄露,便于朔源。 效果如下: 在Flutter中增加全局水印的方式,目前有两种实现。 方案一,在native层添加一个遮罩层&a…...
BGP(Border Gateway Protocol)路由收集器
全球 BGP(边界网关协议)路由收集器的分布情况以及相关数据。以下是主要的信息解读: 地图标记: 每个绿色点代表一个路由收集器的位置。路由收集器分布在全球不同的地区,覆盖了五大区域: ARIN(美…...
【DAGMM】直接跑tip
1.from sklearn.externals import joblib 版本高 joblib没有 直接pip install joblib,然后 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 简介 大家好我是费老师,最近国产大模型Deepseek v3新版本凭借其优秀的模型推理能力,讨论度非常之高🔥,且其官网提供的相关大模型API接口服务价格一直走的“价格屠夫”路线,性价比很高…...
AI大模型语音识别转文字
提取音频 本项目作用在于将常见的会议录音文件、各种语种音频文件进行转录成相应的文字,也可从特定视频中提取对应音频进行转录成文字保存在本地。最原始的从所给网址下载对应视频和音频进行处理。下载ffmpeg(https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-…...
可由 (5V) 单片机直接驱动的模块
可由 (5V) 单片机 直接驱动的模块 1. 传感器类 元器件描述温度传感器DS18B20(数字温度传感器)光强传感器光敏电阻(通过 ADC 读取)红外传感器红外接收模块(如 VS1838)超声波传感器HC…...
vue使用树形结构展示文件和文件夹
1. 树形结构显示 显示文件夹和文件:使用 el-tree 组件展示树形结构,文件夹和文件的图标通过 el-icon 进行动态显示。文件夹使用 Folder 图标,文件使用 Files 图标。节点点击:点击树形节点后,会将选中的节点保存到 sel…...
PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)
文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定? 聊天界面布局 在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,其它平台请根据实际平台自行调整。 安装下载工具 建议下载离线版本 ESP IDF v5.3.2 下载代码 git clone https://github.com/zlgopen/awtk-esp.git cd awtk-esp git clone https://github.com/zlg…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
