HackerURLs

一次又一次被重新发现的经典。

同一个链接,相隔一年以上,一次又一次被人重新发现、再次冲上 Hacker News 首页。能经受住这种时间检验的,大多是值得一读再读的文章。每篇附中文标题,讨论最热的那些再加上中文导读和高赞评论翻译。

从名人堂开始
  • 4,700+篇经过时间检验的经典

Hall of fame

名人堂

在经典库里看全部精选

上首页次数最多、而且有中文导读的 30 篇。时间轴上每个黑点是一次上首页,空心点是一次没冲上去的投稿。

  1. 正在载入经典…

Archive

经典库

按第一次上首页的年份分布,点柱子筛选。

排序

    About

    这些经典是怎么挑出来的

    1. 01

      合并同一个链接

      读取 Hacker News 自 2006 年以来的全部链接投稿,把 http/https、www、跟踪参数等写法不同的同一篇文章合并成一条。

    2. 02

      只留经得起时间的

      同一链接至少两次拿到 50 分以上(约等于上首页),而且两次相隔一年以上;再由 AI 剔除状态页、产品首页和新闻事件。

    3. 03

      写导读、译评论

      上首页次数最多的 2,000 篇配上中文导读、"为什么经久不衰",并精选翻译 HN 高赞评论。导读由 AI 生成,可能有误。

    编程与软件工程petevilter.me

    用 Datalog 把 IDE 翻个底朝天

    Turning the IDE Inside Out with Datalog

    2次上首页
    2年跨度
    533累计得分
    100条评论

    2020 — 2022,它一次次回到首页

    黑点是上首页(≥ 50 分)的那次投稿,空心点是没冲上去的投稿,点越大分数越高。

    导读

    这篇文章介绍一种把 IDE 架构「翻过来」的思路:把代码、类型信息等表示成 Datalog 数据库中的事实与规则,让类型检查、跳转、补全等 IDE 功能都变成对该数据库的查询,而不是用命令式代码各写一套。作者以自己实现的原型为例,展示用逻辑查询驱动类型检查的可行性与好处。

    为什么经久不衰:它把一个经典而有生命力的想法(编译器/代码库即数据库)讲得具体可操作,如今 Rust 的 Chalk、Polonius 和 Meta 的 Glean 都在生产或半生产环境中验证了这条路线。

    关键词 DatalogIDE类型检查代码查询

    HN 评论精选

    Datalog 的语法相等统一太弱,且远离源码会让报错质量下降。

    Niko Matsakis 在一篇类似文章(也就是本文引用的那篇)里有一个很有洞见的观察:传统 Datalog/Prolog 通过语法相等来统一(unification),这种方式对于表达 Rust 等语言所需的相等关系来说过于简单。你当然可以在 Datalog 里表达,但越偏离源码,错误信息的生成质量就越差。

    sriram_malhar查看英文原文

    Niko Matsakis had an insightful observation about this approach in a similar post (which is referenced by OP): http://smallcultfollowing.com/babysteps/blog/2017/01/26/lowering-rust-traits-to-logic/ The key observation to me was that the traditional Datalog/Prolog way of unifying is through syntactic equality, which is a bit too simple to express the kind of equality needed in Rust and elsewhere. You can express it in Datalog, but as it gets farther away from the source, error-generation suffers.

    Rust 已用 Prolog 版 Chalk 和 differential-datalog 的 Polonius 实践此思路。

    在 Rust 生态里,下一代 IDE 支持已经开始吸收类似思路,不过用的是 Prolog 而非 Datalog(我也很想了解两者差异)。这个逻辑库叫 Chalk,为 Rust 设计成完整的 trait 求解引擎(trait 求解是类型上方法补全等功能的必要步骤);rust-analyzer 已经用了很久,也在逐步并入 rustc 本身。当然,还不至于把整个 IDE 建立在查询之上。Rust 项目还用本文提到的 differential-datalog 库来支撑第三代借用检查器 Polonius。

    kibwen查看英文原文

    In the Rust ecosystem, I believe the next-generation IDE support is already beginning to incorporate some ideas like this, although I believe it uses Prolog rather than Datalog (I'd be interested to learn more about how they differ). The logic library is called Chalk ( https://github.com/rust-lang/chalk ), and it's designed to be a full trait resolution engine for Rust (trait resolution being a necessary step to e.g. autocomplete methods on types); rust-analyzer has been using it for quite a while now, and it's slowly being incorporated into rustc itself. Not as impressive as basing the entire IDE on queries, of course! The Rust project is also using the differential-datalog library mentioned in the OP to underlie their third-generation borrow checker: https://github.com/rust-lang/polonius

    真实大型代码库中,IDE 增量性受构建系统制约,很难做到理想。

    IDE 增量化的最大挑战(我说的甚至不是增量解析)在于你要受制于某门语言的构建系统,以及它在数百万行代码库上的行为。靠大量人力硬啃可以逼近不错的增量效果,但绝非易事。Visual Studio IDE 历史上有过许多次「IDE 增量性」的尝试,大多失败了;成功留下的那个(我参与过一阵)在用户体验上仍有怪问题——用户明明「知道自己想要什么」,却仍被「还在初始化」打扰,补全列表里也未必有想要的东西。这总比旧行为好(旧版要先加载所有上下文才放开 UI,有些用户要等十多分钟的开屏)。但这套系统本质上是有缺陷的。

    phillipcarter查看英文原文

    The biggest challenge with incrementality in the IDE (I'm not even talking about incremental parsing or whatever) is you're subject to the whims of a given language's build system and how it behaves on multi-million LoC codebases. With sufficient human suffering thrown at the problem, you can approximate decent incrementality, but it ain't easy. It's not written about anywhere, but there is a long and storied history of trying different takes on "IDE Incrementality" for the Visual Studio IDE, all in service of making it a more palatable experience for people working in utterly massive codebases. Most failed, and the one that stuck (which I worked on for a bit, yay!) still has some weird issues with the experience where an end-user "knows what they want" and get bothered by the fact that stuff is still getting initialized, and they may or may not get what they want in a completion list. It's better than the legacy behavior, where the IDE loads context for all things up front before freeing up the UI (which would mean 10+ minute IDE loading screens for some users). But it's an inherently flawed system.

    Meta 的 Glean 就是这条路线的大规模生产级实现。

    Meta 在生产环境中使用了非常类似的东西,开源在 https://glean.software/ 。

    phyrex查看英文原文

    Meta uses something very much like this in production. It’s open sourced at https://glean.software/

    历次讨论

    同类还值得读

    1. 开源应用架构

      The Architecture of Open Source Applications

      《开源软件架构》(AOSA)是一本在线免费书,邀请知名开源项目的作者亲自剖析其内部设计,涵盖 SQLAlchemy、LLVM、Audacity、Apache、Bash 等系统。

      编程与软件工程上首页 9 次 · 2011–2024aosabook.org编辑精选
    2. 编程语言简史:简短、不完整且多半错误

      A Brief, Incomplete, and Mostly Wrong History of Programming Languages

      一篇以戏谑、故意不准确的方式回顾编程语言史的博客文章,用夸张轶事和讽刺定义串起 Lisp、C、C++、Java、JavaScript、PHP 等语言。

      编程与软件工程上首页 8 次 · 2009–2021james-iry.blogspot.com
    3. SQLite 是如何测试的

      How SQLite is tested

      SQLite 官方文档页,系统介绍 SQLite 的测试体系:多种测试方法(TCL 测试、模糊测试、回归测试、静态分析等)和海量测试用例,展示了这个小型开源项目如何靠极致测试获得…

      编程与软件工程上首页 8 次 · 2009–2025sqlite.org编辑精选
    4. 高级编程语言(2009)

      Advanced programming languages (2009)

      Matt Might 的经典文章,按用途推荐“高级编程语言”:如果追求就业就选主流语言,如果追求表达力、学术研究或创业,则推荐 Haskell、OCaml、Scala 等函数式语…

      编程与软件工程上首页 8 次 · 2009–2022matt.might.net
    5. 我的 Forth 与栈机器经历

      Yosefk - My history with Forth & stack machines

      作者以亲身经历回顾了使用 Forth 语言和栈式机器的历程:既赞叹其简洁优雅、代码量小、可自举的优点,也坦率指出栈操作在实际编程中的痛苦,以及 Forth 社区文化中的问题。

      编程与软件工程上首页 8 次 · 2010–2024yosefk.com编辑精选

    打赏支持

    打赏二维码

    觉得有用,请作者喝杯咖啡。

    WeChat

    关注向阳乔木

    微信公众号「向阳乔木推荐看」

    微信公众号「向阳乔木推荐看」二维码

    微信扫一扫;在微信里打开本页时,长按二维码识别。