2015D会议上
1地址
2地址
幻灯片
地址在http://dconf.org/
的2015/2016
里面找.
问:沃尔特和安德烈
,是否引入宏
.答案:不
!.
Walter Bright
,分配内存策略:尽量惰性,不分配区间
,分配策略应交由更了解数据生命期和使用模式
的用户
,才能做出最佳选择
.
呼吁要求用返回区间
来代替返回数组
.来使d标准库
对无垃集
编程更高效和友好.
Daniel Murphy/yebblies
用ddmd
,翻译C++
至D
源码.在此,翻译原因:D
更易编写,提高士气,更易重构,并提供可提高性能的新功能
.而SDC
是从头编写的.
C++
是预处理器和实际语言的语义
组合起来语言.因而D
放弃预处理
器.花了2年多.
Brian Schott(libdparse作者,飞行员)
,讨论了dfmt
,D
风格的检查器
.DCD
补全.如dscanner -d some_symbol_name source/*.d
.比grep
有优势.
SIMD
,可通过扫描无用
示例,来优化.dfix
目标是作为重构代码工具
.这是自动修复代码并帮助迁移到新编译器版本的程序
,首先是能重命名模块或函数
并自动更新其实例.这很难.
Liran Zvibel(Weka.io)
使用d
.
为了获得最佳性能
,他们编写了零复制,无分配和无锁的
高效内存代码.为了更易理解代码,他们用了纤程,反应器
和基于D
的编译时反射的RPC
框架.
写了个libdparse和静态生成代码
来自定义跟踪框架
来辅助代码
,及二进制存储系统
,存储整
而非串
来最快.而无锁移动系统到共享内存
允许它在不暂停系统
下快速记录有用信息.
并介绍了用编译时反射
通过查看常规D
接口声明来生成与远端节点
通信代码的IPC
系统,D食谱
的第8/9章
有相应基础技术.作者:这种生成技术
对编译时速度
有影响.不是用插件(代码)
,而是用pragma(msg)
来输出,然后用makefile
来保存至文件
再利用相应缓存
.
Liran
说,该方法,比使用C
的外部工具简单
多了,且运行时
仍然相当高效.还编写了自定义断言和反射助手
,创建了本地光纤存储和光纤调试助手
及许多无垃集高效数据结构
.
挑战:垃集
无用,编译器占用太多内存
,无法扩展使用所有内核.AA
说,可尝试一次打包编译
,可更好并行
,且避免模板实例化
的边角情况.我指出迁移到ddmd
后要修复并行化
及使用内存
问题.
gdc/ldc
有链接时优化
,而dmd
没有.还有C
函数需要内联
来获得良好性能,而D
中没有.还有小于整
的类型
提升问题,私导入用途
不大.同时由于循环导入/排序
问题,模块构造器/析构器
用处不大.值区间传播,在正确性/方便性
上还差点.
D
替换py/C
,极大提高了
他们的生产力,他们大量使用D
的独特特征
,这是值得
的.唯一大的缺点的是还可更好支持大型实时项目
,而该演讲是他们成功用D构建大型实时项目
.
David Nadlinger
,druntime
的实现.讲解了druntime
的包和一些如TypeInfo和ModuleInfo
类.他描述了异常处理,指出它是编译器/平台
相关的.并概述了标记和清除
的垃集
原理.
并讨论线程本地存储
的实现,并与共享库
工作的挑战.没必要有个静每线程表
,表明存储在哪.可在多个程序中加载动态库
.
W.B
说,由于间接查找
,线本全局变量没有,访问局部变量(快得多)
高效.
David
还描述了纤程的工作原理,注意,用纤程实现TLS
和异常比较难.详细介绍了共享库和注册模块
,描述_Dmodule_ref
工作.它是编译器用C全局构造
函数创建的模块链表
.d内核代码
中你应该见过.这里引用
是空针
原因是,你写自己的_start
,跳过C
的运行时初化
,根本没跑构造器
.现在是_d_dso_registry
函数,这是编译器
生成调用,由Martin Nowak
编写.
--gc-sections
选项,可能不管用,但管用时,可减小ldc2
大小.
Amaury Sechet/deadalnix
,讲了内存,CPU 缓存,并发防护
.内存很慢,要放在cpu缓存
中.列出些缓解慢速内存问题的重要技巧:1,打包数据来减少占用内存.2,尽量放栈上(热缓存).3,线性访问数据避免间接访问和分支代码(帮助预取器抓正确内容).4,调整数据大小,使其适合缓存行
.
CPU
缓存一致性的基础是,内核拥有缓存行
的所有权,并在不脏时共享.提示我们避免共享和写入内存
,即尽量共享不变
数据并写入线程本地
数据.D
也鼓励用线本
数据.
如要跨多线程
共享可变
内存,确保共享块占用完整的64字节,避免跨线程
同块的两个不同共享变量
在多个缓冲行.
虽然x86
尝试自动保持内存一致性
,但也不能过多降低性能,如StoreLoad
内存栅,要x86
上要显式.这由mfence
触发.作者说:D通过内联汇编
公开,我相信内在(intrinsics
),arm
要求明确指定所有内存栅
.
很难测试这些问题.D
默认线本,显式共享,多核仍可依赖的传递不变
,可帮助.
共享
都很难使用,应该小心使用.垃集/d运行时/编译器接口
多核友好.sdc
是Amaury
对d编译器
的重写,用制作线程局部堆
.用写栅
来帮助gc暂停
.因而占用更多内存
,一般只用共享不变值
.问题:不变闭包
在D
中可能有可变上下文指针
,终止线程
时异常可能跨线程行
.
父调用Thread.join
时,可能抛干掉线程
的异常.分配后,纯
提升为不变
,垃集
如何知道在不变堆
中分配?提出:对不变信息
造分代
垃集.加更好检查
转义引用,并自动释放它们,尽量移动至栈
.并改进内联器
来最大化效果.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现