## WAT 解析器性能提升 wasm-language-tools (v0.5 及更早版本) 中的 WebAssembly 文本格式 (WAT) 解析器经历了一次重大的性能改进,基准测试显示速度提升了 **350%**。 这一改进源于解析器的完全重写,重点在于优化技术。 主要变化包括放弃解析器组合子 (如 `winnow`),转而采用 **手写解析器** 以获得更大的控制力和速度。 进一步的优化涉及 **预分配和克隆频繁使用的 token 和节点** (使用 `Arc` 和 `LazyLock`),以避免重复创建。 词法分析通过 **直接检查字节前缀来查找关键字** 而不是字符串比较来改进,并采取了防止部分匹配的安全措施。 解析器还利用 `get_unchecked` 来创建 ASCII token,绕过不必要的 UTF-8 检查,并使用自定义 `Token` 类型来减少开销。 一项关键的优化是使用 **单个共享的 `Vec` 来构建语法树**,避免了与为每个节点创建临时向量相关的许多分配和释放。 这种方法受到 `rowan::GreenNodeBuilder` 的启发,使用类似堆栈的索引跟踪系统有效地管理节点子项。 这些组合优化带来了显著的性能提升,明显提高了复杂 WAT 模块的解析速度。
## E80:一种基于VHDL的构造主义CPU
该项目详细介绍了用VHDL实现的一个功能齐全的8位CPU的开发,旨在作为计算机体系结构教育的构造主义微世界。它追求**低门槛**,采用基于教科书的组件和一键式工具链安装程序进行仿真;**高上限**,支持堆栈操作和子程序调用等典型CPU指令;以及**宽阔的拓展性**,通过平台兼容性和完整的源代码访问实现。
该CPU具有8位架构,包含8位数据/地址总线和变长(1或2字)指令。它包括一个2R/1W多端口RAM、一个8x8位寄存器文件(6个通用寄存器、标志寄存器和堆栈指针),并支持加载/存储和寄存器-寄存器寻址。一个汇编器(ISO C99)可以将混合的ARM/x86风格的汇编语言翻译成机器码。
该设计使用GHDL/GTKWave和ModelSim进行仿真,并可综合到Tang Primer 25K、Altera Cyclone IV等FPGA上。提供了全面的文档,包括BNF语法和指令集。示例程序展示了功能和测试过程,例如内存访问、子程序调用以及与外部硬件(DIP开关、LED、操纵杆)的交互。该项目优先考虑易用性、真实的程序执行以及适应各种实验室和课堂场景的能力。
## 开源策略:独特的考试方法
Ploum教授在鲁汶理工学院分享了他教授“开源策略”的非常规方法,以及他设计的独特考试形式,旨在促进学习而非仅仅评估。他允许学生完全访问资源——包括互联网甚至聊天机器人,重点关注责任感以及理解*如何*使用工具,而不仅仅是工具提供的答案。
大多数学生选择*不*使用聊天机器人,理由是个人偏好、不信任或担心因人工智能错误而受到惩罚。有趣的是,那些使用聊天机器人的学生往往表现更差,常常被输出的信息淹没。考试期间的“自由书写”练习证明很有价值,揭示了学生的压力水平和思维过程。
Ploum观察到一种对作弊的世代恐惧,学生们即使是看起来违反学术规则也格外谨慎。他还批评了大学的IT决策,例如强制使用Outlook,他认为这会阻碍学生对核心技术(如Git)的理解。最终,他旨在鼓励批判性思维,并超越学生的知识,相信进步依赖于每一代人建立在前一代的基础上。他享受教学的乐趣,即使是在考试期间,并努力让学生思考,无论他们最初的动机如何。
## 电单按钮的奇特案例
一个简单的任务——更新单选按钮的视觉设计——迅速演变成对现代Web开发复杂性的深入研究。作者发现他们的团队并没有使用标准的HTML `<input type="radio">` 元素,而是依赖于UI框架Shadcn和Radix的组件。
Shadcn提供预构建的React组件,这些组件是建立在Radix Primitives之上的,Radix Primitives是一个提供无样式的、可访问的UI构建块的库。这意味着设置单选按钮的样式需要浏览数百行代码,导入多个库,并最终渲染一个*具有* ARIA角色的按钮来*充当*单选按钮——甚至包括仅在表单内的隐藏的本地单选输入框。
作者认为这是不必要的。现代CSS允许轻松、一致地设置原生单选按钮的样式,而无需复杂的JavaScript依赖或可访问性变通方法。虽然承认组件库的便利性,但他们提倡优先考虑简单性,并在可能的情况下利用内置的浏览器元素,因为过度复杂会导致复杂性、错误和性能问题增加。这凸显了Web开发中一种日益增长的趋势,即使对于像单选按钮这样基本的元素,也在重新发明轮子。