2024 07 16 HackerNews

2024-07-16 Hacker News Top Stories #

  1. Fusion是一个用Nim语言开发的业余操作系统,针对x86-64架构,已实现UEFI引导、内存管理等功能,未来计划包括需求分页、磁盘I/O和网络支持。
  2. 一篇个人经验分享指出,即使技能未衰退,热情消退也是退出编程行业的合理理由,许多人因技术过时、兴趣转移或发现更有意义的事而提前离开。
  3. 谷歌的Gemini AI服务被发现未经用户同意扫描Google Drive中的PDF文件,引发隐私担忧,尽管谷歌声称有关闭功能,但用户反馈操作不易。
  4. Linux内核开发者探讨了在文件系统中使用Rust语言的潜力,旨在提高安全性和效率,但面临C API整合和内核抽象层的挑战。
  5. 一篇文章详细介绍了如何从原始GPS数据计算位置,涵盖GPS原理、坐标系统和使用Matlab实现定位算法。
  6. Firefox 128版本默认启用了隐私保护广告测量功能,这一变化引发了关于Mozilla公司隐私立场和商业模式的讨论。
  7. 一篇评论文章指出,尽管技术创业降低了门槛,但实际上加剧了财富不平等,呼吁人们面对现实,努力提升自身经济状况。
  8. Tabloid是一种创新编程语言,以点击诱饵标题风格编写代码,具备图灵完备性,支持数字、字符串和布尔值,通过递归实现循环。
  9. 一篇文章批评了strlcpy(3)函数的安全性和实用性,建议在不同场景下使用memccpy(3)、memcpy(3)或strdup(3)作为更优选择。
  10. 白喉麻雀展现复杂性生活,颜色差异反映不同性格,研究揭示其行为背后的遗传学基础,以及配对偏好上的性别特征。

Fusion – A hobby OS implemented in Nim #

https://github.com/khaledh/fusion

这个 GitHub 地址 https://github.com/khaledh/fusion 包含一个用 Nim 语言实现的业余操作系统。该操作系统名为 Fusion,是为 x86-64 架构设计的。作者在 https://0xc0ffee.netlify.app 上记录了构建该操作系统的过程。

目前已经实现的功能包括:

  • UEFI 引导加载程序
  • 物理内存管理器
  • 虚拟内存管理器
  • 单一地址空间
  • 用户模式
  • 抢占式多任务
  • 系统调用
  • ELF 加载器
  • 定时器中断

计划中的功能包括:

  • 需求分页
  • 进程间通信
  • 磁盘 I/O
  • 文件系统
  • 键盘/鼠标输入
  • Shell
  • 图形用户界面
  • 网络

构建 Fusion 需要安装以下依赖:

  • Nim
  • LLVM (clang 和 lld)
  • Just

使用以下命令构建 Fusion:

just build

Fusion 目前在 QEMU 上运行,因此需要先安装 QEMU。使用以下命令启动 Fusion:

just run

HN 热度 323 points | 评论 102 comments | 作者:michaelsbradley | 1 day ago #

https://news.ycombinator.com/item?id=40962767

  • Nim 编译器智能处理复制/移动和析构,支持手动内存管理需求。
  • Nim 应该像其他语言文档站点一样提供版本提示和链接。
  • 从零开始编写操作系统最困难的部分是任务切换和需要大量阅读。
  • OSDev 领域无法捷径,需逐步学习,建议阅读 FreeBSD 和 Linux 内核。
  • Nim 选择原因包括与 Python 类似的语法、无垃圾回收、C 互操作等。
  • Nim 被认为是被低估的语言,具备多种优点,但需改进 IDE 支持等。
  • Nim 社区规模不是问题,标准库功能齐全,但应关注 IDE 支持。
  • Nim 的大小写不敏感在实际中并非问题,可通过 linter 检查命名一致性。
  • Nim 设计目标包括实验性 OS 设计、单地址空间和基于通道的进程建模。
  • Nim 的大小写不敏感有利于 FFI,允许使用不同风格的第三方库。

How to Know When It’s Time to Go #

https://thecodist.com/how-to-know-when-its-time-to-go/

这篇文章讲述了作者在 63.5 岁时于 2021 年退休,结束了大约四十年的程序员生涯。作者退休的原因并非能力下降,而是经过一年的考虑后意识到自己不再热衷于这个行业。文章指出每个人最终都会达到一个无法继续从事自己一生所做的工作的时刻,这不仅仅是退休的问题,也可能在更早的时候发生。作者分享了一些人提前离开编程行业的原因,如选择的技术过时、对编码失去兴趣或者发现其他值得做的事情等。

作者提到了一些案例,包括有人因为技术过时而不得不转行、有人因为工作市场不景气而离开编程行业、有人因为对编程失去兴趣而选择从事其他行业等。文章强调了重要性,即要诚实地面对自己,不断更新知识以保持工作能力,确保工作仍然有趣,或者寻找其他更有意义的事情。最后,作者分享了自己的经历,强调了对于工作和职业的结束,要做出明智的决定,而不是被动地被淘汰。

总的来说,这篇文章探讨了程序员在职业生涯中可能面临的挑战和抉择,强调了诚实面对自己、不断学习和适应变化的重要性,以及做出对自己有意义的职业决策的重要性。


HN 热度 310 points | 评论 196 comments | 作者:kiyanwang | 1 day ago #

https://news.ycombinator.com/item?id=40962675

  • 软件行业变得更差,更加用户敌对,人们制造更差软件的东西被认为是 “最佳实践”
  • 软件行业主要是为了公司的利益,而不是用户的利益
  • 软件行业将用户视为烦人的中间人或要挤取金钱、注意力、参与度或时间的牛
  • 程序员发现做的工作重要,有趣的工作交给年轻同事
  • 有家庭的人很难在 50 岁时找到没有经验的有意义工作
  • 在 50 岁时找到新领域的有意义工作几乎是不可能的
  • 运行在技术变革的鼠轮上变得乏味
  • 很多 “新” 想法实际上是旧想法,但推动这些想法的人太年轻而不知道这一点
  • 许多新编程语言试图修复旧语言中的错误
  • 计算机编程的初衷是帮助用户解决问题,但现在更多是为公司解决问题
  • 软件行业向用户敌对,使软件变得更差
  • 软件公司现在主要是为了自己的利益,而不是用户的利益
  • 软件公司视用户为烦人的中间人或要挤取金钱、注意力、参与度或时间的牛
  • 程序员发现正在做的工作不重要,有趣的工作交给年轻同事
  • 有家庭的人很难在 50 岁时找到没有经验的有意义工作
  • 在 50 岁时找到新领域的有意义工作几乎是不可能的
  • 运行在技术变革的鼠轮上变得乏味
  • 很多 “新” 想法实际上是旧想法,但推动这些想法的人太年轻而不知道这一点
  • 计算机编程的初衷是帮助用户解决问题,但现在更多是为公司解决问题
  • 程序员在 50 岁时发现自己感到乏味,很难跟上,有趣的工作交给年轻同事
  • 程序员对当前的编程景观感到失望,认为跑在技术鼠轮上变得乏味
  • 一些新编程语言非常有趣,试图修复旧语言中的错误
  • 有人认为机器人技术将是下一个发展趋势,制造业将回流并实现自动化
  • 软件行业中新的编程语言尝试修复旧语言中的错误
  • 计算机编程的初衷是帮助用户解决问题,但现在更多是为公司解决问题
  • 程序员在 50 岁时发现自己感到乏味,很难跟上,有趣的工作交给年轻同事

Google’s Gemini AI caught scanning Google Drive PDF files without permission #

https://www.tomshardware.com/tech-industry/artificial-intelligence/gemini-ai-caught-scanning-google-drive-hosted-pdf-files-without-permission-user-complains-feature-cant-be-disabled

根据来自 Tom’s Hardware 的报道,谷歌的 Gemini AI 服务似乎在未经用户明确许可的情况下读取私人 Google Drive 文档。一位名为 Kevin Bankster 的用户在 Twitter 上发文抱怨称,Gemini 自动总结了他在 Google Docs 中打开的税务申报表,而他并没有要求这样做。他发现 Gemini 似乎在自动摄取他在 Google Docs 中打开的私人文档,这引发了隐私担忧。

谷歌的 Gemini AI 和支持团队似乎对此情况并不完全了解,但 Kevin Bankster 提出了一些理论。问题似乎发生在 Google Drive 范围内,而不是仅限于 Google Docs。Gemini AI 声称应该公开提供用于通知 Gemini 的隐私设置,但实际上并没有,这意味着 AI 要么“幻觉(说谎)”,要么谷歌服务器上的一些内部系统出现了故障。Bankster 最终找到了相关设置切换按钮,但发现 Gmail、Drive 和 Docs 中的 Gemini 摘要已经被禁用。

问题似乎局限于 Google Drive,并且只会在至少一个文档上按下 Gemini 按钮后发生。他推测这可能是因为他在 2023 年启用了 Google Workspace Labs,这可能会覆盖预期的 Gemini AI 设置。即使这个问题仅限于 Google Workspace Labs 用户,对于帮助谷歌测试其最新技术的用户来说,这也是一个严重的缺点。用户同意仍然在细微的基础上很重要,特别是涉及潜在敏感信息时,而谷歌未能遵循这一原则,至少对其用户群中的一部分用户而言是失败的。


HN 热度 295 points | 评论 143 comments | 作者:thunderbong | 17 hours ago #

https://news.ycombinator.com/item?id=40965892

  • 所有 AI 应该是选择加入的,包括训练和扫描。应该有一个“我想使用 AI 功能”的复选框,并且相关文本应该清晰明确。
  • 训练我能理解,但为什么要扫描?从根本上说,这只是在您的数据上运行算法并为您生成结果。只要结果保持私密(在这种情况下是这样),我不明白有什么问题。
  • 我不想要任何 AI 的结果。我甚至不想看到它们。如果他们使用我的结果来改进他们的 AI,那会怎样。我讨厌 AI,也不想与其自动化有任何关系。
  • 我不想让您不断增加对 AI 的使用,使每个人都被迫在工作和生活中使用 AI,因为这带来短期的商业利益。
  • AI 正在成为新的社交媒体,用户不是客户,而是产品。您生成数据来训练他们的 AI,作为交换,您可以免费使用他们的服务。
  • AI 成本高昂,训练它们的费用非常昂贵。相比于 AdWords 业务所需的成本,基于基础模型的推理成本要高得多。
  • AI 正在成为新的社交媒体,用户不是客户,而是产品。您生成数据来训练他们的 AI,作为交换,您可以免费使用他们的服务。

Rust for Filesystems #

https://lwn.net/Articles/978738/

这篇文章是关于在 2024 年 Linux 存储、文件系统、内存管理和 BPF 峰会上,Wedson Almeida Filho 和 Kent Overstreet 领导了一个关于在 Linux 文件系统中使用 Rust 的存储和文件系统会话。Almeida 在 2023 年 12 月发布了一组关于文件系统的 Rust 抽象的 RFC 补丁集,引起了一些关于方法的争议。在同一天的会议上,他发布了 RFC 补丁的第二个版本,想要讨论这些补丁以及其他与 Rust 相关的话题。

Almeida 列出了 Rust-for-Linux 项目的一些目标,这些目标体现在他提出的文件系统抽象中。首先是使用 Rust 的类型系统来表达更多的需求,以便在编译时捕获更多的错误。此外,项目的开发人员希望自动化一些任务,比如清理资源,这在 C 代码中不容易实现。总体想法是拥有更高效的文件系统开发体验,减少在调试上花费的时间,减少编译器可以发现的问题,并减少整体内存相关的漏洞。

文章还讨论了 Rust 类型系统如何消除某些错误,并展示了 Rust 中的函数 get_or_create_inode()如何替代当前内核中的 iget_locked()函数。还涉及到了对 Rust API 和 C API 之间的名称不一致性的讨论,以及在将 Rust 抽象添加到内核中时可能出现的问题。

最后,文章提到了一些关于将大量语义编码到类型系统中的讨论,以及对 Rust 绑定和 C 代码之间同步性的担忧。整体来说,文章探讨了在 Linux 文件系统中引入 Rust 的挑战和潜在优势,以及开发人员在这一转变中可能面临的问题。


HN 热度 239 points | 评论 168 comments | 作者:drakerossman | 14 hours ago #

https://news.ycombinator.com/item?id=40966414

  • 每个文件系统如何有自定义 inode 生命周期,但使用相同函数进行 inode 生命周期管理,听起来不像抽象层,应该通过文件系统特定函数管理。
  • 他们试图理解所有 C API,以便进行 Rust 工作,收集信息可能导致重构,避免问题。
  • VFS 层概述如何处理文件系统特定内容,保持内核一致接口。
  • 他们试图在 VFS 层尽可能抽象,但仍会有边缘情况需要在 FS 特定层处理。
  • 不同函数用于创建 inode 并将其插入缓存,不同 FS 可能不使用相同模式,FS 层内部处理 inode 对象,但消费者视角下 inode 的使用不变。
  • 编译器跟踪 inode 生命周期,编译器应帮助处理瞬态引用,文件系统仍需将链接计数存储到磁盘。
  • Rust 调用 C 很简单,只需声明外部函数并调用,可使用 bindgen 自动生成 C 头文件的 extern 声明。
  • Rust 调用 C 时,共享结构或字符串和上下文指针用于跨语言回调通常更困难。
  • 使用#[repr(C)]可在 Rust 代码中共享结构,cbindgen 用于反向操作。
  • Rust 调用 C++ 类似于其他语言的 C FFI,需要 extern “C”,C++ 链接性不保证与 C 相同,需要在预处理器条件中包装。
  • 大多数 C 到 C++ 互操作实际上是错误的,宏将正常工作,因为它们使用相同的预处理器。
  • C++ 和 C 的 C 互操作之间的主要区别是缺乏预处理器,其他语言无法使用 C 预处理器。
  • Rust 在内核中实现文件系统驱动等方面更有釽,但需要维护 C 接口。
  • Rust 在 Linux 子系统和 API 中编码语义,使用 Rust 特性和类型系统使调用更安全,C 开发人员担心这样做会使他们难以演变 C API 的行为和语义。
  • Rust 工作的替代方案可能更容易接受,不使用 Rust 特性和类型系统编码语义到 Rust API 中。
  • Rust API 应该避免与 C API 名称相同,以免引起混淆,但文档应参考原始 C 名称。

Calculating position from raw GPS data (2017) #

https://www.telesens.co/2017/07/17/calculating-position-from-raw-gps-data/

这篇文章详细介绍了如何从原始 GPS 数据中计算位置。首先,文章介绍了 GPS 的背景和原理,包括 GPS 的所有者和运营者、GPS 的历史、GPS 的坐标系统等。

然后,文章分为三个部分:

  • 第一部分描述了用于表达位置的各种坐标系统
  • 第二部分描述了 GPS 用于计算用户位置的基本原理和三个步骤
  • 第三部分提供了 Matlab 代码来实现所讨论的想法。

文章还包括了实验设置、处理原始 GPS 数据、结果分析和 DOP(精度几何因子)等内容。文章以简洁而详尽的方式解释了 GPS 定位的复杂过程,为读者提供了深入了解 GPS 工作原理的机会。


HN 热度 237 points | 评论 47 comments | 作者:fanf2 | 1 day ago #

https://news.ycombinator.com/item?id=40962231

  • Android 提供了一段时间的载波相位访问,可以在大致相同的邻域内的设备之间进行相对定位,加速度计和陀螺仪的加入使得实时定位更加精确,价格不贵的 GNSS 接收器也不难建造;
  • GNSS 接收器价格约 100 美元,但需要额外添加天线和晶体,价格可能会增加;
  • 结合 GPS 与加速度计和陀螺仪有时被称为“传感器融合”,可用于测量汽车的动态性能等;
  • 室内环境更适合使用 UWB,可以设置自己的基站,提供类似 GNSS 信号的服务;
  • GPS 在室内环境中效果不佳,需要考虑使用蓝牙信标等技术;
  • 有开源项目可供自行构建 GPS 接收器,提供理论解释;
  • GPS 卫星钟的速度被调整以解决相对论时间累积加速问题;
  • GPS 定位中的相对论效应被纳入误差范围,但不需要详细了解也能解决位置估计问题;
  • 手机 GPS 定位依赖卫星,对于地平论者提出挑战。

Firefox 128 enables “privacy-preserving” ad measurements by default #

https://mstdn.social/@Lokjo/112772496939724214

这个链接中的内容是关于 Firefox 浏览器的一篇文章。文章指出 Firefox 只是另一个贴着“开源”标签的美国公司产品。

他们的第 128 个版本更新自动勾选了一个新的小隐私侵犯设置。如果你仍在使用公司浏览器,至少要做一些安全版本!作者主要使用基于 Firefox 的 @librewolf@lemmy.ml。

文章提到,在欧洲,使用一个稳定的欧洲甚至非美国的浏览器仍被认为是“未来主义的”。作者还提到 Mozilla Corporation 的唯一所有者是 Mozilla 基金会,没有投资者。他们的数据隐私部分的第三方合作伙伴是 ISRG,即 Let’s Encrypt 背后的非营利组织,以及与此功能最相关的 Divvi Up。

作者呼吁保持健康的怀疑态度,指出一些美国人可能也想要在互联网上发生好事和公平的事情。文章还提到相关协议和实验设计已经公开发布。


HN 热度 233 points | 评论 190 comments | 作者:3by7 | 15 hours ago #

https://news.ycombinator.com/item?id=40966312

  • 有人认为 Firefox 128 的新功能是为了帮助广告商,而非用户,引发了对 Mozilla 的质疑。
  • 有人认为 Firefox 默认启用的广告测量功能是对用户隐私的侵犯,应该默认关闭。
  • 有人对 Mozilla 的商业动机表示怀疑,认为他们为了赚钱而牺牲用户利益。
  • 有人认为网页广告应该受限,不应影响内容,并支持用户直接付费获取服务。
  • 有人认为网络广告已经破坏了互联网,支持用户使用广告拦截软件。
  • 有人提到了一些 Firefox 的替代品,如 Waterfox、Librewolf,以及使用 Brave 浏览器等。
  • 有人对 Mozilla 的决策感到失望,认为他们不顾用户偏好,只为了金钱。
  • 有人对 Firefox 的更新和隐私设置表示担忧,建议使用稳定版本以避免风险。
  • 有人对 Mozilla 的沟通不透明感到不满,认为应该更清晰地告知用户相关设置。
  • 有人提出了关于 Mozilla 财务可持续性的讨论,建议接受用户捐款或提供无广告版本。
  • 有人对 Firefox 的新功能提出疑问,希望了解如何使用和关闭相关设置。
  • 有人讨论了 Firefox 的构建过程中是否可以关闭特定功能,以及与发行版维护者的讨论。
  • 有人对 Firefox 的功能和设置提出疑问,希望能够更清晰地了解相关配置。
  • 有人提到了 Nightly 版本的使用风险,建议谨慎使用非稳定版本。
  • 有人讨论了如何使用 Firefox 的配置选项来控制广告测量功能。
  • 有人对 Mozilla 的商业决策提出质疑,认为他们不应该牺牲用户利益。
  • 有人对 Mozilla 的财务状况和开发模式提出疑问,希望能够更透明和稳健地发展 Firefox。

Just Be Rich (2021) #

https://keenen.xyz/just-be-rich/

这篇名为"Just Be Rich 🤷‍♂️"的文章由 Keenen Charles 撰写。文章讨论了投资者和硅谷 CEO 们如何从被推崇为创新和民主化的旗手,变成如今被视为旧时垄断的新版本,并开始反击。作者提到了 Paul Graham 的文章标题"How People Get Rich Now",但指出这并非教程或分析,而更像是试图缓解人们对财富不平等的担忧。

文章探讨了财富不平等的增加,强调了技术创业对少数人变得更容易和廉价,但并未使大多数人受益。作者指出,自 20 世纪大部分时间以来,初创企业一直受到压制,而且低中产阶级家庭的收入自 80 年代以来一直在下降。文章强调了财富不平等问题,并质疑了一些人认为财富不平等仅仅是由于更多初创企业而导致的观点。

作者认为,这篇文章更多地是关于为什么像 PG 这样的人变得富有是可以接受的,而不是关于人们如何变得富有。文章指出,虽然现在开始新业务并接触市场比以往任何时候都更容易,但这仍然只对少数人可及,大多数人没有安全网或精力去考虑创业。

文章最终呼吁人们停止抱怨,而是努力变得富有。


HN 热度 215 points | 评论 285 comments | 作者:scarmoo | 1 day ago #

https://news.ycombinator.com/item?id=40962965

  • 在拥有财富税的国家(挪威)生活,对此存在矛盾看法:富人阶层只需支付相对于财富的实际税收,但对于创业者来说,财富税是一个问题,因为必须支付股息以支付财富税,这对初创企业和扩张企业非常不利。
  • 许多人认为财富只是某人保际中的一大堆钱,财富税意味着与他人分享这些钱,但大部分财富是拥有和经营极具价值的公司,因此对富人征收 2% 的财富税可能导致公司由随机的投资者管理。
  • 定义财富,不仅限于亿万富翁阶层;财富是拥有 500 万美元以上的流动资产,而美国最贫困的人每年赚约 1.2 万美元,却要支付更高比例的税收。
  • 资本利得税应该比所得税高得多,这似乎很明显,因为工薪族应该支付较低的税率,而那些几年前随机购买股票并看着数字增长的人则应支付更高的税率。
  • 资本利得税应该比所得税高得多,因为这会抑制投资,而投资创造就业机会和促进创新。这是一个基本的经济学原理。
  • 资本利得税应该比所得税高得多,因为这会抑制投资,而投资创造就业机会和促进创新。这是一个基本的经济学原理。
  • 通过鼓励直接向公司出售股票,而不是进行股票回购,可以促进投资,因为这样公司才能获得资金。
  • 瑞典、法国、加州、华盛顿州和纽约市发现,对富人征收高额税收导致他们离开,他们带走了他们的消费、投资和雇佣资金。
  • 富人离开会导致经济下滑,因为他们的离开会影响当地经济,例如,亚马逊的 Jeff Bezos 离开华盛顿州,这对当地经济造成了影响。

Tabloid: A clickbait headline programming language (2021) #

https://tabloid.vercel.app/

Tabloid 是一个真正的、图灵完备的编程语言,用 JavaScript 编写,灵感来自于点击率标题。这个编程语言的特点是以点击率新闻标题的风格编写程序。

它具有一些独特的特点和功能,比如使用关键词“YOU WON’T WANT TO MISS”后跟一个表达式来打印输出,所有由 Tabloid 打印的内容都会自动大写,并添加感叹号。声明函数时使用“DISCOVER HOW TO … WITH”,给变量赋值使用“EXPERTS CLAIM … TO BE”。

Tabloid 没有内置的循环结构,如果需要循环,可以使用递归。返回函数时,只需写“SHOCKING DEVELOPMENT!”。每个程序都必须以“PLEASE LIKE AND SUBSCRIBE”结束。

Tabloid 是一个完全功能的、图灵完备的编程语言,解释器用 JavaScript 编写。目前 Tabloid 仅支持数字、字符串和布尔值,但使用这些元素,可以编写任何想要的程序。此外,Tabloid 还有一个在 Racket 中实现的兼容性较好的版本和一小部分辅助函数库。

Tabloid 的标准关键字包括声明函数、开始块作用域、调用函数、条件表达式、结束块作用域、声明或赋值变量、打印输出、接收用户输入、布尔运算符、算术运算等。

Tabloid 是由 @thesephist 在一夜之间创建的,网站使用 Torus 和 blocks.css 构建。


HN 热度 200 points | 评论 29 comments | 作者:ko_pivot | 24 hours ago #

https://news.ycombinator.com/item?id=40964261

  • 评论指出 Tabloid 编程语言存在语法错误,GPT-4 无法正确执行简单任务。
  • GPT-4 在处理问题时产生了语法错误,无法正确输出结果。
  • 评论者怀疑 GPT-4 在处理字符串操作时存在困惑。
  • GPT-4 在处理函数调用、条件逻辑、基本数学运算和数字时无法正确输出结果。
  • 评论者认为 GPT-4 在抽象概念上表现良好,但在语法方面存在困难。
  • GPT-4 在输出中频繁出现关键词 BREAKING NEWS。
  • 评论者怀疑 transformers 在子图匹配方面存在问题,导致语法错误。
  • 研究表明,语法对语言模型来说并不困难,但 GPT-4 在语法方面仍然存在问题。

I’m not a fan of strlcpy(3) #

https://nrk.neocities.org/articles/not-a-fan-of-strlcpy

这篇文章讨论了关于 strlcpy(3) 函数的看法。

strlcpy(3) 是一个 OpenBSD 函数,通常被誉为 strcpy(3) 和/或 strncpy(3) 的更安全替代品。文章指出 strlcpy 的一个明显问题是,如果 src 没有以 null 结尾,它就不安全。但作者不喜欢 strlcpy 的原因并不是因为这个问题。

作者重新审视了一个旧的讨论帖子,其中 Ulrich Drepper 拒绝了将 strlcpy 添加到 glibc 的提案。他的理由是 strlcpy 效率低下,任何稍微思考一下的人都不会使用 strlcpy。文章详细讨论了在不同情况下处理字符串复制的最佳方法,提出了使用 memccpy(3)memcpy(3)strdup(3) 等函数更好的替代方案。

总的来说,作者认为在几乎所有情况下,他更愿意使用 memccpymemcpystrdup,而不是 strlcpy


HN 热度 165 points | 评论 268 comments | 作者:signa11 | 12 hours ago #

https://news.ycombinator.com/item?id=40967069

  • 任何不陈述长度的可变大小变量格式都可能引发缓冲区溢出漏洞,应避免在任何二进制互操作中使用这样的格式;
  • 在处理音频流等长度不确定的数据时,可以通过变长长度字段以经济方式表示各种大小;
  • 使用长度 + 内容表示使得在需要修改有效负载时更难(需要更多的簿记),使用可变大小长度会更加困难,因为可能需要移动或重新复制整个有效负载以为新的“长度”头腾出空间;
  • Niklaus Wirth 的观点值得借鉴;
  • Pascal 中的一些观点是正确的,尤其是关于空字符结尾字符串带来的问题;
  • Rust 中各种紧凑字符串包对于字符串实现很有帮助;
  • C 和 UNIX 早在 70 年代就采用了空字符结尾字符串,后续发展历史;
  • 在性能敏感代码中,使用 C 字符串可以更高效地获取子字符串,而对象化的字符串则需要更多的操作,可能会降低性能;
  • 在 Rust 中,String 和&str 分开处理,&str 是对 String 的引用,长度和容量,适用于不需要修改 String 的函数;
  • strlcpy(3)的目的是提供一个替代以前内存不安全的字符串复制例程的解决方案,而不是成为最佳和最有效的字符串复制器;
  • strlcpy(3)并非完全可以替代 strncpy,因为它不会完全覆盖缓冲区,可能会导致数据泄漏或不一致的哈希;
  • strlcpy 和 strncpy 在返回值和行为上有所不同,需要根据具体情况选择;
  • 有些人可能会有非常长的姓氏,需要考虑支持更长的字符串;
  • 有些系统可能需要支持较长的 URL,因此不应轻易排除支持较长 URL 的可能性;
  • C 语言中的字符串处理可能会引发许多问题,需要谨慎处理;
  • Ada 语言中的字符串处理库可能对 C 语言中的字符串处理有所启发;
  • 现代系统编程语言提供了更好的字符串处理方式,应该优先选择这些语言,即使效率略有降低;
  • C++ 中的 std::string 和 std::string_view 的设计可能存在一些问题,std::string_view 更常用但出现较晚;
  • 在现代 C++ 中,std::string 仍保留了 C 风格的零终止,即使不使用也会产生开销;
  • 使用 C++ 的 std::string 可能需要复制字符串以获取子字符串。

The fascinating and complicated sex lives of white-throated sparrows #

https://www.audubon.org/news/the-fascinating-and-complicated-sex-lives-white-throated-sparrows

这篇文章介绍了白喉麻雀的性生活,展示了它们复杂而迷人的行为。白喉麻雀是一种常见的小鸟,外表看起来普通,但实际上有着四种不同的性格。它们有黑白相间和深褐色的头部斑纹,这种表面上的差异反映了它们生活方式的显著差异。研究表明,这些颜色差异是永久性的,约一半的雄性和雌性属于每种颜色类型。

白喉麻雀的两种颜色类型在行为上也有显著差异。白色斑纹的鸟更具侵略性,而棕色斑纹的鸟更具 nurturing 特质。它们在领地防御、育雏过程中表现出不同的行为。有趣的是,这两种颜色类型的配对几乎总是一只白色斑纹的鸟和一只棕色斑纹的鸟。在配对过程中,雌性更倾向于选择棕色斑纹的雄性,而雄性更倾向于选择白色斑纹的雌性。

研究还发现,白喉麻雀的两种颜色类型在染色体上有差异,这导致它们表现出不同的行为特征。这种独特的性别特征使得白喉麻雀在繁殖季节呈现出四种不同的类型,几乎可以说它们有四种性别。这种独特的性别特征使得白喉麻雀成为了一个备受关注的研究对象,也展示了自然界中奇妙的生物多样性。


HN 热度 160 points | 评论 26 comments | 作者:laurex | 21 hours ago #

https://news.ycombinator.com/item?id=40964924

  • 一些评论讨论了标签颜色对鸟类行为研究的影响,认为难以控制,但不太可能影响鸟类行为。
  • 有人提到观察野生生态学家做鸟类标记,他们通过物种、性别等分段,以便更容易识别。
  • 有评论提到鸟类箱子内置秤重器,用于监测鸟类活动,这种技术在新西兰的项目中有应用。
  • 有人将白喉麻雀的行为类比于博弈论中的稳定策略。
  • 有评论讨论了白喉麻雀的配对行为,指出不同类型的配对会影响幼鸟的成功养育。
  • 有人将白喉麻雀的行为类比于人类关系,认为存在类似的动态。
  • 有评论提到鸟类配对行为与食物策略相关,可能会加强不同类型的性别配对。
  • 有人讨论了白喉麻雀的性别差异与行为的关系,质疑将这种差异称为“性别”的合理性。
  • 有评论认为“性别”一词在这里被用作“遗传性别 + 行为”的类比,虽然不常在生物学中使用。
  • 有人认为将“性别”概念应用于鸟类是愚蠢的,应该更多关注遗传因素。
  • 有评论指出作者将鸟类行为差异称为“性别”是作者的独创,不是研究者使用的术语。