每日HackerNews RSS

## Linux 中的共享库与加载时重定位 本文解释了 Linux 如何利用加载时重定位来实现共享库的使用。与加载到固定地址的可执行文件不同,共享库会动态加载到可用的虚拟内存中,这意味着它们的最终地址直到运行时才可知。这带来了一个挑战:库中的代码通常引用库*内部*的数据(如全局变量)或其他函数,需要编译期间未固定的地址。 加载时重定位通过最初在库的代码中嵌入占位符地址(如 0x0)来解决这个问题。一个重定位段详细说明了这些占位符的位置以及它们所引用的符号。当库被加载时,动态加载器会根据库的实际运行时地址调整这些占位符,从而有效地“重定位”这些引用。 例如,对库内函数的调用最初包含相对偏移量。动态加载器根据库的加载地址计算绝对地址并更新指令。类似地,对全局变量的访问会被修补为正确的内存位置。 虽然位置无关代码 (PIC) 现在是首选方法,但理解加载时重定位可以提供共享库如何工作的基本理解,并简化对 PIC 概念的掌握。此过程对于现代操作系统的有效内存使用和代码共享至关重要。

这篇 Hacker News 帖子推荐了一篇引人入胜的多部分文章,详细介绍了程序执行期间共享库的加载过程。用户 “saltypal” 推荐了这篇以及另外两篇相关文章,还有 glibc 作者关于内存管理的关键论文,并指出这些资源极大地补充了他的计算机科学教育——尤其是在就读文理学院时,缺乏底层细节。 他们强调理解这些概念对于程序性能分析和调试的实用价值。帖子包含推荐文章和资源的链接,供有兴趣深入了解程序加载和内存管理“内部原理”的人参考。它还包含一份 Y Combinator 申请公告。

``` %PDF-1.4 % âãÏÓ 4 0 obj > /PageLabels > ] >> /Outlines 2 0 R /Pages 1 0 R >> endobj 5 0 obj ```

## ARM 内存标记与苹果的增强:摘要 这次黑客新闻的讨论集中在 ARM 的内存标记扩展 (MTE) 以及苹果的实现,名为增强型内存标记扩展 (EMTE),该扩展存在于他们的 M5 芯片和较新的 iPhone 中。MTE 旨在通过在运行时检测内存错误来提高 C/C++ 代码的内存安全性。 苹果的 EMTE 在原始 MTE 的基础上进行了构建,解决了人们认为的弱点,并增加了规范标签检查以及在发生错误时报告所有非地址位等功能。虽然有些人认为 EMTE 主要帮助苹果维护与现有代码库 (XNU) 的兼容性,但它代表着硬件辅助内存安全方面迈出的重要一步。 对话中提到,SPARC 处理器自 2015 年以来就已具备类似技术 (ADI)。英特尔和 AMD 也在致力于开发 x86 对应技术 (ChkTag)。更广泛的观点是,虽然像 Rust 这样的语言提供编译时内存安全,但 MTE 为现有的 C/C++ 应用程序提供了一个有价值的纵深防御层,即使它需要运行时开销,也是一项值得的创新。关于硬件解决方案是否能弥补软件缺陷存在争论,但许多人同意提高内存安全性是一个积极的结果。

澳大利亚唯一的鼩鼱,*Crocidura trichura*,已被正式宣布灭绝。这种曾经在圣诞岛上很常见的、只有五克重的微型哺乳动物——来自印度尼西亚的独特迁徙者——在19世纪末和20世纪初黑鼠和致命寄生虫的入侵后消失。 尽管早在1908年就被认为已灭绝,但1958年和1984年的短暂重新发现曾带来一线希望。一只雌性鼩鼱甚至在圈养中存活了一年以上,人们在发现一只雄性后尝试繁殖,但最终它们都死了。 尽管进行了数十年的搜寻,但没有发现其他个体,对捕食者的分析也没有发现它们继续存在的证据。 圣诞岛鼩鼱的消失凸显了澳大利亚令人震惊的灭绝记录——在所有国家中最高。它的故事提醒人们,脆弱的生态系统如何被入侵物种和人类影响所破坏,并引发了一个问题:还有多少物种在无人知晓的情况下消失。

## 圣诞岛负鼠 & 灭绝讨论 一篇关于圣诞岛负鼠已灭绝的Mongabay文章引发了Hacker News的讨论,凸显了定义和确认灭绝的复杂性。用户指出,该负鼠在1908年最初被认为灭绝后,曾于1958年和1984年被短暂地重新发现,引发了关于可能被遗漏的物种数量的问题。 对话涉及到了负鼠出人意料的小体型(有些仅重几克!)以及尽管体型差异巨大,哺乳动物生物学的高度一致性。几位评论员争论了“灭绝”的含义,一位科学家解释了科学界使用的细微语言与公众认知之间的差异。 讨论也扩展到考虑保护不仅仅是具有魅力的巨型动物群,还要保护微生物,以及明确宣布任何物种灭绝的挑战,特别是小型和难以捉摸的物种。最终,该帖子反映了自然世界的广阔以及潜在的未被发现的生命。

oxdraw 旨在弥合代码生成图表(如 Mermaid 生成的图表)与 Lucidchart 等可视化绘图工具的可定制性之间的差距。它允许用户使用 Mermaid 语法创建和编辑图表,然后使用基于 Web 的界面进行视觉优化。 重要的是,任何视觉调整——位置、连接线路径、颜色——都会自动转换回 Mermaid 源代码文件作为注释,从而保持声明式、可重现的工作流程。这确保了图表保持可版本控制,并与标准的 Mermaid 工具兼容。 该项目包含一个 Rust CLI,用于将 `.mmd` 文件渲染成图像,以及一个基于 React 的 Web 编辑器。该编辑器提供节点/边样式、控制点操作以实现精确的线条布线以及网格对齐等功能。路径绘制算法优先考虑清晰的边缘,而不是完全平滑的线条,并允许受控的重叠以避免过长的连接线。oxdraw 简化了图表创建,兼具代码的力量和视觉编辑的灵活性。

## 展示 HN:带有可拖动自定义功能的代码生成图表工具 RohanAdwankar 创建了一个新工具,旨在弥合声明式图表绘制(如 Mermaid.js)和完全可定制的视觉编辑器(如 Lucidchart)之间的差距。该项目允许用户使用代码生成图表,然后使用拖放功能视觉上优化布局和外观。 开发者设想了一种工作流程,其中 AI 生成 Mermaid 语法的图表草稿,然后由用户进行自定义。 许多评论者强调了这种工具的需求,尤其是在 Mermaid 自动布局不足以应对复杂图表时。 讨论围绕着替代图表绘制语言(如 D2)、GitHub 对 Mermaid 的原生支持,以及潜在功能(如悬停弹出窗口和将该工具作为 React 组件嵌入)展开。 一个关键点是需要许可证文件(现在已由开发者添加)和托管来提高可访问性。 该项目处于早期阶段,欢迎通过 GitHub 提供反馈和功能请求。

这个浏览器扩展程序,之前用于显示YouTube的点赞数,由于最近的更改正面临广泛批评。用户报告增加了不需要的高级分析弹出窗口,并且转向了每月5美元的订阅模式,用于之前免费提供的功能——包括基本点赞数和数据可视化。 许多人认为开发者正在利用用户数据来创建付费功能,并对激进的盈利方式感到沮丧。投诉包括侵入性的Patreon广告、Chrome打开时不断的新标签页垃圾信息,以及普遍感觉到的“敲诈”行为。 一些用户已经卸载了该扩展程序,理由是其价值下降并推荐YouDislike等替代方案。普遍的看法是,一个简单的浏览器插件不应该需要付费订阅,并且当前的实现方式正在负面影响用户体验。

## 拿破仑军队与疾病:摘要 最近对拿破仑俄国战役中阵亡士兵牙齿的DNA分析显示,军队覆灭的原因并非仅仅是寒冷和饥饿,还包括伤寒沙门氏菌 (*Salmonella enterica*) 和复发热 (*Borrelia recurrentis*) 等疾病。 这挑战了之前对拿破仑军队主要死因的假设。 这一讨论引发了关于19世纪牙齿健康状况的争论,评论员指出一些士兵的牙齿状况出人意料地良好,甚至比现代标准还好,这可能归因于糖的摄入量有限和年龄。 还有关于拿破仑战略决策的讨论,特别是为什么他没有追击占领圣彼得堡,以及他的军队构成,包括俄国军队中外国军官的普遍存在。 最后,还出现了一场关于词语定义演变(如“decimate”)和接受语言用法变化的语言学方面的讨论。

## 编码技术总监:我为什么仍然编写代码 许多技术总监最终会转型为纯粹的管理角色,把时间都花在会议上。然而,这位技术总监仍然*编写*代码——不是简单的修复,而是重要的功能。他认为这是他最具价值的工作。 他的编码分为三大类:**实验性项目**(例如从头开始构建一个人工智能聊天产品,最终带来数百万美元的收入),**关键客户需求**(通过深入的系统理解快速解决紧急问题),以及令人惊讶的,**错误修复**(以保持对代码库的重要心理地图)。 他认为,保持动手实践能让他及时了解技术发展,从而做出关于工具和招聘的明智决策——尤其是在人工智能方面,了解其优势和劣势。更重要的是,这让他能够察觉架构问题和技术债务,这些问题可能无法仅通过报告发现。 这种方法之所以有效,是因为他擅长构建,而不是组织管理,并且拥有强大的工程领导者来处理这些方面。现代人工智能工具极大地提高了他的生产力,将他的角色从编写*所有*代码转变为提供背景和评估解决方案。最终,他认为成功的技术总监的关键在于找到*你*能够创造最大价值的地方,并根据你的技能和公司需求进行调整。

## 黑客新闻讨论:会编码的CTO 一场黑客新闻讨论围绕着一篇博文展开,博文作者是一位积极编码的CTO,他没有直接下属,并优先进行实际开发。核心争论在于这种领导方式是否有效。 许多评论者质疑将主要精力放在编码的人称为“CTO”的合理性,认为“首席工程师”之类的职位更准确。人们担心专注于编码会分散对战略、团队管理和流程改进等关键领导职责的注意力。一些人认为CTO *应该* 深入理解代码库,而另一些人则认为他们的价值在于高层愿景和为团队扫清障碍。 一个反复出现的主题是授权和赋能他人的重要性。 许多评论者强调,领导者持续长时间工作会传递负面信号,可能助长过度工作的文化。 讨论还涉及CTO职位的不同定义,一些人认为它是一个灵活的角色,取决于公司规模和发展阶段。最终,共识倾向于CTO的主要职责是领导和战略方向,而编码是一种次要的,并且可能随着公司发展而产生不利影响的活动。

## 人工智能时代的代码审查效率 代码审查变得越来越重要,尤其是在人工智能工具生成更多代码的情况下。然而,许多工程师过于关注*差异*本身,而错失了重要的改进机会。有效的审查需要理解更广泛的系统——识别现有解决方案或建议更好的代码放置位置,并促进代码库的一致性。 关键原则包括:**简洁**(目标是提出 5-6 条有影响力的评论,将风格问题合并为一次自我修正的请求),和 **客观**。避免基于个人偏好进行吹毛求疵(“我*会*如何编写它”),而是专注于功能和潜在问题。审查应该表明一个更改是否可以接受,即使有建议的改进。 **阻塞审查应该保留给严重问题**,清楚地说明为什么更改不能合并。大量阻塞的审查通常表明存在权限控制或团队之间的激励机制不一致。优先批准,尤其是在快速发展的开发环境中。 这些原则适用于审查人工智能生成的代码,在这种情况下,权限控制更为合适,但请记住代码审查具有多种目的——知识共享、错误检测和维护代码库质量——并且方法会根据团队价值观而异。

## Hacker News 讨论:常见的代码审查错误 最近 Hacker News 的讨论集中在工程师在代码审查中常犯的错误。核心观点是**代码审查应该关注本质问题,而不是个人偏好。** 许多评论者强调避免因微小的风格问题而“阻塞”审查,而是提出建议并批准拉取请求。 然而,关于批准的含义也产生了一些争论。有些人认为批准意味着完全接受,即使忽略评论,而另一些人则认为批准是建立在解决反馈意见基础上的确认。一个关键点是**代码库内的一致性至关重要**,尤其是在成熟的项目中,这比个人的风格选择更重要。 其他讨论的问题包括**更好的代码审查工具**的需求(突出显示类层次结构,而不仅仅是差异)以及利用**自动代码检查**来避免吹毛求疵。 许多评论者强调**本地测试**的重要性,即使依赖 CI/CD 管道,以及**清晰沟通**的价值——避免无关问题,专注于正在审查的更改。最终,讨论强调了对代码审查采取务实和协作的方法的必要性。

## Org Social 2.3+:高效信息流处理 Org Social 2.3+ 解决了处理大型、不断增长的 social.org 文件时,大量帖子和信息流造成的性能瓶颈。传统方法顺序下载整个文件会浪费带宽并冻结用户界面。 新版本采用了三层优化:**并发队列处理**用于并行下载(可配置,最高 20 个),**基于 HTTP Range 的部分获取**仅下载最近的帖子,而不是整个文件,以及 **UI 分页** 一次渲染 10 个帖子。 虽然 HTTP Range 请求被广泛支持,但系统会智能地处理 Cloudflare 和 Codeberg.org 等平台的限制,并在必要时回退到完整下载。性能基准测试表明,一旦信息流超过 100 个帖子,下载大小始终保持较小(约 8KB),无论帖子总数多少。 用户可以通过 `org-social-max-concurrent-downloads` 和 `org-social-max-post-age-days` 来调整性能,以优化连接速度和带宽。这种架构确保了 Org Social 能够随着信息流和关注者数量的增长而高效扩展,同时保持其去中心化特性和响应速度。

最近一篇Hacker News上的帖子讨论了“social.org”,这是一个基于Org Mode构建的去中心化社交网络。核心话题在于它处理极大型“社交文件”的能力——可能达到数百万行——而不会出现性能问题。 作者通过高效的HTTP范围请求来实现这一点,只获取必要的数据。然而,一位评论者质疑这种复杂性是否必要,建议使用传统的、带有较小且易于获取文件的文件系统方法可能更简单。他们还想知道HTTP/3的改进是否解决了获取大量小文件的问题。 目前,social.org并不广泛流行,最近的图遍历显示只有46个可访问的节点和487条边,使用它需要一定的技术专长。这个项目是X/Twitter和Mastodon等主流平台的一个小众替代方案。

更多

联系我们 contact @ memedata.com