这篇博文开启了一个使用 Python 构建 APL 解释器的项目,灵感来源于 Ruslan Spivak 的“让我们构建一个简单的解释器”系列。由于 APL 具有独特的特性(例如从右到左的执行顺序),作者对 Spivak 的概念进行了调整,以适应该语言特定的语法。
该实现始于两个核心组件:
1. **词法分析(Tokenization):** `Tokenizer` 类扫描 APL 代码以识别整数、浮点数和符号(如算术运算符和交换算子 `⍨`)。作者强调了一个关键的设计选择:采用从右到左的词法分析,以符合 APL 的求值顺序。
2. **抽象语法树(AST)解析:** 作者定义了 APL 子集的语法并实现了 `Parser` 类。通过使用 `eat` 和 `peek` 等辅助函数,解析器将符号流转换为结构化的节点树,用以表示标量、数组和函数(单目或双目)。
在该文末尾,该系统已成功将复杂表达式解析为结构化的 AST。作者计划在下一篇博文中采用访问者模式(Visitor pattern)来求值这些树,从而让实现功能完备的 APL 解释器的目标更近一步。
Reynard 是一款适用于 iOS 13 及以上版本的实验性网页浏览器,它采用了 Gecko 引擎,从而绕过了苹果强制使用的 WebKit 框架。通过使用驱动 Firefox 的 Gecko 引擎,Reynard 让旧版本 iOS 设备上的用户能够访问那些因系统自带 WebKit 版本过旧而无法正常显示的现代网页。此外,它也为较新的设备提供了一种基于 Gecko 的替代方案,并支持 Firefox 插件。
安装方式因设备而异:
* **TrollStore (iOS 14–17.0):** 推荐使用,可自动启用 JIT 以获得更好的性能。
* **AltStore/SideStore:** 适用于较新的 iOS 版本(必须保留应用扩展)。
* **越狱设备:** 通过 Filza 和 AppSync 安装特定构建版本。
作为一款处于早期阶段的开源项目,Reynard 目前仍在开发中,可能存在错误。开发者欢迎社区提供贡献、反馈和协作,以改善 UIKit 集成和整体稳定性。对于有兴趣从源码构建的用户,文档中提供了详细说明。本项目采用 GPLv3.0 协议授权,Gecko 补丁采用 MPLv2.0 协议授权。
尽管作者认可新款 MacBook 在性能和续航方面的提升,但觉得其锋利的前缘在膝上使用时很不舒适。受他人改装设备的启发,作者决定手动打磨边缘以改善人体工程学体验。
为了确保成品美观,作者没有使用电动工具,而是选用金属锉刀、砂纸块(最高打磨至 1200 目)以及用于保护机身和组件的美纹纸胶带。他们使用肥皂水来清理铝屑,并使用精密的模型锉刀处理了中央缝隙等棘手区域。
在根据自己的打字习惯仔细打磨边缘和边角后,作者成功让设备变得圆润。作者认为 MacBook 是实用的工具而非脆弱的饰品,并指出为了提升易用性而对硬件进行改造既值得又容易上手。虽然作者提到阳极氧化涂层的长期磨损情况尚待观察,但他们鼓励其他人尝试类似的实用改装,使工具更贴合自身需求。