当前位置: 首页 > 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…...

TFLint Docker终极指南:在容器中轻松运行Terraform代码检查

TFLint Docker终极指南&#xff1a;在容器中轻松运行Terraform代码检查 【免费下载链接】tflint A Pluggable Terraform Linter 项目地址: https://gitcode.com/gh_mirrors/tf/tflint TFLint是一个可插拔的Terraform代码检查工具&#xff0c;帮助开发者发现Terraform配置…...

飞浆PaddleOCR实战:5分钟实现图片转文字+表格识别(Python代码可直接套用)

飞桨PaddleOCR极速入门&#xff1a;零基础实现高精度图片转文字与表格解析 在数字化办公和智能信息处理的大背景下&#xff0c;光学字符识别&#xff08;OCR&#xff09;技术正成为提升工作效率的利器。想象一下&#xff0c;当面对堆积如山的纸质文档、会议白板照片或是复杂的财…...

河海大学819传热学考研复试备考资料(新能源学院·清洁能源技术专硕专用)

温馨提示&#xff1a;文末有联系方式【权威备考】河海大学819传热学复试专属资料包 本资料由2025届成功录取河海大学新能源学院清洁能源技术专业硕士的学长亲自整理&#xff0c;初试与复试综合成绩稳居前三&#xff0c;内容高度贴合最新考核趋势。【高效提分利器】核心资料全覆…...

从理论到实践:手把手教你用MATLAB构建LSSVR代理模型

1. 代理模型与LSSVR基础认知 第一次接触"代理模型"这个概念时&#xff0c;我正被一个汽车悬架优化项目折磨得焦头烂额——每次修改参数都要运行长达6小时的有限元仿真。直到导师扔给我一篇关于LSSVR的论文&#xff0c;才真正体会到什么叫"山重水复疑无路&#x…...

新手入门:借助快马AI生成lostlife交互示例学习前端开发

作为一个刚接触前端开发的新手&#xff0c;我最近想尝试做一个简单的网页互动项目。在网上看到类似lostlife这样的互动游戏后&#xff0c;特别想了解它们是如何实现基础交互功能的。经过一番摸索&#xff0c;我发现用InsCode(快马)平台可以很轻松地实现这个想法&#xff0c;下面…...

5个高效模块精通抖音视频批量下载工具:从技术原理到实战应用

5个高效模块精通抖音视频批量下载工具&#xff1a;从技术原理到实战应用 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...

OBS Studio高级玩家指南:用这5个隐藏功能让你的直播画质翻倍

OBS Studio高级玩家指南&#xff1a;用这5个隐藏功能让你的直播画质翻倍 如果你已经熟悉OBS Studio的基础操作&#xff0c;却总感觉直播画质离专业级差一口气&#xff0c;这篇文章将带你解锁那些被90%用户忽略的核弹级功能。从多轨道音频的精细控制到动态比特率的智能适配&…...

Windows右键菜单终极清理指南:3步让你的右键菜单重获新生

Windows右键菜单终极清理指南&#xff1a;3步让你的右键菜单重获新生 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为每次右键点击文件时弹出的杂乱菜单而…...

FreeRTOS实战指南:从定时器、中断到系统调优的进阶之路

1. FreeRTOS定时器实战&#xff1a;从基础到高级应用 在嵌入式系统中&#xff0c;定时器是实现精确时序控制的核心组件。FreeRTOS提供的软件定时器功能&#xff0c;比硬件定时器更加灵活易用。我曾在智能家居项目中用FreeRTOS定时器实现过温湿度传感器的周期性采集&#xff0c…...

Vivado IOBUF原语使用避坑:为什么你的双向端口信号总连不上?

Vivado IOBUF原语深度解析&#xff1a;从原理到实战的双向端口设计指南 在FPGA开发中&#xff0c;双向端口&#xff08;inout&#xff09;的设计一直是工程师们容易踩坑的领域。特别是当我们需要将独立的输入输出信号合并为顶层inout端口时&#xff0c;Vivado提供的IOBUF原语看…...