每日HackerNews RSS

## ZJIT:一个新的 Ruby JIT 编译器 ZJIT 是一个为 Ruby 设计的即时编译 (JIT) 编译器,由 YJIT 团队构建并集成到 Ruby 核心实现 (YARV) 中。ZJIT 的设计目标是提升性能并鼓励社区贡献。它现在已编译到 Ruby 4.0 中,但默认禁用 – 使用 `--zjit` 或 `RUBY_ZJIT_ENABLE` 启用它。 虽然目前速度比 YJIT 慢,但自首次发布以来已经取得了显著进展。关键改进包括能够“侧退出”到解释器,处理更复杂的代码(通过完整的 Ruby 测试套件和大型应用程序测试),以及优化更多的 Ruby 操作,例如方法调用和变量访问。 最近的工作重点是优化特定指令(例如 `invokeblock` 和 `setinstancevariable`),处理多态方法调用,以及改进寄存器分配器。该团队还在努力减少对 Ruby 运行时进行基本操作的依赖。 ZJIT 仍在积极开发中,可能会遇到崩溃或性能问题。鼓励通过 Ruby issue tracker 或 GitHub 进行测试和反馈。该团队欢迎社区贡献,并已建立了一个聊天室供讨论。

## Ruby 4.0 引入 ZJIT,取代 YJIT 的重点 Ruby 4.0 将发布 ZJIT,这是一款新的 JIT(即时编译)编译器,旨在更容易让贡献者参与。 这一转变源于之前的 JIT,YJIT 的开发速度放缓,其团队现在优先考虑 ZJIT。 虽然 YJIT 没有被弃用并且仍然可用,但这一举动标志着对 ZJIT 更传统设计的长期投资。 讨论中提到了对 JavaScript 的 LBBV(轻量级基于字节码的虚拟机)等替代 JIT 方法的兴趣,可能与 SoN(单优化)编译器结合使用,以提高性能。 ZJIT 还引入了“侧退出”功能,允许在动态操作期间遇到意外类型时优雅地回退到解释器,从而提高稳定性。 一些开发者对这一变化表示沮丧,预计未来会有维护工作,但他们被保证 YJIT 仍然受支持。 总体情绪强调了 Ruby 的稳定性以及每次升级带来的免费性能改进。 一位用户还分享了将 Rails 应用程序重写为 Rust 的积极体验,并指出代码清晰度有所提高,尽管代码量略有增加。

这篇帖子是对破折号(—)的有力辩护,反对它最近的负面声誉。作者认为,破折号是一种历史悠久、优雅的标点符号,用于停顿和插入语,但现在却被不公平地与大型语言模型生成的“人工”写作联系起来。 出于拒绝让算法决定写作风格的目的,作者*宣布*禁止在他们的博客中使用连字符(-),完全用破折号代替,甚至在技术上应该使用连字符的地方也是如此。这是对破折号偏见的蓄意抗议,以及对破折号为真正作家所夺回的权利。作者甚至创建了一个插件,自动将博客上的所有连字符转换为破折号,以此表明他们对这场风格反叛的决心。

启用 JavaScript 和 Cookie 以继续。

## ICE 的技术建设及对警察国家的担忧 一篇关于 ICE 增加对高科技监控设备投资的报道,在 Hacker News 上引发了激烈的讨论,中心议题是政府权力升级和潜在滥用问题。用户对 ICE 扩展的能力——包括社交媒体监控、面部识别和数据追踪——表示担忧,并质疑其最终目的。 许多人认为 ICE 正在成为建立国内警察国家的工具,其策略类似于专制政权。一些人呼吁科技工作者积极反击这一趋势,通过构建工具来追踪 ICE 的活动并分享不当行为的证据。另一些人则认为,在有效组织抵抗之前,解决住房和医疗保健等系统性问题至关重要。 一个反复出现的主题是,这项技术最终不可避免地会被用来对付异议者,而不仅仅是移民,并且当前的政治趋势正在侵蚀自由。一些评论员强调了移民甚至归化公民的脆弱性,而另一些人则指出了 9/11 以来监控日益增加的趋势。 还有关于推动这项技术建设的经济激励,以及从中获益的政治关系密切的公司。

## Shadow DOM 引用目标:改善可访问性 Shadow DOM 虽然解决了重要的 Web 开发问题,但历史上由于其封装的树形结构隔离了元素,从而造成了可访问性问题。具体来说,`aria-labelledby`、`popoverTarget` 和 `<label for>` 等属性通常无法正确地定位 Shadow DOM *内部* 的元素。 一项新的提案,目前 Chrome 和 Safari 已经有了原型实现(通过实验性标志启用),旨在通过 `shadowRootReferenceTarget` 属性和 `ShadowRoot.referenceTarget` API 来解决这个问题。这允许开发者指定 Shadow DOM *内部* 的特定元素作为外部引用的有效目标。 例如,`<label for>` 可以指向组件 ID,而 `shadowRootReferenceTarget` 则将标签定向到组件的 Shadow DOM *内部* 的实际输入元素。此功能不仅适用于标签,还能使表单属性、弹出窗口和各种 ARIA 属性受益。 鼓励测试!在 Chrome 或 Safari 中启用此功能,并在 issue 1120 上提供反馈,以帮助确保此解决方案有效地改善 Shadow DOM 的可访问性和可用性。

Hacker News 新闻 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Shadow DOM 中通过引用进行定位 (meyerweb.com) 19 分,surprisetalk 1 天前 | 隐藏 | 过去 | 收藏 | 1 条评论 azangru 1 天前 [–] > 不,如此简单的东西真的不应该成为一个 Web 组件...他写的是一个自定义复选框。这是我一直在遇到的问题之一。因为许多前端开发者接受了 React 和其他基于组件的库的训练,认为自定义复选框绝对应该成为自己的组件,封装特定于它的样式和行为。如果现在这与 Web 平台的趋势相悖,那将是痛苦的。回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:

将资源文件直接嵌入C/C++程序通常需要外部工具,如ImageMagick或`xxd`,增加构建依赖。然而,有几种方法可以避免这一点。 对于简单的ASCII文件(如着色器),可以使用类似`STRINGIFY`的宏的预处理器技巧,将文件内容作为字符串字面量包含,只需最少的文件编辑。 一种更复杂、特定于平台的方法是利用内联汇编将二进制数据放入可执行文件的`.rodata`节。这种方法通过`INCBIN`宏演示,定义了嵌入数据的起始和结束指针,允许在运行时访问其大小和内容。 虽然功能强大,但汇编方法不可移植,并且依赖于特定的汇编器和平台架构。选择最佳方法取决于文件类型、可移植性要求以及构建复杂度的容忍度。

## xcc700:一个微型、自托管编译器 xcc700是一个紧凑的编译器(700行C代码),专为现代平台设计,特别是ESP32。它注重可理解性和可修改性,为创建自定义语言或在嵌入式系统上快速测试代码提供了基础。 该编译器将单个C源文件作为输入,并输出可重定位的ELF文件,可以轻松地通过elf_loader组件集成到ESP-IDF项目中。它支持基本的C特性——while循环、if/else语句、整数、指针和函数调用——但为了简单起见,有意省略了许多高级特性。 xcc700可以在标准计算机上编译和运行(交叉编译),*或者*在ESP32上自编译并直接执行。虽然为了简单性牺牲了性能(将CPU视为堆栈机),但它实现了令人印象深刻的速度——在ESP32-S3上高达每秒17,500行代码。 xcc700以MIT许可证发布,旨在作为实验和扩展的起点,鼓励贡献和分支,以探索微型、自托管编译器的可能性。

## Xcc700:适用于ESP32的700行C编译器 一位开发者创建了xcc700,一个由700行代码组成的迷你C编译器,专为ESP32(Xtensa)平台设计。这个单遍、递归下降编译器直接生成可通过ESP-IDF的`elf_loader`运行的REL ELF二进制文件。它是一个基本实现,专注于自举,并将Xtensa CPU视为堆栈机,省略了寄存器分配。 该项目旨在作为教育沙盒,并为一种专为ESP32定制的独特语言提供潜在基础,作者认为ESP32是一个被低估的业余项目平台。讨论还涉及在ESP32板上运行Linux以及在C中实现借用检查等安全功能所面临的挑战,以及与其他小型C编译器(如TCC、chibicc和sectorc)的比较。该开发者还分享了一个用于演示的自定义shell,暗示未来可能会发布可重用组件。 [GitHub仓库](https://github.com/valdanylchuk/xcc700)

贝德拉姆/疯狂立方体谜题涉及将13个碎片——源自五格骨牌和一块4立方体碎片——组装成一个4x4x4的立方体。可能性数量巨大:超过3万亿的碎片方向和超过4200万亿的顺序排列。然而,由于立方体的紧密贴合,许多方向是不可能的,从而大大减少了实际的搜索空间。 开发了一个软件程序,以系统地测试每一种可能的碎片顺序和方向。它为每个碎片分配一个数字并编码其3D坐标,然后迭代地尝试将碎片放入立方体中,并在必要时回溯。经过86小时的计算(核心解决方案在30小时内找到),该程序识别出**19,186个唯一解**,来自460,464个总装配立方体,并由于旋转对称性而丢弃了重复项。 这大致相当于1/13,523的随机组装立方体的几率,使其比解决俄罗斯方块立方体难6.7倍。该程序最终探索了1666亿种排列,大大减少了最初的4200万亿种可能性。完整的解决方案目录可供下载。

一个黑客新闻的讨论重新浮现了一篇2008年的文章,详细介绍了解决贝德拉姆魔方(Bedlam Cube)的过程,这是一个具有挑战性的3D谜题。原文称在奔腾4处理器上找到所有19,186个解需要86小时。 然而,评论者展示了在现代硬件上显著的性能提升。一位用户在M3 Macbook Air上用3小时15分钟解决了它(速度提升9.2倍),通过优化标志进一步缩短到一小时以内。其他人分享了使用Knuth的Dancing Links算法的经验,该算法最初是为数独求解器开发的,后来被用于解决贝德拉姆魔方。 讨论还涉及文章的年代以及使用多线程和现代优化技术可能实现更快的解决方案。一位用户指出对网站缺乏HTTPS安全性的担忧。

隐私重要吗? 自行托管你的实例以获得完全控制权。 在 GitHub 上查看 加载中...

## Tempblog-PSI:一款私密博客和日记工具 一个名为tempblog-psi.vercel.app的新项目在Hacker News上分享,它提供了一种独特的日记体验,利用LLM模拟受众。开发者基于写作“为”想象中的读者带来的个人益处而构建它,旨在改善思维消化。 反馈褒贬不一。一些用户认为这个概念很有价值,尤其是在完善写作、测试论点或避免公共在线空间的负面情绪方面。另一些人则质疑与“虚假”受众互动的意义,认为这是一种回音室或不如真实的互动令人满意。 讨论集中在多样化AI“角色”提供不同反馈的可能性上,以及对该工具被滥用或进一步恶化在线讨论的担忧。开发者乐于接受反馈,并计划探索诸如挑战评论者角色和“暴躁的隐士 ट्रोल”库等功能。最终,该项目引发了关于人工智能在个人表达中的作用以及真实联系价值的争论。

## acadlisp.de:浏览器中的AutoLISP acadlisp.de 是一个基于 Rust 的 AutoLISP 解释器,编译为 WebAssembly,允许 AutoLISP 代码直接在 Web 浏览器中运行——无需 AutoCAD。它源于 1991 年的一个项目,该项目的创建者使用 AutoLISP、CSV 文件和模板自动生成电气原理图,形成了一种独特高效的工作流程。 出于怀旧和保存这种知识的愿望,该项目在线复活了这种自动化能力。AutoLISP 诞生于 1958 年,以其“同像性”(代码即数据)、自修改能力和符号处理而闻名——这些特性在原始原理图生成器中被利用,代码动态地创建更多代码。 该解释器目前支持核心 AutoLISP 函数,如 `defun`、`setq` 以及数学/列表操作,并以 SVG 和 DXF 格式输出图形。一个简单的例子展示了通过单个函数调用绘制矩形。你可以在网站上探索一个交互式演示。

## Rust/WASM AutoLISP 解释器:一份怀旧的保存 一位开发者“holg”创建了一个Rust/WASM AutoLISP解释器,AutoLISP是AutoCAD自90年代初以来使用的Lisp方言。该项目源于开发者数十年前建立的个人工作流程——使用电子表格定义组件,并通过AutoLISP模板自动生成技术图纸。holg意识到这种方法在很大程度上被遗忘,因此他构建了这个解释器,一部分是为了怀旧,另一部分是为了在知识消失之前进行保存。 该项目包含原始的AutoLISP文件和重现,可以直接在网页浏览器中运行。许多评论者分享了使用AutoLISP进行各种应用的类似经历,包括电气原理图、PCB布局、广播设施设计,甚至大型基础设施项目,如光纤网络勘测和立法选区划分。 许多人强调了AutoLISP的强大和效率,尤其是在自动化重复绘图任务方面。讨论揭示了一个共同的主题:AutoLISP赋予了用户*无需*专门的编程专业知识就能显著改善工作流程的能力。虽然现在有现代工具,但该项目是对一个强大但经常被忽视的CAD自动化时代的致敬。代码可在GitHub上找到:[https://github.com/holg/acadlisp/](https://github.com/holg/acadlisp/)。

早期Macintosh的开发面临一个令人惊讶的瓶颈:软盘驱动器。尽管拥有强大的处理器,有限的内存导致频繁地从缓慢的软盘加载数据,抵消了机器的速度优势。史蒂夫·乔布斯特别关注漫长的启动时间,可能需要几分钟。 为了激励工程团队,乔布斯采取了一种独特的策略。他挑战工程师拉里·凯尼恩缩短启动时间,将改进描述的不作为一项技术壮举,而是一项拯救生命的努力。乔布斯计算,仅仅为预计的五百万用户缩短10秒启动时间,每年就能集体节省数十人的寿命。 虽然团队已经很有动力,但乔布斯富有戏剧性的呼吁——以及其中固有的幽默感——进一步激励他们优化软件,最终超过了缩短10秒的目标。这个故事突显了乔布斯非常规的领导力和对用户体验的不懈追求。

更多

联系我们 contact @ memedata.com