文章与博客推荐

平时上班摸鱼和业余会看一些博客和技术文章,其中有一些我觉得不错的,记录在这里。

业界新闻/趣闻

  • Why Safety Profiles Failed
    • 2024 年 10 月
    • safe cpp 提案作者、Circle C++ 编译器作者写的文章
    • 他前段时间提出了 safe cpp 提案,在社区中引起了巨大争议
    • 这篇文章则是狠狠批评了 C++ 之父 BS 和现在的 C++ 委员会主席 Herb Sutter 主张的另一种叫作 safety profile 的方案
  • What’s new in Windows 11, version 24H2
    • 2024 年 10 月
    • Windows 内核中的 Rust 首次进入正式发布
    • 先前 Windows 自家也有宣传,也有人在内核组件中发现了 Rust 符号
    • 不过这还是第一次正式进入大众视野,略有些纪念意义吧
  • 维护者 Serge Semin 的告别信
    • 2024 年 10 月
    • Linux 移除俄罗斯维护者名单事件的其中一位被移除者写的告别信
    • 真情流露,颇有一种托孤之悲壮,令人难以平静
  • Eliminating Memory Safety Vulnerabilities at the Source
    • 2024 年 9 月
    • 安卓将关键组件(蓝牙、WiFi 等)从 C/C++ 迁移到内存安全语言(如 Rust)
    • 观察到的内存安全漏洞显著减少
  • The secret inside One Million Checkboxes
    • 2024 年 8 月
    • 有趣的互联网小故事
    • 作者在 2024 年 6 月发布了一个名为「百万复选框」的网站,它上面有一百万个全局复选框,选中(或取消选中)一个框会立即为网站上的每个人更改它
    • 在网站在线期间,它的受欢迎程度远超作者想象:两周内有五十万名玩家勾选了超过六亿五千万次复选框。
    • 在这期间发生了一些充斥着技术浪漫的故事
  • CSS finally adds vertical centering in 2024
    • 2024 年 8 月
    • 2024 年,css 终于添加了一个(直白的)垂直居中的方式
  • JavaScript Bloat in 2024
    • 2024 年 2 月
    • 作者用特定的方法查看了一些著名网站的 JavaScript 大小(我不太清楚 ta 的方法是否准确)
    • 然后发现这些号称使用现代前端技术的网站动辄十几乃至几十 MB
    • 有趣的是,真正关心性能的是 Pornhub,只有 1.4 MB
    • Reddit 上有人说这些大小其实主要来自于广告跟踪器、第三方营销工具、Datadog、Rollbar 等。用广告拦截器之类的东西可以显著降低
  • In Loving Memory of Square Checkbox
    • 2024 年 1 月
    • 有点意思的文章,讲单选框 (radio box) 和复选框 (check box) 的历史
    • 操作系统 UI 有一个长达 40 年的不成文的传统:单选框一定是圆形的,复选框一定是方形的,这样人们可以轻易辨别出到底是单选还是多选
    • 但是今年 (2024),苹果终于放弃了这个传统,它的新 visionOS 将有圆形复选框
  • Digg’s v4 launch: an optimism born of necessity.
    • 2018 年?
    • 一个用 python 的创业公司,因为函数参数给了默认值,而倒闭(可能略有夸张)
    • 参数写错然后导致程序一直 OOM,在业务最高峰的时候停摆,等修好之后已经寄了
    • python 函数的默认参数是定义时求值而非调用时求值,所以多次调用时,默认参数的实例是同一个,还挺反直觉的

精品文章

  • Socrates is a state machine
    • 很有趣,滥用 Rust async/await 生成状态机,从而在 stable rust 模拟 generator
  • Take a break: Rust match has fallthrough
    • 用 label break 模拟 switch 的 fallthrough,很有趣
  • aposd-vs-clean-code
    • 《软件设计的哲学》和《代码整洁之道》作者的辩论
    • 感觉 uncle bob 有点太偏激了
  • The two factions of C++
    • C++ 作者 BS 喜欢强调「C++ 没有方言」
    • 但在本文作者看来,C++ 没有方言的梦可能已经破灭了许多年
    • 作者认为 C++ 领域中最明显的分野是:
      • 相对现代、能力充足、将其代码作为资产的技术公司
      • 其他人,更古老、更固执、更跟不上时代的用户
    • BS 和 HS 很喜欢强调 C++ 数十年来的遗产,使得语言演化必须要最小化对已有部分的修改
    • 但谷歌等公司(使用相对现代的 C++、拥有自动化工具和测试以及现代基础设施)的需求与(非常强烈的)向后兼容性愿望之间存在明显的脱节
    • 所以,作者认为,至少在工具上,C++ 被分为了两个明显的阵营
    • 原文挺精彩,这里的概括很不完全,建议阅读
  • Type Inference in Rust and C++
    • 对比 Rust 和 C++ 的类型推导,包括为什么二者发展为这样
    • 当然免不了调侃一下 Swift 臭名昭著的极慢类型推导
  • Are we observable yet? An introduction to Rust telemetry
    • 虽然是比较久之前的文章(2020 年 9 月),但是也尚不算过时
    • 介绍了可观察性的概念,从为什么到是什么到如何做
    • 介绍了 Rust 中的相关 crate,带有丰富的示例
    • 写得很好。作者的书《Zero To Production In Rust》也很不错
  • Visitor Pattern Considered Pointless - Use Pattern Switches Instead
    • 用现代 java 的 sealed interface 和模式匹配代替 visitor 模式
    • 更简洁、更自然、更灵活、甚至可能性能更好
    • 所以有人说设计模式是为了弥补语言缺陷
  • Semantic Compression
    • 作者表达了对面向对象思维的怀疑,提倡所谓语义压缩
    • 大致可以认为是:不要先以对象思维、抽象思维编码,而是面向过程地编写后,再提炼精髓
  • Rust, reflection and access rules
    • 思考如果 Rust 有反射(无论是静态的还是动态的),它如何与访问规则交互
    • 由于 Rust 是一个系统编程语言,它有一些额外的权衡
    • 尤其是需要考虑到内存安全问题
  • Parse, don’t validate
    • 提倡类型驱动设计的文章,非常值得一看
    • 尽管代码示例是用 haskell 写的,核心思想还是通用的
  • Semantic Versioning Will Not Save You
    • 作者认为:依赖于 SemVer 会伤害用户
    • 有一定道理。读一读可以更多思考项目、依赖、开源库之间的复杂关系
  • Windows NT vs. Unix: A design comparison
    • 如题,比较 Windows NT 和 Unix 系的设计不同
    • 看了这篇文章真有点感觉 Windows NT 比 unix 系好多了(毕竟它是后来者,有足够的经验可以吸收)
  • Why LSPLSP could have been better
    • 对 lsp 的一些思考。作者 matklad 是 rust-analyzer(rust 的语言服务器)的主要开发者,可能是世界上对 LSP 理解最深刻的人之一了
    • 提到 lsp 是如何做抽象的(很有意思,不是以共性为中心,而是以表现为中心),为什么可以成功
  • How to ask good questions
    • 开发者社区中很多人可能都听说过提问的智慧
    • 作者认为它是「很受欢迎且充满敌意的文档」,比如它开头就写「我们称这样的人为“失败者”」
    • 他提出了一些略微温和的准则。至于到底如何更好,见仁见智吧
  • Recursive (Re-entrant) Locks
    • 主要是对可重入锁的批判
  • Beyond Ctrl-C: The dark corners of Unix signal handling
    • 关于 unix 信号的一篇不错的科普文章,有一段是关于 async rust 的,其他的部分适合所有人
  • Driving Compilers
    • 一个不错的系列,讲 c 如何从源文件编译链接最后加载的整个过程,总体比较简洁,熟手拿来查漏补缺也不错
  • 沅有芷兮:类型系统的数学之美
  • What a good debugger can do
    • 主要讨论了一个优秀的调试器应该具备的功能和特性,不只是断点调试,大开眼界。
    • 剧透:列断点、tracing 断点、数据断点、多线程调试、热重载、时间旅行、全知 (Omniscient) 调试
  • How to Test
    • matklad(rust-analyzer 的主要开发者)的文章,讲述一些测试的理念,引人深思
  • The curse of strong typing
    • 实际上是一篇 Rust 的教学文章,由浅入深,主要是关于类型系统的。
  • A fork() in the road
    • 微软发表的论文,反对 UNIX fork(),列举了诸多 fork() 的坏处,并提出了一些替代方案
  • Tour of Rust’s Standard Library Traits
    • 介绍 Rust 标准库的 trait,挺全面的
  • Sizedness in Rust
    • 和类型「大小」相关的概念。比如 Sized trait,dynamically sized types(DST),zero sized types(ZST)
    • 对于系统编程语言(主要指 C/C++/Rust 等,一般无 GC)而言,类型的大小是一个非常基本的限制,会影响到语言设计的方方面面,也是这类语言复杂性的一个常见来源
    • 因此这篇文章虽然主要是关于 Rust 的,但是对 C/C++ 的理解也可以有一定启发作用

书籍教程

  • Rust 异步运行时基础部件
    • 设计和实现简单的异步运行时
    • 其实还是有点简陋的,但是查漏补缺也不错
  • Crafting Interpreters
    • 实践编译原理知识的绝佳好书,同时也是练习工程开发的很好材料
    • 真正地在教学工业界使用的技术,也会适当扩展各种语言实现的趣闻、语言设计的思考等
    • 虽然实现语言是 java 和 c,但原理相通

博客/时事通讯/播客推荐

版权声明:本文采用 CC BY 4.0 进行许可,转载请注明出处。

本文链接:http://idlercloud.xyz/posts/tech/recommend_articles/