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…...

硬件工程师面试题 21-30
把常见的硬件面试题进行总结,方便及时巩固复习。其中包括网络上的资源、大佬们的大厂面试题,其中可能会题目类似,加强印象即可。 更多硬件面试题:硬件工程师面试题 1-10硬件工程师面试题 11-20 21、单片机最小系统需要什么&#x…...

开源架构的容器化部署优化版
上三篇文章推荐: 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊(New) 我管理的社区推荐:【青云交社区…...

Qt使用CMake编译项目时报错:#undefined reference to `vtable for MainView‘
博主将.h文件和.cpp文件放到了不同的文件目录下面,如下图所示: 于是构建项目的时候就报错了#undefined reference to vtable for MainView,这个是由于src/view目录下的CMake无法自动moc头文件导致的,需要手动moc include/view目录…...

python学习笔记—12—
1. 布尔类型 (1) 定义 (2) 比较运算符 (3) 代码演示 1. 手动定义 bool_1 True bool_2 False print(f"bool_1的内容是:{bool_1}, 类型是:{type(bool_1)}") print(f"bool_2的内容是:{bool_2}, 类型是:{type(bool…...

==和===的区别,被坑的一天
在 JavaScript 中, 和 都用于比较两个值,但它们有一个重要的区别: 1. (宽松相等运算符) 进行比较时,会 自动类型转换(也叫做强制类型转换),即如果比较的两个值的类型不同,JavaScr…...

基于 GPUTasker 的 GPU 使用情况钉钉推送机器人实现
引言 https://github.com/cnstark/gputasker 随着 AI 模型的广泛应用,GPU 成为团队中最重要的资源之一。然而,如何实时监控 GPU 的使用情况并及时通知团队是一个值得关注的问题。为了更好地管理显卡资源,本文基于 GPUTasker,实现了…...

Python自学 - 函数初步(内置函数、模块函数、自定义函数)
1 Python自学 - 函数初步(内置函数、模块函数、自定义函数) 1.1 内置函数 几乎所有的编程都会提供一些内置函数,以便完成一些最基本的任务,Python提供了丰富的内置函数,熟悉内置函数可以给工作带来极大便利。 Python官方的内置函数介绍网…...

【生活】冬天如何选口罩(医用口罩,N95, KN95还是KP95?带不带呼吸阀门?带不带活性炭?)
💡总结一下就是: 日常防护的话,医用口罩就可以啦。要是想长时间佩戴N95(KN95)口罩的话也可以. 在高风险环境(像医院、疫情防控期间),一定要选不带呼吸阀门的N95口罩KN95)…...

HTML5新特性|01 音频视频
音频 1、Audio (音频) HTML5提供了播放音频文件的标准 2、control(控制器) control 属性供添加播放、暂停和音量控件 3、标签: <audio> 定义声音 <source> 规定多媒体资源,可以是多个<!DOCTYPE html> <html lang"en"> <head><…...

迅为RK3568开发板编译Android12源码包-设置屏幕配置
在源码编译之前首先要确定自己想要使用的屏幕并修改源码,在编译镜像,烧写镜像。如下图所示: 第一步:确定要使用的屏幕种类,屏幕种类选择如下所示: iTOP-3568 开发板支持以下种类屏幕: 迅为 LV…...