Eli Bendersky

RSS: https://eli.thegreenplace.net/feeds/all.atom.xml
Eli Bendersky 关于编程、编译器、Go、Python、LLVM 及底层软件工程的技术博客。

对“解析,而非校验”的 Rust 思考

<p>和许多程序员一样,我也觉得 Alexis King 的 文章非常有趣,因为它为一种看似熟悉且重要的编程惯用法赋予了名称——这种惯用法我过去也曾观察并使用过,却从未明确地给它命名。<br><br>本文是对“解析而非验证”模式在 Rust 编程语言中的应用进行的评述(原文使用的是 Haskell)。我尤其关注在 Rust 标准库及其他知名项目中寻找该模式的教学示例。</p><p>这里不再重复原文内容(请先阅读原文!),以下是其核心要点。</p><p>以 Vec 这个经典类型为例,它的 first 方法返回 Option&lt;&amp;T&gt;。为什么?因为一个向量并不保证一定包含元素,那么如果对空向量调用 first 会怎样呢?<br><br>在这种情况下返回 Option 是 Rust 中的惯用做法,并且提供了便捷的语法糖来处理那些返回 Option 的函数结果,从而决定下一步该如何操作。</p><p>那么问题出在哪里呢?</p><p>假设我们有一个从环境变量中读取配置路径的函数,同时强制要求列表不能为空:</p><pre>use anyhow::{Result, ensure}; fn get_configuration_directories() -&gt; Result&gt; { let value = env::var("CONFIG_DIRS").context("无法读取 CONFIG_DIRS")?; let directories: Vec = value…</pre>
评论点赞收藏3 天前

离散时间傅里叶序列与变换笔记

Eli Bendersky 的离散时间傅里叶序列(DTFS)与离散时间傅里叶变换(DTFT)学习笔记。内容从离散信号的复指数表示出发,解释 N 周期离散信号仅有 N 个独立复指数,推导 DTFS 系数时利用有限求和无收敛性问题,并类比连续情形做乘积求和、交换求和顺序等操作。 文章定位为数字信号处理理论基础,预告后续会写 DFT 相关帖子。属于偏教材式的推导笔记,信息密度中等,适合想理解 DFT 前因后果的读者,但缺乏一手经验或争议点。
评论点赞收藏10 天前

阶乘有多大?

用Stirling近似和Gamma函数估算阶乘位数,无需计算器。52! 的位数估算结果与实际值68非常接近,误差仅几位。Gamma函数将阶乘推广到实数域,通过分部积分和Laplace方法可推导Stirling公式。
评论点赞收藏33 天前

并发服务器:第8篇——Go 的实现

Eli Bendersky 在并发服务器系列第8篇用 Go 重写之前的状态机协议,展示 Go 如何处理并发网络编程挑战。从顺序服务开始,逐步引入 goroutine 和 channel,对比 Rust 版的实现差异。
评论点赞收藏38 天前

并发服务器:第7篇——Rust 实现

Eli Bendersky 的并发服务器系列第7篇,用 Rust 实现四种并发模型:顺序状态机、每客户端一线程、固定线程池(带背压)、以及 tokio async/await 异步事件驱动。 代码完整可运行,适合想系统理解 Rust 并发编程的开发者。
评论点赞收藏45 天前

相对速度与接近速度

相对速度与接近速度是两个不同的物理概念。两物体相向运动时,接近速度是两者速率之和,而相对速度需考虑参考系变换。文章澄清了这两个容易混淆的概念,并给出了具体计算示例。
评论点赞收藏57 天前

傅里叶变换笔记

<p>傅里叶级数是分析周期函数的绝佳工具。然而,对于那些不重复的函数又该如何处理呢? 只要我们不关心该函数在该区间之外的行为,就可以对定义在有限区间上的非周期函数进行傅里叶级数的计算。</p><p>接下来,我们将这一思路拓展到那些从不重复的函数——也就是定义在区间 (-∞, +∞) 上的非周期函数。</p><p>可视化非重复函数的傅里叶级数</p><p>为了更好地引出这一主题,让我们回顾一下之前在 中使用的例子:</p><p>[t(x)= \begin{cases} x &amp; 0 \leq x \leq 1 \ 2-x &amp; 1 &lt; x \leq 2 \ \end{cases}]</p><p>通过将 t(x) 进行奇性延拓,扩展至区间 [-2, 0]。在那篇文章中,为了使傅里叶级数得以应用,我们假设 t(x) 在整个 x 轴上以周期 2L=4 持续重复。然而,现实情况是,t(x) 并不会重复——事实上,它根本不会重复。 接下来,让我们来观察我们的傅里叶级数是如何运作的。</p><p>请记住,用于近似 t(x) 的傅里叶级数正是正弦级数(因为 t(x) 是一个奇函数):</p><p>[t(x)=\frac{8}{\pi^2}\bigg[ sin\frac{\pi x}{2}-\frac{1}{3^2} sin\frac{3\pi x}{2}+\frac{1}{5^2}sin\frac{5\pi x}{2}-\cdots\bigg]]</p><p>以下可视化操作是交互式…</p>
评论点赞收藏76 天前

2026 年 4-6 月阅读总结

作者 Eli Bendersky 列出了 2026 年 4 月至 6 月的阅读清单,包含《纽伦堡审判》等书籍的个人简评。内容属于常规的个人书单分享,缺乏技术深度或行业洞察,对科技读者参考价值有限。
评论点赞收藏91 天前

插件案例研究:Pluggy

本文以 pytest 项目中的 Pluggy 库为例,深入分析 Python 插件系统的架构设计与实现细节。作者探讨了插件机制的核心概念、钩子(hook)机制以及扩展性设计,为需要构建插件化系统的开发者提供了实用的工程参考。
评论点赞收藏108 天前

关于使用LLM Agent启动新项目的思考

<p>几个月前,我写过一篇关于的文章。 值得先说明的是,通过一切合理的方法,这次重写都取得了成功;从那以后,我一直能够顺利地维护该项目,没有任何问题。</p><p>在这篇文章中,我……</p>
评论点赞收藏113 天前

傅里叶级数笔记

<p>三角函数傅里叶级数是一种精妙的数学理论,它展示了如何将一个周期函数分解为无穷多个正弦波的和。<br>这些是我关于该主题的笔记,附带了一些示例以及与希尔伯特空间中线性代数的联系。</p><p>傅里叶级数的系数</p><p>我们假设……</p>
评论点赞收藏125 天前

缩放、拉伸和平移正弦波

本文简要解释了如何调整标准正弦函数sin(x)以改变其振幅、频率和相位偏移。具体来说,给定一般函数s(x)=A·sin(w·x+θ),文章将探讨调整参数对波形的影响。 适合对数学和信号处理感兴趣的读者。
评论点赞收藏150 天前

关于WebAssembly作为堆栈机器的思考

This week the article Wasm is not quite a stack machine has been making the rounds and has caught my eye. The post claims that WASM is not a pure stack machine because it has locals and is missing som...
评论点赞收藏153 天前

在 Chrome 开发者工具中调试 WASM

When I was working on the WASM backend for my Scheme compiler, I ran into several tricky situations with debugging generated WASM code. It turned out that Chrome has a very capable WASM debugger in it...
评论点赞收藏160 天前

watgo - 一个用于 Go 的 WebAssembly 工具包

I'm happy to announce the general availability of watgo • the WebAssembly Toolkit for Go. This project is similar to wabt (C++) or wasm-tools (Rust), but in pure, zero-dependency Go. watgo comes wit...
评论点赞收藏173 天前

关于拉格朗日插值多项式的笔记

本文详细探讨了拉格朗日插值多项式的原理、存在性和唯一性,通过线性代数和多项式基函数的方法展示了如何构造插值多项式。文章还讨论了范德蒙矩阵的可逆性及其在求解插值问题中的应用,并证明了拉格朗日基函数构成多项式空间的实际线性代数基。
评论点赞收藏211 天前

关于多项式线性代数的笔记

本文详细阐述了多项式构成的向量空间结构,包括多项式加法和标量乘法的性质、线性无关性、生成集和基的概念。进一步讨论了多项式空间的内积定义及正交性,并指出单项式基在该内积下不正交。 文章通过严谨的数学推导,展示了如何将线性代数方法应用于多项式空间,为理解多项式的代数结构提供了理论基础。
评论点赞收藏215 天前

借助LLM重写Pycparser

本文介绍了Eli Bendersky如何利用LLM编程助手(Codex)重写了广泛使用的开源C解析器pycparser,采用手写递归下降解析器并移除对PLY的依赖。 文章详细描述了原有解析器的诸多问题,如YACC方法的局限性、维护困难、依赖风险等,以及利用LLM辅助重写的过程,包括测试策略、代码审查、优化代码质量等。 最终新版本不仅通过了所有测试,还提升了性能约30%。作者认为这一经历展示了现代LLM编程助手的强大潜力,显著提高了开发效率,同时也引发了对代码质量的思考。
评论点赞收藏234 天前

将Scheme编译到WebAssembly:深入探索WASM GC的实现

本文介绍了Eli Bendersky对其开源项目BobScheme的更新,新增了从Scheme直接编译到WebAssembly的功能。作者详细探讨了如何将Scheme的高层特性(如内置数据结构、词法闭包和垃圾回收)映射到WebAssembly的GC扩展中,并具体展示了如何实现Scheme的关键对象(如PAIR、BOOL、SYMBOL)在WASM中的表示方式。 文章还讨论了实现Scheme内置函数write的挑战与解决方案,以及如何在WASM文本中直接编写相关功能。这是一项有趣的技术实验,涉及代码生成、内存管理和跨语言交互等多个方面。
评论点赞收藏254 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。