2023 总结
Posted on
概括
今年是我第一年持续参与开源贡献工作,我修复了许多错误编译,也增加了一些缺失的优化。还有一些我不知道如何归类,涉及各种内容,比如 LTO、DebugInfo,内置函数和 WebAssembly,甚至还有 Apple Silicon 相关。
在这个过程中,我得到了许多的人的帮助,尤其是审核我的 PR 的人,非常感谢。(●´∀`●)
一些值得注意的内容:
- 我搞清楚了一个长期存在的 LTO 下调试信息损坏的问题
- 我将 Rust 中内置函数的 crate 也添加进 LTO,这也是一个长期存在的问题
- 为了更方便的交流,我给自己起了一个英文名:Quentin Dian
我使用这些表情对相关工作进行分类:
- 💢 指错误编译
- 🍻 补充缺失的优化
- ℹ️ 与调试有关
- 🦀 与 Rust 有关
- 🐉 与 LLVM 有关
- 🐦 与 Swift 有关
- 🍎 与 Apple 有关
- ⏳ 被其他问题阻塞
LLVM
提交记录:https://github.com/llvm/llvm-project/commits?author=DianQK&since=2023-01-01&until=2023-12-31。
对了,我的第一个 LLVM 提交是:[MachineOutliner] Fix the side effect of outlined function when the register is implicit use and implicit-def in the same instruction. D112911。
- 🍻🦀⏳ [SimplifyCFG] Check if the return instruction causes undefined behavior D144319 被 PR69498 阻塞
- 🍻⏳ [SimplifyCFG] Improve the precision of
PtrValueMayBeModified
D144563 跟随 D144319 的提交,尽管这没有被 PR69498 阻塞 - 💢🦀 [SROA] Remove UB-implying metadata when promoting speculative instruction. D148456 修复 PR110256
- 💢🦀 [GlobalOpt] Don't replace the aliasee if it has other references. D145293 修复 PR108030
- 🦀🐦ℹ️ [Verifier] definition subprograms cannot be nested within DICompositeType when enabling ODR. D152095
- 🐦ℹ️ [Coroutine][DebugInfo] Update the linkage name of the declaration of coro-split functions in the debug info. D157184
- 💢🦀 [TailCallElim] Remove the readonly attribute of byval. D156793
- 💢🦀 [JumpThreading] Invalidate LVI after combineMetadataForCSE. #65219
- 🍻🦀 [EarlyCSE] Compare GEP instructions based on offset #65875
- 🍻🦀 [SimplifyCFG] Hoist common instructions on switch #67077
- 💢🦀 [MemCpyOpt] Merge alias metadatas when replacing arguments #67539
- 💢🦀 [LVI][CVP] Treat undef like a full range #68190
- 💢 [LVI][CVP] Treat undef like a full range on abs(x, false) #68711
- 💢🦀 [MemCpyOpt] Combine alias metadatas when replacing byval arguments #70580
- 💢🦀🍎 [AArch64] ORRWrs is copy instruction when there's no implicit def of the X register #75184
Rust
提交记录:https://github.com/rust-lang/rust/commits?author=DianQK&since=2023-01-01&until=2023-12-31
除了更新测试用例等简单 PR,其他都是围绕 builtins & LTO 的 PR:
- Add the
no-builtins
attribute to functions whenno_builtins
is applied at the crate level. #113716 - Restore
#![no_builtins]
crates participation in LTO. #113923 - Add thinlto support to codegen, assembly and coverage tests #118036
- Avoid adding builtin functions to
symbols.o
#118568
尽管在这个过程中解决了很多问题,不幸的是,仍然有一些已知问题需要解决。在解决这些问题之后,我会提交相关的 MCP。
Ruslin
我使用 Joplin 记笔记,但我不喜欢 Joplin 的 Android 客户端。为此我编写了一个兼容的客户端:ruslin-android。很抱歉最近一直没有更新,我会在明年尝试调整一下我的业余时间。事实上我也在考虑桌面端的开发。
其他项目
- ℹ️🍎 [swift][IRGen][DebugInfo] split method declaration and definition. #67077
- ℹ️🍎 [swift][Backtracing][Linux] Support the
DW_AT_specification
attribute. #67592 - 🦀 [wasm3] Fix the issue of incorrectly freeing the stack address when unwinding local functions. #436
- 🦀 [dioxus] Fix the issue of duplicate unique ID for atoms using
newtype
. #1112
个人相关
DianQK 只是我随意起得中文笔名靛(Dian)青(Qing)K的拼音缩写,靛青指 indigo。这导致大家不知道该如何称呼我。为此我向 ChatGPT 询问了一个名字:Quentin Dian。所以你可以叫我 Dian 或者 dianqk 都可以。
曾经我一直在使用 Arch Linux,现在我全部切换到了 NixOS,这是个很棒的操作系统,我可以用代码管理一切。
为了提高我的效率,我还购买了 GPD 掌机,上面的大部分代码都是我在地铁上使用 GPD 完成的。我还组装了一台 7950X 主机,这将我的本地构建时间缩短了一半,我可以在几分钟之内完成一次全量编译。我还买了一台 Mac mini(M2),这样我就可以测试这个平台的问题了。