D语言基金会2022
年10
月的会议是季度性的,即有几个行业代表参加了会议.会议在2022
年10
月7
日14:00UTC
的JitsiMeet
举行.
以下人员参加了会议(名字旁边有DLF
的人或为D语言基金会董事会成员,或为受薪员工,或为附属志愿者
):
1,安德烈.亚历山大雷斯库(AA)
2,Mathis Beer (Funkwerk)
3,沃尔特.布莱特(DLF)
4,伊恩.布克劳(DLF/GDC)
5,Ali,Cehreli
(DLF/梅赛德斯奔驰
北美研发部)
6,Max
豪顿(DLF/对称
)
7,马丁.金克林(dlf/ldc)
8,丹尼斯.科佩尔(DLF)
9,马里奥.克洛普林(Funkwerk)
10,MathiasLang
(DLF/Symmetry)
11,RobertSchadek
(DLF/Symmetry)
12,巴斯蒂安.韦洛(SARC)
马丁说,很高兴看到dub
最近工作.
在LDC
方面,他目前正在合并dmd
和d运行时
库前,合并D运行时
和D前端
的中间步骤,这是改变如何合并D运行时,D前端
和DMD
测试套件到LDC
的第一步.
他报告说NicholasWilson
接受了些外部帮助
来赶上LLVM
中累积变化.它总结了些变化,并指出这很重要
,因为它为支持LLVM15
和16
奠定了基础,这两个版本
都有重大变化.
关于ImportC
,目前支持
还不错,但希望不要在胶水层
中出现太多
特例.已完成位字段
了.
现在,他已看到了一些与获取
,在D
中按常量
分配而在C中在栈上
分配的结构体字面
地址相关的测试用例
.在DMD
中,这是通过更改胶水层
来修复.他希望这类事情越少越好.
ImportC
初化器列表仍然在AST
中,但另一个胶水层
问题是C中
多维静态数组
的初化器.该初化器仍然有一些LDC
不支持的C初化器列表
.因此,他认为可转换
它们为D初化器
,这样就不必担心C初化器列表
.他给的另一个示例
是,当串字面
长度比数组
长度短时,用串字面
初化静态数组
.
只要特例数
不增加,Martin
就很高兴.因为已修复ImportC
的问题,他不希望每个
版本都需要
更多代码.而LDC
是D编译器
.可编译C
不错,但主要用例
是可导入C头文件
,以便与外部
编译的C代码
互操作.
关于,切换
根导入顺序
可能会编译错误
.他说,他已微调整DMD
了来修复特定测试用例
,但打开了前向引用
问题,主要问题是@safe推导似乎依赖语义分析的顺序.属性推导
还有其他问题.
Bastiaan
报告说,随着代码库
增长,SARC
经常遇见DMD
崩溃的问题.好消息是,LDC
编译得很好,他认为可能是DMD
耗尽了栈空间,LDC
只是分配
了更多的栈空间.Martin
说他最近已把栈限制从8MB
增加到16MB
,可能就是原因
.即将发布的DMD2.101.0
版本包括相同的栈限制
增加.)
上次会议上,允许更改可抛
的内部跟踪信息
,给栈跟踪加了些颜色
,他有了概念验证
,但还要准备.
还更新了构建包
的问题.会议前几天,构建包
已完全坏了.D机器人
在10
月1
日左右崩溃
,所以没有计划,构建包
一直不工作.会议前,搞定,它比以前慢了一点.但是可工作.现在可更新它了.以前问题
是依赖项列表
是静态
的:无法控制
它.如,因为无法更新LLVM
,一直在使用LDC1.29
版本.
他认为构建包
是拥有的最好的CI
之一,因为它在实践
中测试
了其他人
的代码,并抓住
了大量的回归
.前进的方向是同吉动作
整合.现在,几乎每个人
在他们的GitHub
仓库中都有动作
,所以如果可
以他们的动作
定义作为测试基础
,那将是惊人
的.这不是很简单
的.但他认为这可行.
丹尼斯已实现DIP1035系统变量
,参考,并要求沃尔特
审查.沃尔特已合并
,在此,而Dennis
开始实现命名参数DIP
,1,2.
还偶然发现了循环推导属性
问题,检查函数调用
是否安全
可能会导致认为它是不安全
的悲观假设
.他已考虑过修复
该问题,他认为此时,乐观
假设函数是安全
的是可能的.他希望确保从悲观
向乐观
方法转变
不会造成很大
的安全漏洞
.
接着提出指示起始地址.Iain
已在D的GitHub
项目中发现了它的一些用途
,而它只支持32
位窗口OMF
目标.维护不麻烦,Walter
回忆说,人们经常在32
位版本
中使用它,并且它是所有x86
的C编译器
都支持的扩展.Mathias
不认为删除
它会给带来好处,Walter
同意了.
他报告说,GCC
内部在编译器
的发展方向上有些非常有趣的,如,添加了自动初化
所有静态变量
为0或位掩码
的选项.这对他来说是个好消息,因为他现在必须在GDC
中手工memset
.如果中端
可做这些,那就是个胜利.
马西斯说,现在Funkwerk
的编译器状态
相当不错,他没有发现严重的编译器问题
.
现在有了librebindable
,可扩展不变
功能.所以现在他们正在,处理以前是"伪右值结构体"
的内部数据类型
,并把它们变成完全不变
结构体,看看效果.
他发现它破坏了关联数组
.#22244
问题总结了该问题.从而使用不爽
的大量的强制转换
.
如何允许关联数组
修改数组,但同时防止再次修改数组
,且禁止对它的可变视图
?他在找反馈.
Robert
建议不要修复
,因为修复
它会产生漏洞
.且可跟踪
变量,Walter
同意.
马西斯说,这提出了不变
数组和关联
数组应如何一起工作
的问题.Robert
认为它们不应一起工作,并建议最好用自己的哈希映
,常
也有同样
问题.
马西斯说Funkwerk
,有内部hashmap
类型,可很好
解决该问题.他只是说语言可放松来减少痛苦
.
Robert
提到了头常
,但坚持认为不应去那里.Andrei
建议为了保证C
和C++
的兼容性,需要头常
.Walter
说ImportC
不支持头常
.他的C经验
是人们一般认为C中
的常
是可传递的.所以在ImportC
中,他把头常
变成了可传递
的常
,效果不错.
马西斯说真正需要的是可变头
.Walter
说头常
不错,但头不变
不行.他曾多次考虑添加头常
,但这会破坏D的类型系统
,而且可能会引入一大堆编译器错误
.有几个头
点头表示同意.
dip10002
丹尼斯,准备了一些为dmd
贡献的视频
教程.
项目面板
最后,马克斯
正专注于完成浮点模拟
.
Andrei
会带着他的财政部帽子
来请行业代表
向雇主
要些赞助.
接着,他提到了Walter
和Dennis
为消除DIP1000
错误的工作.他很好奇
业界人士是否在找更安全的D语言
.他还认为,应考虑重命名"DIP1000"
来方便外部人士理解.这触发了DIP1000
和@live
关系讨论,然后是沃尔特的DIP1000PR
数,挂起的构建包
失败,头常
,C
和C++
兼容性,rust
营销成功,等等.
马西斯,关于不用"@live"
:他认为Rust
制造了认为只有活(live)和借用检查
才能保证代码安全
的错误印象
,但是,他相信通过复制
,或信任引用计数器或垃集
也可保证代码安全
.
他说借用检查器
可在性能和安全
之间平衡.对那些追求新语言性能
的人来说很重要.但Funkwerk
的所有性能
提升,都是通过算法
实现的.它们运行在内存为80GB
的服务器上,因此不需要微优化安全性
.即,他认为从语言,用户和市场
角度来看,这是个好主意.
Walter
说,使用GC
,不需要借用
检查器,但是有个借用检查器
可保证,不使用GC
时也没有泄漏
.因此,尽管在D中这些问题
应该是罕见
的,但可能会发生.他想弥补
该漏洞.Rust
的想法已100%
成功地解决了内存安全
,为了竞争
,也应该这样做.
Andrei
谈到了Rust
如何非常有效
地把内存安全
作为优秀
系统软件的最终目标
来销售,并引用了微软Azure
首席技术官MarkRussinovich
的一条推文作为示例,该推文称是时候放弃C
和C++
而支持Rust
了.我们也在@live
上工作,为什么不利用他们的市场营销
呢?
Bastiaan
说,SARC
原则上对安全
感兴趣,但不会持续很久.由于他们的代码库
是从Pascal
编译为D
,依赖大量不安全的侵改.删除
这些侵改
并实现@安全
还很早.
还讨论了D的可选@live
与完整
借用检查器,Dennis
转述了AdamRuppe
和TimonGehr
之前在论坛上发表的评论,他们认为不可能拥有100%
内存安全及可选的@live
.
Walter
说Rust
也有不安全
代码,如果愿意,可用Rust
借助不安全代码并禁止借用检查器
,来写完整程序
.他认为在@live
函数中,让借用
检查器保证
就足够了.
Martin
认为在谈论100%
的内存安全时应该谨慎,因为编译器
问题不断太多.Walter
强调,因此测试套件
很重要.每个被修复的漏洞
都会进入测试套件
,就像只会向前移动
的轮子.马西斯指出,如果编译器
功能增加,可能特例
会成倍
增加.沃尔特同意
这是潜在问题.
接着,他说他已检查了ImportC
的bug
列表.他从最严重的bug
开始,然后工作.仍然有一些PR
因为构建包
而卡住.他认为ImportC
状态很好,很满意,并且相信它给D
带来了竞争优势
.
导入C
漏洞少些后,就会去DIP1000
抓漏洞
.接着就是@live
.
Walter
希望社区中人们,在DConf
之外展示D.只需要宣传D
中如何干这件工作
.
Walter
谈到了最近的一个尴尬
.有人遇见了DMD
在分配
时随机崩溃的问题.Walter
确信他在调用
时总是在检查溢出
,然后他和Dennis
检查了代码库,发现DMD
中有很多分配
没有检查溢出
.他刚刚发布
了几个PR
来修复该问题,所以现在,当DMD
耗尽内存时,它总是会打印错误消息
来说明该点,而不是产生其他类型的随机失败
.