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不能这样.表明如果不想在窗口上遇见这些问题,需要更加智能的导出.
浙公网安备 33010602011771号