d的12月会议
丹尼斯
Dennis
首先报告
说,他已开始了一个用@default
来重置
属性的DIP
.它应该影响什么?是否应该重置
所有属性(包括像私
的可见
属性),还是只影响函数
属性?一致
共识是,它应该只影响函数属性
.此后,他提交DIP
,以供草案审查.
拉兹万
@属性
在解决Bugzilla
老问题时,Razvan
遇见了许多@属性
问题.
Walter
和Andrei
过去曾说过,不应再支持这项功能,而且经常建议
人们不要使用
它.但人们仍然在使用
它.那么,该如何处理
它呢?是否应该试修复
这些老问题?是否应该弃用@属性
?
沃尔特建议保持现状
.
拉兹万问,如何处理@属性
问题.找人修复
还是只是记录
行为?Walter
说是后者.还建议添加建议
:最佳实践中要避免@属性
.
现代
软件开发:不只是破坏
别人的代码
,你破坏代码并给它修复工具
.
总结,沃尔特
说@属性
不重要.
Razvan
指出简化
语言是愿景的一部分,这似乎是个很好候选者.Walter
同意.Dennis
建议遍历DRRuntime
和Phobos
查看是否可去除@属性
.
CTFE
版writeln
引入PR
来实现__ctfe
版写行(writeln).wb
随后批准了它.
用traits
减少Phobos
模板膨胀
Razvan
接着指出,编译时间
是近来反复
出现的话题,标准库
的模板膨胀
经常是原因
之一.以std.traits.fullyQualifiedName
模板为例.每一个实例化
都会导致额外
的10
到15
个模板实例
.
此时,改为__traits
改进是重大
.另一方面,一直不愿意添加新的特征
.可用新的特征
减少标准库模板膨胀
,应怎样?
沃尔特说__traits
表明丑陋
.为了减少
常用模板的模板膨胀
,值得添加trait
.
沃尔特接着说,isPointer
很普通(普通函数
不应进入标准库
).除了向后兼容
,他在标准库中删除
了所有是指针(isPointer)
.
对隐式可转换(implicitlyConvertible)
,同样如此.在这两例,他都用等价is
式替换
模板,阿蒂拉
指出,如果是静态映射或过滤
,模板
仍是必要
的,沃尔特说因此
他没有删除它们.
Walter
说消除模板膨胀
的一个方法:扁平化实例化数
.很多时候,Phobos
模板会在不需要
时转发
到另一个模板.Andrei
说,这主要是历史
的,有时,用来避免漏洞
,他同意扁平化
实例化是件好事.
沃尔特说.现在能做的就是减少嵌套模板
.
Razvan
认为这是两个完全不同问题.一个是编译器
很慢.另一个是标准库
模板实现很浪费.需要解决这两个问题.他之前深入研究了hasUDA
,他发现太多递归扩展
,且未提供工具
让用户了解模板
瓶颈.
沃尔特,提出了-vtemplates
报告模板统计信息
的编译器开关
,是在Weka
的要求下添加的.Razvan
说,有人抱怨它没有提供足够信息
.真正缺少的是编译时分析
.
Andrei
建议.多数时候,修改
代码时,并没有更改
模板实例化,而是改变
它周围代码.这就是缓存或预编译
模板想法,这样进一步
编译就不会花费太长时间
,仅当实例化
变化时才编译模板
.编译器
创建小数据库
来保存实例化
.这不是很难.
马蒂亚斯
马蒂亚斯提出json格式
与缓存
问题.
罗伯特
Robert
说D
有很多小烦恼和痛点
.
他指出,在2.101
版本中,JanJurzita
的LSP
(语言服务器协议)实现开始崩溃.编译时间越来越慢
.为什么LSP
实现不随DMD
一起提供?为什么没有编译器守护进程
?为什么构建时间
不小于1秒?为什么要讨论添加@live
,标签枚
,等等?他只是想要一个简单
语言,可以让LSP
开箱即用,不要太疯狂.正在讨论如何修复
内存安全,但这很复杂.让语言更简单.
Robert
说,编译
不再是批处理
.编译器应该是个带内置LSP
的守护进程,文件变化
时编译它们.Andrei
早期的缓存模板
应该有用,要求重写,最好现在就开始干.
Walter
问Robert
是否可提供D问题列表
.Robert
说他会试试.
论坛上有Jai
放弃D
的帖子.Walter
的印象是,该人已提交了多个bug
.但结果是他提交了三个,Walter
已修复了其中两个
,最后是微软C编译器
的ABI
问题.微软文档
中ABI
描述是错误
的,所以代码生成
是错误的.
Robert
重申,他的头号可操作
项目是向编译器
添加LSP
实现.然后,他解释了如果编译器作为守护进程
运行带来的好处
,并举例说明,大改语言时,合并工具
自动更改
编辑器中的代码
.他说Jan
在serve-d
方面的工作非常好.但如果编译器
本地实现它,会更好和更快
.
Razvan
说问题是不支持增量编译
.他提到了过去按库用dmd
,也因此
遇见了问题.Robert
说因此转移
到守护进程
需要全部重写.增量编译
很重要,应该有它.建议大家安装AS
,玩玩Flutter
和Dart
.开发者体验
非常好.Razvan
想知道SDC
是否支持增量编译
.
Bugzilla
到GitHub
的迁移,略.
JSON
解析器
Robert
最近使用和类型(SumType)
,实现了个快速
的JSON
解析器.他想看看是否可用和类型
来表示HTML/XML/JSON/YAML/TOML
.除了按sumtype
值赋值空
,它在@安全
中工作,且很好,实现只有150
行左右,他只用了半个下午
.和类型
真很好,没有std.xml/std.yaml/std.html/std.toml
,标准库中应有它们.
阿里
改进了std.file.dirEntries
性能问题,std.parallelism.parallel
很好用.
安德烈
Andrei
说他做了大量
的C++
编码,这给了他有趣的视角.D
语言可利用好的一个领域
是简化
.更简单
的语言真很有用.他注意到C++
中的一些特征
是为了对抗其他设计
或实现
不佳的特征
而设计的,这增加了复杂性
.
如,缓存模板
实例化.有一些不管用
的(如@属性
),应该删除.阿蒂拉说,除非有"版本"
,才能做一些非破坏性
修改.
阿蒂拉
Atila
说他一直在想DConf
在线应讨论
些什么.他回到了很久以前Andrei
说的更好,更简单
的反射方式
.现在使用的不同的API
很复杂.
为什么不用串插件
呢?只用串插件
来编写另一个Py
包装器库,但该领域没有成熟
技术.编译时间
有多快.(很有趣).调试模板
体验不好.
Andrei
说他和Walter
过去讨论过串插件
问题,这里可.串插件
有两个阶段:一是创建串
,二是插件
它们.他推测创建串
的成本更高.Andrei
认为值得重温,Walter
当时的想法,编译器
应可很容易地一次
创建模块/构/类
的反射
,而不是一片一片
地组装它.你请求反射
,它会给你一个字段
表示信息串
的结构.安德烈建议,如果它在编译器
中,性能
会更好.阿蒂拉直觉是,CTFE
的字节码解释器
会对速度
产生更大影响.
不管怎样,仅是插件
了,而不是使用模板
,阿蒂拉就发现
了性能
上的惊人提升
,最难
的部分是决定
如何构造代码
,用模板
,一切都是整洁干净
的,如果要凭空
制造函数
,可把它放在模板
中,然后实例化
模板.而对插件
,必须为函数
生成串,然后放在某个地方
.
注意到,阿蒂拉
的演讲是对史蒂文
演讲(建模一切
)的补充.
沃尔特
沃尔特一直在研究
已存在了10
年的模块信息
漏洞.似乎没人明白
模块信息的工作原理
.部分
是文档
问题.这是用D的障碍
,需要修复它.
他想继续努力解决内存安全
问题.对营销
没用,但至少在技术
上,可以完成.
把@安全
放在头部
,禁止
取栈地址,禁止
返回引用,且禁止指针算术
.这是需要的安全.D
最好站在Rust
之上,TypeScript
之下.这也是需要
的.但Rust
会接管C++
.Rust
也接管了一些网络
,因为它很容易编译
成wasm
.
沃尔特同意C++
永远不会消失,但会淡出视野.
然后说他最近做
的另一件事是让人们提供遇见问题
的具体清单
.模糊的概括
是没用的.他需要他可以解决
的行动项目.
他必须优先
考虑待办
事项.展望未来
,他在考虑内置的sumtype
,不确定实现时间表.但是经过审查
并可工作的规范
是件好事.唐艾伦
已发布了一些ImportC
问题.他希望先修复
容易问题.
现在面临的一个非常大
的问题是,因为在dmd
中,没有完全实现dll
,在二进制
镜像级别
上,如何表示符号
的基础很不稳固.
像增量编译
等工作,都必须认识到,目前还没有可靠
跨平台基础.也即,很容易遇见这里
我相信必须
相当显著的修改
导出.
在C/C++
世界里,可用宏和编译器级定义
来交换DllImport
和DllExport
,或全部删除
它们.D
不能这样.表明如果不想在窗口
上遇见这些问题,需要更加智能
的导出
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现