Agili 的 Hacker Podcast

Hacker News 每日播报 2025-10-27


Listen Later

Hacker News 每日播报,今天我们聊聊 Zig 的网络编程新宠、功能丰富的 Rust UI 库、沙丘鹤的跨物种收养奇闻、AI 内容的价值争议、Unix 的喧嚣起源,以及更多关于自建 S3 节省成本、讽刺微软 Recall、性能基准测试和被遗忘的计算机历史的精彩故事。

Zig 如何成为网络编程新宠?

一位开发者分享了他如何从对 Zig 语言的观望,到最终爱上它并为其构建了一个名为 Zio 的高性能异步 I/O 库的精彩旅程。起初,他认为 Zig 有些“怪异”,但在看到其潜力后,决定用一个实际项目来学习它。结果,用 Zig 重写的版本比之前的 C++ 实现更快、更具扩展性。

然而,当他尝试为项目添加网络功能时,发现 Zig 在异步 I/O 方面存在短板,这促使他自己动手,开发了 Zio。

Zio:Go 风格的并发与 Zig 的性能

Zio 的核心理念是在 Zig 的能力范围内提供类似 Go 语言的并发体验。它采用固定大小栈的栈式协程(stackful coroutines),让异步代码写起来就像同步代码一样简洁,极大地简化了状态管理。

  • 核心特性:支持完全异步的网络和文件 I/O,提供互斥锁、条件变量等同步原语,以及 Go 风格的通道。
  • 运行模式:可在单线程或多线程模式下运行,多线程模式下任务甚至可以在不同线程间迁移以平衡负载。
  • 惊人性能:作者声称 Zio 的速度非常快,单线程模式下上下文切换的开销几乎可以忽略不计,与函数调用相当,性能超越了他尝试过的任何框架,包括 Go 和 Rust 的 Tokio。
  • Zio 的出现,让作者相信 Zig 不再仅仅是编写底层代码的“小众”语言,而是可以构建完整、高性能网络应用的强大工具。

    技术深度探讨

    这篇文章引发了关于性能、语言成熟度和编程模型的深入讨论。

    对于 Zio “上下文切换几乎免费”的说法,技术社区进行了细致的剖析。尽管协程切换不可避免地会影响 CPU 的分支预测器并涉及寄存器操作,但 Zio 的实现通过 Zig 编译器的全局优化,将开销降到了最低,只显式保存和恢复栈指针与指令指针。

    关于 Zig 语言的成熟度,社区观点不一。一些开发者对其频繁的破坏性变更表示担忧,认为在 1.0 版本发布前用于生产环境风险较高。然而,另一些人则认为 Zig 已经“完全可用”,并以 Bun、TigerBeetle 等成功项目为例,认为 API 的改进带来了更好的性能和可读性,是值得的。

    在异步编程模型上,栈式协程(Zio 采用)与栈无关协程(Rust 采用)的优劣之争也被重新提起。栈式协程提供了“同步代码的幻觉”,编程模型更简洁;而栈无关协程则在内存控制上更为精确,避免了预分配大栈可能带来的浪费或溢出问题。

    此外,如何优雅地处理 I/O 超时和取消,以及对垃圾回收(GC)的“恐惧症”是否必要等话题,也得到了广泛的探讨,展现了一个充满活力和技术深度的 Zig 社区。

    GPUI Component:一个功能丰富的 Rust 跨平台 UI 库

    Rust 生态中一个令人兴奋的新项目 GPUI Component 亮相,这是一个为构建跨平台桌面应用而设计的 UI 组件库。它基于 Zed 编辑器背后的高性能 GPUI 框架,旨在提供一套丰富、美观且易于使用的组件。

    亮点功能
    • 组件丰富:提供超过 60 个跨平台 UI 组件,从按钮、输入框到复杂的表格和树形视图。
    • 现代设计:灵感来源于 macOS 和 Windows 原生控件,并结合了 shadcn/ui 的现代美学。
    • 易用且可定制:采用无状态组件设计,内置主题系统,方便个性化定制。
    • 高性能:为大数据量场景提供了虚拟化的列表和表格组件。
    • 高级功能:原生支持 Markdown 和简单 HTML 渲染,内置图表和支持 LSP 的高性能代码编辑器。
    • 社区反响与深入讨论

      GPUI Component 的发布在开发者社区中激起了广泛的讨论。

      许多人对其组件的完整性印象深刻,认为它是 Rust UI 生态中最完整的库之一。不过,也有观点指出,GPUI 更像一个“框架”而非“库”,因为它要求拥有整个应用的事件循环,这对于从零开始的项目很友好,但集成到现有应用中可能存在挑战。

      项目的依赖数量(超过 900 个)引发了对编译时间的担忧,但也有人认为 Rust 的增量编译和一些热重载工具可以缓解这个问题。

      在与其他 UI 框架的比较中,iced 和 egui 作为 Rust 社区的流行选择被频繁提及。同时,讨论也延伸到了 Qt,有观点认为项目中对 Qt 的一些描述(如许可证和二进制大小)可能不够准确。

      一个关键的关注点是可访问性(Accessibility)。由于其父项目 Zed 编辑器目前对屏幕阅读器的支持不佳,社区普遍关心 GPUI Component 在这方面未来的规划和支持情况。这提醒我们,在追求高性能和美观的同时,确保应用的包容性同样至关重要。

      当沙丘鹤收养了加拿大鹅宝宝:一出现实版“丑小鸭”

      在美国威斯康星州,一对沙丘鹤夫妇正在悉心抚养一只加拿大鹅的幼崽,上演了一场温馨又奇特的跨物种家庭剧。这并非孤例,近年来已是第三次被确认的类似事件。

      为什么会发生?

      科学家认为,这背后有几个原因。首先,沙丘鹤和加拿大鹅的种群数量都在恢复,并且它们都很好地适应了城市环境,导致生活区域重叠。其次,也是更重要的一点,智能手机的普及和观鸟兴趣的提升,使得这些不寻常的现象更容易被人们发现和记录。

      这只鹅宝宝很可能是在孵化后,对眼前的沙丘鹤父母产生了“印随效应”,将它们认作亲生父母。沙丘鹤父母也尽职尽责,喂养、保护这只“外来的”孩子,甚至会驱赶试图靠近的亲生鹅父母。

      然而,这个奇特家庭的未来充满不确定性。沙丘鹤和加拿大鹅在饮食、行为和迁徙策略上差异巨大。鹅宝宝能否适应鹤的食谱,以及在迁徙季节如何抉择,都是严峻的挑战。

      社区的温馨与幽默

      这个故事引发了社区的热烈讨论,充满了对自然的敬畏和独特的幽默感。

      许多人认为,这类事件可能一直都在发生,只是现在我们有了随时记录的工具,才得以广为人知。大家也分享了自己与沙丘鹤的近距离接触经历,无不为其巨大的体型和独特的叫声所震撼。

      与此同时,加拿大鹅的“凶猛”形象也成了热门话题,被戏称为“加拿大眼镜蛇鸡”(Canadian Cobra Chicken)。有人开玩笑说:“这对鹤夫妇会后悔邀请一只‘眼镜蛇鸡’加入它们的家庭。”

      当然,作为技术社区,也少不了有趣的类比。有人将这种跨物种收养比作:“有人发现了我为 HPUX 写的 shell 脚本,然后把它用在 Windows 上,还觉得很正常。” 这种幽默感为这个温馨的自然故事增添了别样的色彩。

      阅读 AI 生成的博客文章是一种侮辱吗?

      一篇观点鲜明的博客文章引发了热议,其核心论点是:阅读由 AI 生成的内容,是对读者智力和时间的侮辱。作者认为,这种行为体现了创作者的懒惰,因为它剥夺了人类思想、创意、幽默和生活经验的价值,呼吁我们应该用真实的思想去面对世界。

      两种对立的观点

      这场讨论迅速分化为两大阵营。

      支持方认为,AI 生成的内容缺乏灵魂。这种观点延伸到了代码审查领域,认为提交 AI 生成的 Pull Request (PR) 同样是对审查者精力的不尊重,讽刺其为“一个 Furby 写代码,另一个 Furby 审阅”。许多人表示,他们已经能凭直觉识别出文章的“AI 味”——内容泛泛、缺乏深度、句式重复——并会立即关闭页面。人们担忧,年轻一代可能会失去辨别能力,或者更糟的是,认为这无所谓。

      反对方则持更为务实的态度,认为 AI 是一个强大的工具,其价值在于如何使用。对于非母语者来说,AI 在语法修正和润色方面的帮助是巨大的,能让他们更清晰地表达思想。有人将 AI 比作“木材砂光机”,用于打磨作品而非完全替代创作。只要最终内容有价值、有洞察力,并且创作者对结果负责,使用 AI 辅助并无不妥。毕竟,人类写的文章也可能质量低下,关键在于内容本身,而非其来源。

      真实性还重要吗?

      讨论中还出现了一些有趣的“元评论”。有人怀疑这篇批判 AI 的文章本身就是由 AI 生成的讽刺作品,这引出了一个深刻的问题:“如果你无法分辨,那么真实性还重要吗?”

      这场辩论揭示了科技与人类创作之间日益紧张的关系。如何在利用 AI 提高效率和保持人类表达的独特性之间找到平衡,是摆在我们面前的一个重要课题。

      别忘了这几个让 HTML 正常工作的“咒语”

      一篇博客文章提醒我们,即使在创建最简单的 HTML 页面时,也有几个关键的“咒语”不容忽视,它们能确保浏览器以我们期望的方式工作。

      四个基本标签
      1. :文档类型声明,告诉浏览器使用最新的 HTML 标准渲染页面。缺少它,浏览器可能进入“怪异模式”(quirks mode),导致布局和样式出现意想不到的问题。
      2. :声明文档的主要语言。这对屏幕阅读器等辅助技术至关重要,也能帮助搜索引擎更好地索引和翻译内容。
      3. :指定字符编码为 UTF-8。它能确保表情符号、特殊字符和非拉丁字母正确显示,避免乱码。
      4. :响应式设计的基石。它指示浏览器将视口宽度设置为设备宽度,并设置初始缩放比例,确保页面在移动设备上以合适的尺寸显示。
      5. 基础知识的再讨论

        尽管这些知识看似基础,但在技术社区中依然引发了有趣的讨论。

        有观点指出,在 HTML5 中,、 和 标签在技术上是可选的,浏览器会自动补全。然而,为了设置 lang 属性, 标签通常还是会被保留。

        更深入的技术细节也被挖掘出来,例如 initial-scale=1.0 中的 .0 是不必要的,并且其解析可能受到用户系统语言环境(locale)的影响,在某些使用逗号作为小数点的地区可能导致解析错误。

        虽然有人质疑在今天重提这些基础知识的必要性,但讨论本身恰恰证明,即使是基础,也常常被遗忘或误解。它们是构建健壮、可访问的 Web 应用的坚实地基。

        Ken Thompson 回忆 Unix 喧嚣、开锁的起源

        计算机巨匠 Ken Thompson 在一次长篇访谈中,深情回顾了 Unix 操作系统诞生之初那些充满奇趣和叛逆精神的日子,为我们揭示了贝尔实验室那段黄金岁月。

        意外的诞生与“曲线救国”

        Thompson 形容他的上一个项目 Multics 是个“巨大、缓慢、丑陋”的失败品。然而,正是这个项目的终结,让他意外地获得了一台闲置的计算机。尽管贝尔实验室明令禁止开发新操作系统,Thompson 却在改进存储器读写效率的过程中,“不知不觉地”创造出了 Unix 的雏形。

        Unix 的发展离不开同事 Joe Ossanna 的“曲线救国”。他以“文字处理”为名,为专利部门申请到了一台 PDP-11 计算机,这不仅为 Unix 团队带来了关键硬件,也让秘书们成为了 Unix 的首批非技术用户。

        “Unix Room”的叛逆精神

        最有趣的故事莫过于对“Unix Room”的描述。这个由废弃储藏室改造的空间,是团队的创意温床,也是他们“喧嚣”精神的体现。Thompson 笑着回忆,他们常在那里“开锁和偷东西”。最经典的莫过于,当一位秘书的车被保安锁上后,他们竟合力撬走了所有的停车锁,并藏在地板下,最终迫使保安主管妥协。

        开源之前的“开放”文化

        Thompson 强调,Unix 的成功在于其“开放”的本质。在 Unix Room,所有源代码都是可写的,任何人都可以修改,奉行“你碰过,你负责”的文化。这种极大的协作和信任,被视为开源精神的早期萌芽,极大地促进了思想交流和社群的形成。

        这个故事提醒我们,伟大的技术创新往往诞生于好奇心、自由探索和紧密协作的社群之中,而非仅仅是自上而下的规划。

        自建“S3”缓存,我们每年节省了 50 万美元

        智能婴儿监视器公司 Nanit 分享了他们如何通过构建一个定制的内存存储系统 N3,优化视频处理管道,从而每年节省约 50 万美元的云服务成本。

        问题所在

        Nanit 的摄像头会将短视频片段上传到 AWS S3 进行分析。但这些视频的生命周期极短,通常只有几秒。这种架构导致了两个主要成本问题:

        1. 高昂的请求费:每秒数千次的上传产生了巨额的 PutObject 请求费用。
        2. 不必要的存储费:S3 的生命周期规则最短也需要一天才能删除对象,导致他们为只需存储几秒的数据支付了约 24 小时的费用。
        3. 解决方案:N3 系统

          为了解决这些问题,团队用 Rust 构建了一个名为 N3 的内存式“着陆区”,作为 S3 的前端缓存。

          • 架构:摄像头将视频上传到 N3 的内存中,处理服务直接从内存下载。只有在 N3 负载过高或出现故障时,流量才会自动切换到 S3 作为后备。
          • 核心理念:“下载即删除”策略,视频一旦被处理服务下载,就立即从内存中清除,完美匹配其短生命周期的特性。
          • 在实施过程中,团队克服了 DNS 负载均衡、AWS 网络性能突发性、TLS 性能瓶颈和内存管理等一系列技术挑战,最终成功实现了降本增效的目标。

            架构与隐私的权衡

            这篇文章引发了广泛讨论。许多人认为,Nanit 最初将短生命周期数据存入 S3 的做法本身就是一种“错误的架构”,而 N3 则是一个明智的纠正。

            然而,讨论的焦点很快转向了产品本身。大量观点对 Nanit 将家庭视频上传到云端且缺乏端到端加密(E2EE)的做法表示了强烈的隐私担忧。

            • 隐私派:认为这种“热麦克风”式的设备存在风险,并分享了使用 UniFi Protect、HomeKit 等自托管方案的经验,这些方案提供了本地存储和更好的隐私保护。
            • 便利派:一些 Nanit 用户则为产品辩护,认为其“开箱即用”的体验和可靠性,对于精疲力尽的新手父母来说至关重要,易用性是首要考量。
            • 这场讨论生动地展示了在现代科技产品中,系统架构、成本、用户便利性和数据隐私之间复杂的权衡关系。

              Recall for Linux:一个讽刺微软隐私问题的“杰作”

              一个名为 recall-for-linux 的 GitHub 项目以一种辛辣的讽刺方式,将微软备受争议的“Recall”功能带到了 Linux 平台,旨在揭示其潜在的隐私和安全风险。

              该项目自称是为那些“怀念微软监视你一切便利”的 Linux 用户设计的,其“特性”包括:将所有敏感数据存储在易于访问的数据库中、24/7 全天候截屏、以及记录所有聊天内容。其安装说明更是用 curl | bash 这种经典的安全反模式来加深讽刺。

              概念本身是否有用?

              这个讽刺项目成功点燃了社区对 Recall 概念本身的激烈辩论。

              一方面,许多人认为 Recall 的核心理念——一个能搜索和回忆过去所有桌面活动的本地工具——是非常有用的。如果能做到开源、完全本地、数据加密且用户完全可控,它将解决“我到底在哪看到过那个东西?”的普遍痛痛点,打破应用间的数据孤岛。

              另一方面,也有人认为这个概念本身就有问题,无论如何实现。他们将其比作“老大哥”式的监控,认为即使数据存储在本地,也无法完全规避被恶意软件、黑客甚至家人同事滥用的风险。

              对微软的普遍不信任

              讨论中最集中的情绪,是对微软实施这一功能的强烈不信任。许多人指出,微软在推出 Recall 时的沟通不畅和被迅速发现的安全漏洞,严重损害了其信誉。大家普遍担心,即使微软声称数据在本地,未来也可能“不小心”被上传到云端用于训练 AI。这种不信任感正促使越来越多的技术用户考虑彻底转向 Linux。

              这个项目不仅是对微软的一次有力批评,也促使我们深刻反思:在追求 AI 带来的便利时,如何坚守个人数据主权和安全底线。

              “我们够快了吗?”:跨语言性能基准测试新成员

              一个 GitHub 仓库扩展了著名的 "Are-we-fast-yet" 基准测试套件,加入了 Oberon、C++、C、Pascal 以及一些小众语言(如 Micron、Luon)的实现,旨在更广泛地比较不同语言编译器和虚拟机的性能。

              这个基准测试的核心目的,是评估编译器在处理一组核心语言抽象(如对象、闭包、数组等)时的效率,为编译器开发者和对底层性能优化感兴趣的程序员提供了宝贵的参考。

              基准测试的价值之辩

              这个项目引发了关于微基准测试(micro-benchmark)实用性的讨论。

              有观点认为,这类测试可能“非常无用且容易出错”,因为它们测试的场景(例如频繁的函数调用)可能无法代表真实世界应用的性能瓶ě颈,甚至可能只是在测试 CPU 的分支预测器。

              然而,项目作者亲自回应,强调这并非一个应用级性能测试,而是一个经过同行评审、被学术界广泛引用的编译器工程工具。其目的恰恰在于揭示不同编译器在处理相同底层语言结构时的效率差异。如果一个测试能暴露不同编译器在分支预测处理上的优劣,那它就成功地达到了目的。

              有趣的命名插曲

              讨论中还出现了一个有趣的插曲:其中一种语言“Micron”(Micro Oberon 的缩写)的命名,被认为可能与知名的内存制造商 Micron Technology 存在商标冲突。这引发了一场关于商标法、品牌保护以及商标“通用化”风险的深入讨论,展现了技术社区对法律和商业问题的关注。

              Sphere Computer:70 年代被遗忘的创新先驱

              在个人计算机黎明时期的 1975 年,一家名为 Sphere Corporation 的公司推出了一款极具前瞻性的产品——Sphere 1。它是一款基于 Motorola 6800、内置屏幕的一体化微型计算机,其设计理念远超当时由 LED 灯和拨动开关组成的电脑套件,预示了未来个人电脑的形态。

              然而,尽管设计先进,Sphere 却因交付延迟、质量问题等原因,在 1977 年便销声匿迹,成为了历史的注脚。如今,历史学家 Ben Zotto 正致力于挖掘并记录这段被遗忘的历史,他创建了虚拟博物馆网站,开发了网页模拟器,甚至正在众筹一本记录其研究成果的书籍。

              创新为何失败?

              Sphere 的故事引发了人们对早期微型计算机市场残酷竞争的讨论。许多公司都曾“本可以成为苹果”,但最终只有少数幸存下来。

              有观点分析,当时的初创公司主要有三种模式:靠产品销售有机增长(如 Sphere)、大公司内部项目(如 Radio Shack),以及风险投资支持(如 Apple)。Sphere 所属的第一类公司,在没有外部资金支持的情况下,一旦遇到生产或交付问题,就很容易陷入困境。

              此外,软件生态的重要性也被反复提及。Apple II 的巨大成功,很大程度上归功于 VisiCalc 这款“杀手级应用”的出现。而 Sphere 缺乏这样的软件支持,使其先进的硬件设计无从发挥最大价值。

              Sphere Computer 的故事是一个经典的案例,提醒我们技术创新固然重要,但商业模式、产品质量、交付能力以及软件生态的建设,同样是决定成败的关键因素。

              相关链接:

              • How I turned Zig into my favorite language to write network programs in
              • Rust cross-platform GPUI components
              • Sandhill cranes have adopted a Canada gosling
              • It's insulting to read AI-generated blog posts
              • Tags to make HTML work like you expect
              • Ken Thompson recalls Unix's rowdy, lock-picking origins
              • We saved $500k per year by rolling our own "S3"
              • Recall for Linux
              • Are-we-fast-yet implementations in Oberon, C++, C, Pascal, Micron and Luon
              • Sphere Computer – The Innovative 1970s Computer Company Everyone Forgot
              ...more
              View all episodesView all episodes
              Download on the App Store

              Agili 的 Hacker PodcastBy Agili 的 Hacker Podcast