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

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...