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

2412d,d的8月会议

原文

总结

替换D的逃逸分析

Rikki说,他一个月前曾与Dennis讨论过简化D的逃逸分析,但没有结果.在BeerConf上,他再次提起了它,Dennis他一直在考虑它.

Rikki也与Walter谈过这件事,Walter曾说过DIP1000并没有完全如期工作,且有点太复杂了.

因此,Rikki想讨论按D逃逸分析方法替换DIP1000的可能性.在做出可靠的决定前,第一步是确保它完全在预览开关之下.丹尼斯证实当前是这样.

Rikki说,下一步是考虑切换它它可能的样子.他请求建议.

Dennis说,在决定如何切换它前,应该首先说明当前设计原因及切换的目标.他说他有一些问题.一个是缺乏传递域.

另一个问题是,即使结构有多个成员,它们也只有一个生命期.他一直在考虑允许按注解结构字段,但他还没有具体的提议.

Walter说,他遇见的困难不是DIP1000复杂,而是语言复杂.必须适配语言的各种构造.引用类型工作原理隐式类类型懒参数构造器这就是复杂性的来源.

他给出了成员函数的隐式参数的示例.如果有人想了解如何在构造器或成员函数中使用DIP1000,他一遍遍地解释说,则只需要按显式参数一样,把它写出来.

然后就能看到它应该是如何操作的.但人们发现这无休止地困惑.

简化它的提案还必须证明它如何可能比现在的DIP1000更简单,因为DIP1000很复杂,因为语言很复杂.它必须支持每个语言结构.

Rikki说,逃逸分析分为三个不同级.最基本级是"这是一个而它帮助输出输出".然后你就有了语言可推导出的东西.

然后就有了你可添加可证明的东西.现在真没有那个规模,所以现在当事情太宽泛时,没有逃避的机会.

walter重申,DIP1000复杂性因为语言的复杂性,而不是概念自身,这非常简单.如果用指针写出来,一切都会很清晰和简单.

当你添加像auto ref此东西时,它开始复杂.他从来不喜欢auto ref,也从没用过它,因为它太怪了.

他说,如果Rikki能想出更好方法来完成,他会支持.DIP1000是他最好的机会.

Timon说,DIP1000可以说已承担了一些可注解不同级间接的复杂度成本,但一般禁止这样.应有更好的权衡.

Walter说有两种间接:指针和引用.这使得DIP1000复杂性增加了一倍.Timon同意,但表示即DIP1000不是你在按指针转换所有内容得到的结果.

DIP1000比这更进一步,因为实际上每个指针都有两级间接性,但不是按正交限制它.根据构造注解任一间接级.

Walter同意,并说这是因为引用隐式的间接性,而指针则没有.他问可做些什么.
Rikki让每个人都说他们的想法.

Quirin说,他理解DIP1000目标是你可取局部变量的地址,比如静态数组等,且按域限定指针无法逃逸.

因此,在DIP1000默认值未来版本中,可能会有个编译器开关禁止它,这样禁止取局部变量的地址.

他说他遇见的问题是,如果有系统函数,但实际上没有按@系统注解它,然后有域注解,编译器会认为你正确处理了域操作.

如果你不是,你就完蛋了.而意外很容易发生.

这是DIP1000的一个问题.你可在系统代码坑自己.如果不是在安全代码做对了,但如果是初学者,没有用@安全注解某些东西,然后使用了它,如,是隐式域-preview=in,就会遇见麻烦.

所以可有选项禁止它们,但在代码中允许像@安全一样的所有域检查等会很好.

沃尔特说,@系统关闭了所有检查,因为有时需要做一些烦人事情.初学者不应编写@系统代码.Quirin说,如果不使用@safe,DIP1000会使该语言更加危险.

这就是有些人搞不来的原因.

Walter认为最大的问题人们不喜欢写注解.只在没有函数体时,它们是必需的.如果只是取本地地址,编译器会说,“好的,现在是域指针了”.

它会自动这样.困难在于有两个地方需要添加注解:没有函数体时和在虚函数中.这时,编译器无法自动这样.

Walter说,语言最近有了变化,允许对局部变量使用引用.这允许无需注解,更高的安全性.这是一件好事.它通过减少原始指针的需求改进语言.

下一步是允许构字段上的引用.必须弄清楚它的语义,但是越能改进语言以减少使用原始指针,它自身就越安全,问题就会越少.

Adam说有人建议不要在打开DIP1000时构建Phobosv3.他有点同意该观点.他前曾告诉Walter,DIP1000不值得.

Rikki想说明,如果没有引用计数,基本上不可能每秒处理100,000个请求.这是由Walter在物主逃逸分析方面的工作所控制的,而这反之又以逃逸分析为主题的.

所以他在这方面被阻塞了,因此想要排序逃逸分析.

Walter说,ROI如此之低的原因是,因为栈中错误指针,人们很少在程序中遇见易错漏洞.Mathias问为什么花这么多时间在上面.

沃尔特比作飞机失事:它们很少见,但一旦发生,就会造成灾难性的后果.你不可能既是内存安全的语言,又这样.

Mathias说,DIP1000使他不想使用D,因为当他使用vibe.d允许D时,他得到了大量的弃用.这太可怕了.他希望默认不打开.

当谈到DIP自身时,他说该组合就是不管用.需要他在类型定义中使用注解他的类或结构的设计在到达时都死了.

他说,很多人把它与比较,这是错误的比较.是由外到内,但是由内到外.因此,如果你的外层且你组合了一个有多个层的类型,则你的所有层都是.

,情况正好相反.无法在语言中表示域的深度.这在语法上是不可能的.它就是无法工作的.

更新:稍后开会并决定需要做两件事向前步进:编制一份失败的DIP1000案例列表,看看是否可解决它们;并考虑如何默认推导.

std.math移动到core.math

Martin说他多年来一直想将std.math移动到core.math.很久以前,在GitHubPR中与Walter的讨论中提到了它,他记得Walter也同意它.

最近,再次试使编译器测试包独立于Phobos.现在,现在DMD运行时同一个仓库中,因此所有make目标都是不依赖Phobos独立的,这样运行编译器测试,那就太好了.

做了实验,发现测试用例中的大多数Phobos导入都是std.math.一个常见原因幂符号^^.还有一些测试测试了数学内置函数.

CTFE的编译器使用混杂的函数名,检测到调用标准数学函数.这已是个问题,因为当更改std.math中的属性时,因为新混杂名,也需要更新编译器.

因此,测试了所有这些方法是否有效,而CTFE数学结果符合期望.因此,有隐性依赖Phobos.

Phobos导入所有内容转发core.math,它已在运行时中存在.它当前有大约五个函数.

LDC已转发了一些数学函数.std.math是为数不多的LDCGDC只是为了可使用内联函数,而有一些修改Phobos模块之一.

移动进运行时会更好,因为可最小化或清除,Phobos分叉的需求.
Walterstd.math类似一个包含很多东西手提袋.他建议将应该是core.math的内容移动到d运行时中并转发到这里,然后按使用core.math更改测试包.

他想保存std.math.仍有很多编译器测试包不需要的数学函数,可在那里保存它们.

Jonathan说,过去当决定真想要在d运行时中导入Phobos中的东西,但真想人们导入Phobos时,就把该东西移到了core.internal.
如,std.traits导入了core.internal.traits以避免重复d运行时中使用的特征,用户仍可通过std.traits来取它.

实际上,std.math中的大多数函数都是由编译器检测到的.

据他所知,std.math相当孤立的,不依赖Phobos中的其他东西.他会仔细检查,但他确信,所以可把它移过来.

真不想分开它.如果它在运行时,则直接从那里包含合乎逻辑的,从某个特定的编译器版本开始,并保存它,在PhobosAPI中呆一段时间实现后向兼容.
所以最终位置将在core.math中.

Walter说,很简单:如果想在编译器测试包放置它,它需要进入运行时.Martin说他需要检查,但这会是大部分函数.

Mathias认为尽管不能解决Martin的问题,但应该去掉幂符号.Martin说,移动它到运行时,可清除在未导入std.math试用它出错的特例.

沃尔特同意马蒂亚斯的意见,认为应该淘汰它.这是丑陋的.

Adam说,Phobos3改变绝佳机会.这是自然的分界线.可保持标准库2原样长期支持它,但Martin可在标准库3为所欲为.

Adam已在看std.math思考他有多害怕移植它.因此,如果Martin想出其他东西并告诉他如何让它有效,他就会让它有效.

主要类型语法DIP

Quirin和一起讨论了他的.1及2.

基本思想是,不更改语义修改语法.它为了确保可由错误消息表示的任意类型,(如)也可在代码中表示,且你不会收到解析错误.
Quirin说他已为该提案提供了实现,且按期望实现引用.他已试了很久,并真正试突破了一些极限.他没有发现问题.

他说,同样问题也适合链接.像一个带extern(C)链接的函数指针.
他说也许Quirin已解决了它,但要求他检查一下语法和括号问题,并确保提案没有这些问题.
Walter说,在编译器测试包试它将很好.奎林同意.

“让printf安全的DIP

Iain说,现在是2024年,人们仍在发明新的CPU.他说中国人发明了他们自己的MIPSCPU,他们不得不把旧的GDC版本拖出来,并移植到他们的CPU上,只是为了让LDCDMD正常工作.
这是另一个崭露头角的现代芯片(龙芯).让这些人对拥有现代版本D编译器而不是C++编译器满意,这样他们就可跳到最新版本.

因此,较旧的bootstrap版本完全无价值.

沃尔特说好.确保D编译器源码安全并不重要.这只是他想做的事情.但是,如果会导致很多下游问题,则当然,我们还能做什么?

Iain说必须让文档非常响亮和显式.GDC在这方面做得很好,它解释了如果从给定版本的编译器开始,你必须做什么,因为某些版本GDC是使用特定的C++标准编写的.

取得最新版本,必须从起点开始浏览这些版本.也应该同意,对DMD同样.

Rikki说明,Elias已完成了LDC的新docker版镜像,该镜像完成了从LTS版本到最新版本的引导.他说应该可按C++代码基转储编译器,然后用来引导相同编译器版本.

他已考虑了很久了.这在今天不是问题,但未来会变成一个问题.

使用printf真很简单.这只是一个调用函数:在栈上压几个参数,调用一个函数,完成.

Dennis问,是否为DMD创建了writeln最小模板版本,因为DMD大多只连接串,偶尔会构成一个整数.Walter说可编写自己的printf,但C标准库中的那个是经过实战检验,调试和优化最多的.

Dennis强调只需要连接串.
Johanthan建议把它包装起来.
他同意Walter所说的writeln有问题,因为它是模板的暴风雪.但他不断从人们那里听到不应删除这些模板.

Walter重申printf受到了很大的恶意,但它是历史上调试,优化最多的函数.也许可实现一个只是调用安全转发到printfwriteln.

它有它的问题,因此提交安全printf提案.
他说Jonathan完全正确的,模板writeln带来了很多好处.他不是在反对它.但是在试调试编译器时,处理writeln是个巨大的痛苦.

因此他总是回到printf的原因.他不想编译器依赖writeln,因为那样无法引导编译器.

Jonathan同意不想DMD依赖标准库.此时,也许用带串并按C串的东西转换它来包装printf可行的.

Walter说这就是安全printf提案的作用,它只是让编译器覆盖printf式以使其内存安全.Jonathan说可避免直接使用包装器调用printf.
总之,编译器一般情况不同.

空初化一个引用变量

Dennis问大家是否都同意初化引用变量应该是一个错误.DIP没有具体说明,它没用例.沃尔特说那是个错误.没人反对,这里.

域和自动引用

Dennis问大家是否都同意变量上的auto ref关键字必须放在一起,而不是与不同域内关键字一起使用,如auto { ref int x = 3; }沃尔特说是的,干掉它.

Quirin说他注意到,在查看语法时,引用并不总是需要彼此相邻.如,可在参数列表中编写ref const auto foo.他建议应该禁止这样.沃尔特说应该弃用它.

相关文章:

2412d,d的8月会议

原文 总结 替换D的逃逸分析 Rikki说,他一个月前曾与Dennis讨论过简化D的逃逸分析,但没有结果.在BeerConf上,他再次提起了它,Dennis说他一直在考虑它. Rikki也与Walter谈过这件事,Walter曾说过DIP1000并没有完全如期工作,且有点太复杂了. 因此,Rikki想讨论按D逃逸分析方法替…...

WEB自动化测试(selenium工具)框架、面试题

一、什么是web自动化测试 让程序员代替人为去验证web项目功能的过程 二、什么web项目适合自动化测试 1)需求变动不频繁 测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本&…...

前端自动化部署之ssh2和ssh2-sftp-client

ssh2-sftp-client 本身是一个专门用于处理 SFTP文件操作的库,它不直接提供执行远程命令的功能。但是可以通过它的底层依赖库 ssh2 实现执行命令的功能。 以下是实现方法和示例代码: 方法一:使用 ssh2 执行远程命令 ssh2 是 ssh2-sftp-client…...

python pandas 优化内存占用(一)

最近我用python处理excel,使用的是pandas库,我发现pandas库非常占用内存,一直想研究下如何优化pandas的内存占用,但一直没腾出空来,最近终于有时间研究一把了,我先把优化方法写上,如果你想了解更…...

FutureCompletableFuture实战

1. Callable&Future&FutureTask介绍 直接继承Thread或者实现Runnable接口都可以创建线程,但是这两种方法都有一个问题就是:没有返回值,也就是不能获取执行完的结果。因此java1.5就提供了Callable接口来实现这一场景,而Fu…...

Loki 微服务模式组件介绍

目录 一、简介 二、架构图 三、组件介绍 Distributor(分发器) Ingester(存储器) Querier(查询器) Query Frontend(查询前端) Index Gateway(索引网关&#xff09…...

peerDependencies对等依赖

在 package.json 中平时常用的有字段有 dependencies 和 devDependencies,但 peerDependencies 平时都没咋看到过,今天具体讲讲 peerDependencies 的作用 一、什么是对等依赖 peerDependencies 可以翻译为“对等依赖”或“同行依赖”。这个术语在 npm …...

贪心算法 part01

class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) { // 取区间累计的最大值&#xff08;相当于不断确定最大子序终止位置&#xff…...

java开发入门学习二 - 变量

目录 一 关键字 ​编辑 二 标识符 三 变量 变量数据类型 变量注意点 四 数据类型 前置知识 - 计算机存储单位 整型数据类型 浮点数据类型 字符数据类型 布尔数据类型 五 数据类型间的计算 基本数据类型之间的计算 自动类型提升 强制类型转换 引用数据类型 Sti…...

Qt Q_ENUM enum 转 QString 枚举字符串互转; C++模板应用

Part1: Summary 项目中我们常用到命名&#xff0c;使用 enum 转成 string &#xff0c;方便简洁&#xff1b;Qt给我们提供了一个很方便的功能 Q_ENUM&#xff0c;可以实现枚举字符串互转&#xff1b; Q_ENUM宏将枚举注册到元对象系统中&#xff1b; QMetaEnum::fromType获取枚…...

0004.基于springboot+elementui的在线考试系统

适合初学同学练手项目&#xff0c;部署简单&#xff0c;代码简洁清晰&#xff1b; 愿世界和平再无bug 一、系统架构 前端&#xff1a;vue| elementui 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven 二、登录角色 1.管理员 2.老师 …...

基于 iAP2 协议 的指令协议,用于对安防设备的 MCU 进行操作

协议设计目标 1. 安全性&#xff1a;通过 iAP2 协议与 MCU 设备进行安全通信。 2. 通用性&#xff1a;支持对安防设备的常见功能进行操作&#xff0c;如状态查询、设备控制、参数配置等。 3. 高效性&#xff1a;数据结构简洁清晰&#xff0c;易于解析和扩展。 4. 扩展性&#x…...

02-5.python入门基础一控制流(while)

Python 控制流是指控制程序执行顺序的机制&#xff0c;它允许程序根据不同的条件和情况执行不同的代码块或重复执行某些代码。 while 循环的用法与示例 语法结构及要点 在 Python 中&#xff0c;while循环是一种基于条件判断的循环结构&#xff0c;其语法构成如下&#xff1a;…...

Go语言开发入门与实战

Go语言(简称Golang)由Google开发,是一门现代化的编程语言,因其简洁高效、并发支持友好、跨平台特性而在后端服务开发、云计算等领域大放异彩。本文将介绍Go语言的基本特点、开发环境配置,并通过一个简单的实战项目带领大家快速上手。 一、Go语言的特点 简单易学:语法简洁…...

HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例

ArkWeb简介 ArkWeb&#xff08;方舟Web&#xff09;是HarmonyOS Next中提供的一个Web组件&#xff0c;主要用于在应用程序中显示Web页面内容。这个组件使得开发者可以在HarmonyOS应用中嵌入Web页面&#xff0c;从而降低开发成本&#xff0c;提升开发和运营效率。 使用场景 A…...

【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常

发布Windows应用时。在Visual Studio里点击"发布“&#xff0c;将应用与Microsoft Store关联时&#xff0c;一直提示网络错误。 查了一下论坛&#xff0c;发现之前也经常出现&#xff0c;但我是第一次遇到。 不能就这样一直被卡着呀&#xff0c;研究了一下&#xff0c;还…...

springcloud-gateway获取应用响应信息乱码

客户端通过springcloud gateway跳转访问tongweb上的应用&#xff0c;接口响应信息乱码。使用postman直接访问tongweb上的应用&#xff0c;响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类&#xff0c;在该类中获取了上游应用接口的响应信息&#xff0c;直…...

[笔记]关于Qt的nativeEvent事件无法接收window消息的Bug

1.nativeEvent事件无法接收window消息 此处不是nativeEvent不能接收&#xff0c;是possmessage一定要写对发送的软件名称&#xff0c;这个名称在Qt中是主界面类的名称&#xff0c;就是主界面UI的名称&#xff0c;而不是rc文件中定义的名称。 所以在FindWindow函数获取目标窗口…...

LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)

LeetCode 热题 100_K 个一组翻转链表&#xff08;31_25&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;四指针法&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;四指针法&#x…...

Pytorch | 从零构建MobileNet对CIFAR10进行分类

Pytorch | 从零构建MobileNet对CIFAR10进行分类 CIFAR10数据集MobileNet设计理念网络结构技术优势应用领域 MobileNet结构代码详解结构代码代码详解DepthwiseSeparableConv 类初始化方法前向传播 forward 方法 MobileNet 类初始化方法前向传播 forward 方法 训练和测试训练代码…...

CSS系列(18)-- 工程化实践详解

前端技术探索系列&#xff1a;CSS 工程化实践详解 &#x1f3d7;️ 致读者&#xff1a;探索 CSS 工程化之路 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 CSS 工程化实践&#xff0c;学习如何在大型项目中管理 CSS。 工程化配置 &#x1f680; 项目结构 …...

日拱一卒(18)——leetcode学习记录:二叉树中的伪回文路径

一、题目 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 二、思路 …...

hive—炸裂函数explode/posexplode

1、Explode炸裂函数 将hive某列一行中复杂的 array 或 map 结构拆分成多行&#xff08;只能输入array或map&#xff09; 语法&#xff1a; select explode(字段) as 字段命名 from 表名; 举例&#xff1a; 1&#xff09;explode(array)使得结果中将array列表里的每个元素生…...

SpringBoot 新特性

优质博文&#xff1a;IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持&#xff0c;spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux&#xff0c;它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...

鸿蒙app封装 axios post请求失败问题

这个问题是我的一个疏忽大意&#xff0c;在这里记录一下。如果有相同问题的朋友&#xff0c;可以借鉴。 当我 ohpm install ohos/axios 后&#xff0c;进行简单post请求验证&#xff0c;可以请求成功。 然后&#xff0c;我对axios 进行了封装。对axios 添加请求拦截器/添加响…...

消息队列 Kafka 架构组件及其特性

Kafka 人们通常有时会将 Kafka 中的 Topic 比作队列&#xff1b; 在 Kafka 中&#xff0c;数据是以主题&#xff08;Topic&#xff09;的形式组织的&#xff0c;每个 Topic 可以被分为多个分区&#xff08;Partition&#xff09;。每个 Partition 是一个有序的、不可变的消息…...

网络攻击与防范

目录 选填 第一章 1、三种网络模式 2、几种创建网络拓扑结构 NAT模式 VPN模式 软路由模式1 软路由模式2 3、Linux网络配置常用指令 4、常见网络服务配置 DHCP DNS Web服务与FTP服务 FTP用户隔离 第二章 DNS信息收集&#xff08;dnsenum、dnsmap&#xff09; 路…...

文献研读|基于像素语义层面图像重建的AI生成图像检测

前言&#xff1a;本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍&#xff0c;分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade&#xff0c;以及基于语义层面重建的检测方法 SimGIR 和 Zerofake&#xff1b;并对相应方法进行比较。 相关文章&#xff1a;论…...

【操作系统】为什么需要架构裁剪?

为什么需要架构裁剪&#xff1f; 原因 减小核心大小提高架构初始化速度降低内存占用提高系统性能移除不需要的功能&#xff0c;增加安全性 裁剪方法 初始化配置设置功能模块化移除不需要的驱动底层 一般裁剪对象&#xff08;以操作系统为例&#xff09; 文件系统的支持网…...

LSTM长短期记忆网络

LSTM&#xff08;长短期记忆网络&#xff09;数学原理 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;&#xff0c;解决了标准RNN中存在的梯度消失&#xff08;Vanishing Gradient&#xff09; 和**梯度爆炸&#x…...