博客
关于 GPU、LLM、MLOps、Kubernetes 以及心态的文章 · 829 篇
#2026-03 168#ai 110#llm 90#ai-papers 62#career 60#kubernetes 54#mindset 51#ai-platform 48#devops 42#security 41#deep-learning 35#performance 33#psychology 32#mlops 30#observability 29#2026-04 26#database 23#linux 22#robotics 22#rust 22#ai-agent 21#mcp 20#productivity 20#culture 19#evaluation 19#gpu 18#transformer 18#electronics 17#paper-review 17#pytorch 17#developer-tools 16#distributed-systems 16#engineering 16#learning 16#open-source 16#rag 16#fundamentals 15#network 15#postgresql 15#2026-08 14
Elixir 1.20 的渐进类型系统 — 不写注解也能找到"已验证 bug",实际是怎么回事
2026年6月3日发布的 Elixir v1.20,完成了始于2022年的集合论类型系统的第一个里程碑。现在所有 Elixir 程序无需写一行类型注解就能被渐进式类型检查,编译器在守卫、函数体、分支之间推断类型,找出"一旦执行就必定在运行时炸掉"的违规和死代码。核心是 dynamic() 类型:和其他语言里 any() 会丢弃类型信息不同,Elixir 的 dynamic() 表现得像一个范围,会随代码收窄,只有当提供的类型与允许的类型
2026-07-16 · 27 分钟阅读 #elixir#type-system#beam#compiler#static-analysisKotlin Swift export 进入 Alpha — 正在拆掉 Objective-C 这座桥,但还不到过桥的时候
Kotlin Multiplatform 在 iOS 上一直缴纳的最大一笔税,就是 Objective-C 这座桥。Kotlin 代码要传到 Swift,必须先经过 Objective-C 头文件,而在这个过程中,Int? 会被装箱成 KotlinInt,泛型只保留在类上,suspend 函数会变成 completion handler。Swift export 想要拿掉这座中间桥,让 Kotlin 直接导出给 Swift,并在 202
2026-07-16 · 25 分钟阅读 #kotlin#kotlin-multiplatform#swift#ios#compilerGo 1.26 的 goroutineleak profile — 用 GC 的标记阶段抓 goroutine 泄漏
Go 1.26(2026 年 2 月 10 日发布)在 runtime/pprof 中新增了 goroutineleak profile 作为实验性功能。思路是复用 GC 的标记阶段 — 只把可运行的 goroutine 当作根来标记,然后把阻塞在任何 goroutine 都无法到达的并发原语上的 goroutine 报告为泄漏。核心在于内存可达性是 goroutine 存活性的一个可靠的过近似(over-approximation),
2026-07-16 · 26 分钟阅读 #go#goroutine#garbage-collection#profiling#debuggingKafka Diskless Topics(KIP-1150)是什么 — 用延迟换取的跨 AZ 成本,以及一个尚未交付的功能
2026 年 3 月 2 日,Apache Kafka 社区批准了 KIP-1150 Diskless Topics。这是一项提议:用对象存储取代broker磁盘作为数据的真源,从而消除跨 AZ 复制流量 — 这正是超大规模云厂商环境下 Kafka 成本中最大的一块。但被批准的只是方向,不是实现 — KIP 正文自己写明「本 KIP 一旦被接受,不要求对代码库做任何改动」— 真正的设计文档 KIP-1163 与 KIP-1164 仍处于
2026-07-16 · 26 分钟阅读 #kafka#streaming#distributed-systems#cloud-nativegit history — Git 放在 rebase 旁边的实验性历史重写命令
Git 2.54(2026-04-20)以实验特性的形式引入了名为 git history 的新命令,2.55(2026-06-29)又加入了 fixup 子命令。它把 reword/split/fixup 这三种常见的历史重写操作,用一条命令就能完成,不再需要交互式 rebase,并且会用一次原子性的 ref 事务,把目标提交的所有后代分支一并更新。维护者 Patrick Steinhardt 在提交信息里直接点明了这个功能的动机 —
2026-07-16 · 24 分钟阅读 #git#version-control#jujutsu#rebase.NET 11 runtime-async — 把 async 状态机从编译器搬到运行时的中期报告
C 的 async/await 从 2012 年起就一直是编译器层面的功能。Roslyn 把方法体重写成一个状态机类,而运行时甚至不知道那是 async,只是照常执行罢了。.NET 11 的 runtime-async 把这个重写过程搬进了运行时内部 — 方法上会带一个 MethodImplOptions.Async 标记,挂起与恢复直接由 JIT 和 VM 处理。第一个看得见的成果是「活的」堆栈跟踪从 13 帧缩短到 5 帧,而从预览
2026-07-16 · 28 分钟阅读 #dotnet#csharp#async#jit#performanceeBPF Verifier 只告诉你它在哪儿停下 — 复现 235 例拒绝后测出的诊断落差
用过 eBPF 的人都经历过这种事。Verifier 拒绝了你的程序,而错误信息指向的那一行看起来完全没有问题。2026 年 7 月发表的一篇论文首次把这种挫败感量化了出来。作者从 Stack Overflow、GitHub issue、修复提交和内核自测中收集了 936 个候选案例,在一套固定工具链 — 内核 6.15.11 + clang 18 — 上复现,分析了实际被拒绝的 235 例。结论是 — 47% 的拒绝只返回一个 EIN
2026-07-16 · 29 分钟阅读 #ebpf#linux#kernel#debugging#developer-experienceIceberg v3 行血统 — 行 ID 不存放在文件里
Apache Iceberg 格式 v3 把「为每一行赋予稳定标识符」的行血统(row lineage)写进了规范,而且这不是可选项 — 只要是 v3 表就无条件开启。但这个值并不存放在数据文件里 — 而是通过一条从表的 next-row-id,经快照、清单(manifest),一路继承到数据文件的链条,在读取时才计算出来。这样设计是为了让乐观提交重试时不必重写数据文件,代价是维护血统的责任转移到了每一个 writer 身上。本文沿着规
2026-07-16 · 27 分钟阅读 #iceberg#lakehouse#table-format#data-engineering#sparkFerrocene 通过认证的 core — 编译器是 ASIL D,库为什么却止步于 ASIL B
"Ferrocene 的 Rust 编译器已通过 ASIL D 认证"这句话本身没错,但人们通常从中得出的结论并不成立。Ferrocene 把编译器作为 ISO 26262 ASIL D / TCL 3 的"工具"通过了资格认定,这意味着"可以在使用这个工具的前提下开发 ASIL D 软件",而不是"产出物就是 ASIL D"。真正被你的代码每一行都调用的 core 库,走的是另一套独立认证:2025 年 12 月先以 IEC 6150
2026-07-16 · 37 分钟阅读 #embedded#rust#ferrocene#safety#systemscontainerd 2.3 的 EROFS 原生层 — 去掉解包,换来了什么
2026年4月30日发布的 containerd 2.3,打开了一条从镜像仓库直接拉取 EROFS 文件系统镜像并挂载的路径。不需要解开 tar,整个解包步骤就此消失,取而代之的只剩一次 blob 拷贝。但这并不是大家期待已久的懒加载(lazy pull) — containerd 自己的 seekable-erofs PR 明确写着"写了 chunk table 但没有消费它",镜像整体仍然要提前拉取这一事实没有变。代价也很明确。放弃
2026-07-16 · 26 分钟阅读 #container#containerd#oci#storage#linux为什么向量索引的默认值从 HNSW 变成了磁盘 — Elasticsearch bbq_disk 的权衡
从 Elasticsearch 9.4(2026-05-05)开始,float 向量的默认索引类型变成了 bbqdisk,也就是基于磁盘的 IVF。不到一年时间里,默认值从 int8hnsw 变成 bbqhnsw,又第二次变成了根本不是图结构的磁盘索引 — 这次迁移背后的判断是:向量检索真正昂贵的资源不是算力,而是 RAM。本文梳理了 HNSW 的内存悬崖在厂商基准测试里体现为怎样的数字、BBQ 从原始论文 RaBitQ 那里拿走了什么
2026-07-16 · 35 分钟阅读 #vector-database#elasticsearch#ann-index#quantization#hnsw确定性模拟测试找到的那个 bug — KAFKA-19880,以及该怎么读「零 bug」
确定性模拟测试(DST)把时钟、线程交错、随机数这些非确定性会渗入的来源,全部关进模拟器里,让那些原本无法复现的 heisenbug 可以靠一个种子重新召唤出来。2026 年 3 月,Aiven 把 Kafka 的 Diskless Topics 实现放进 Antithesis 里,跑了大约 2,200 个逻辑小时,结果是零 bug。真正的 bug 却出自对照组 — 他们为了验证而跑的上游 Apache Kafka 原版代码,跑出了 K
2026-07-16 · 26 分钟阅读 #testing#deterministic-simulation-testing#distributed-systems#kafka#antithesisWASI 0.3 的原生 async — wasi:io 消失的原因,以及还没做完的事
2026 年 6 月 11 日,WASI 子工作组批准了 WASI 0.3.0。核心变化是 async 下沉到了组件模型的规范 ABI 里,结果 wasi:io 包整个消失了。这件事重要,不是因为性能,而是因为可组合性 — 在 WASI 0.2 里,每个组件都各自带着自己的事件循环,一旦用上 async,就无法再和其他组件组合(三明治问题)。6 月 22 日,Wasmtime 46 默认打开了 WASI 0.3,运行时这一侧算是真正到位
2026-07-16 · 28 分钟阅读 #webassembly#wasm#wasi#component-model#systemsDebian 开始阻止不可复现的软件包迁移到 testing — 这道关卡究竟挡住了什么,又没挡住什么
2026 年 5 月 9 日,Debian 发布团队把迁移软件 britney 和可复现性检查接在了一起。第二天邮件列表上贴出的那句话是"Debian must ship reproducible packages",但实际被挡住的只有两件事 — 不可复现的新软件包,以及原本可复现的软件包发生回归。本文拆解这道关卡 — reproduce.debian.net 如何用 buildd 留下的 .buildinfo 原样重建已发布的二进制文
2026-07-16 · 31 分钟阅读 #devops#reproducible-builds#debian#supply-chain#ci-cd使用平台的团队吞吐量低8%,变更稳定性低14% — 为什么不能把 DORA 的数据读成因果
截至2026年,内部开发者平台的采用率据报告为90%。然而,得出这个数字的 DORA 报告自身的数据里,也藏着一个令人不安的结果 — 在2024年的报告中,使用平台的用户个人生产力高8%、团队绩效高10%,但吞吐量却低8%、变更稳定性低14%,DORA 自己称之为「令人意外的结果」。更重要的是,DORA 自己提出的三个假设中,有一个是反向因果 — 即已经不稳定、已经燃尽(burnout)的组织,是为了修复这一点才建起了平台。在2025年
2026-07-16 · 30 分钟阅读 #platform-engineering#dora#internal-developer-platform#devex#research-methodsbcachefs 摘掉纠删码 experimental 标签的故事 — 以及这到底意味着什么
2025 年 9 月 29 日,Linus Torvalds 用一次提交从内核里删掉了 117,483 行 bcachefs 代码,bcachefs 从此变成了像 ZFS 一样以 DKMS 模块形式分发的文件系统。戏剧到此结束,2026 年真正的新闻另有其事 — bcachefs 的纠删码(相当于 RAID5/6 的功能)摘掉了 experimental 标签。可网上流传着一句转述这件事的话,日期、版本、对象全都错了。实际上是 v1.3
2026-07-16 · 25 分钟阅读 #linux#kernel#filesystem#bcachefs#storageClang 22 的 MSVC ABI 改动 — vector deleting destructor,以及仍留在 22.1.x 里的 delete[] 堆损坏
Clang 22.1.0(2026-02-24)在面向 MSVC ABI 时的析构函数代码生成上改了两处。一处是把 ::delete 的处理方式和 MSVC 对齐,另一处是加入了 vector deleting destructor 支持,让一个 2014 年提出的 issue 花了 11 年 7 个月才关闭。这两处都是真正修 bug 的改动,但因为改变了进入 vftable 槽位的符号,是一次 ABI 改动,所以如果混用 clang
2026-07-16 · 26 分钟阅读 #llvm#clang#cpp#compilerC++26 契约(Contracts) — 以 114 票对 12 票通过的特性,以及唯一的实现 GCC 16.1
2026 年 3 月 28 日,WG21 结束了 C++26 的技术工作。这次表决并非全票通过(赞成 114、反对 12、弃权 3),而不一致的主要原因是契约(contracts)。契约让你能用 pre、post、contractassert 在语言层面写下前置条件和后置条件,但这些检查是否真的会在运行时执行,决定权不在源代码,而在构建配置 — 标准原文写的就是「实现定义(implementation-defined)」。反对方用头文件
2026-07-16 · 28 分钟阅读 #cpp#cpp26#contracts#wg21#gcc2026 年 10 月 11 日,根 KSK 将会更换 — 现在根区里到底有什么
作为 DNSSEC 信任锚的根 KSK,将在 2026 年 10 月 11 日从 KSK-2017 切换到 KSK-2024。对大多数解析器来说,多亏了 RFC 5011,这根本不算个事;但对于没能更新信任锚的验证解析器来说,那一天就是悬崖 — 所有查询都会以 SERVFAIL 崩溃。本文从直接查询根区、看看现在里面到底有什么开始,梳理了 8 阶段、跨 6 年的更换日程,RFC 5011 的 30 天保持期(hold-down),201
2026-07-16 · 39 分钟阅读 #network#dns#dnssec#security#protocolROV 挡住了什么,ASPA 还挡不住什么 — 2026年6月 Telegram 劫持事件与路由安全的下一层
2026年6月16日,印度电信商Rcom(AS18101)劫持了Telegram的前缀,据Kentik测算,看到这条劫持路径的自家BGP数据源只占1.6%。这是RPKI ROV真正发挥作用的一个案例。但这是因为这次劫持没有伪造origin,手法很拙劣;而ROV的结构性天花板在于,它完全看不见路由泄漏(route leak)——也就是origin依然合法、但路径本身走错方向的情况。填补这一空白的ASPA已于2026年7月10日进入IETF
2026-07-16 · 33 分钟阅读 #network#bgp#rpki#routing#security