## 将 Go 标准库移植到 C:字节与字符串 该项目旨在用 C 重现 Go 的一部分,重点是性能并消除 Go 运行时。在成功移植 `io` 包之后,重点转移到 Go 的核心 `bytes` 和 `strings` 包。 移植纯函数,例如 `math/bits` 和 `unicode/utf8` 中的函数,相对简单,但 Go 和 C 之间的运算符优先级差异需要仔细注意。更复杂的是像 `Repeat` 这样的函数,它需要引入分配器接口——模仿 Zig 和 Odin 等语言的方法——用于显式内存管理。这允许灵活的分配方法并有助于调试。 基准测试显示出普遍积极的结果,C 实现通常比 Go 对应实现快 1.5-4 倍。然而,`Index` 最初表现不佳,直到利用 `memchr` 进行优化的子字符串搜索。`strings.Builder` 的显著性能提升来自于确保函数内联并优化返回值结构,以避免不必要的内存访问。 该项目强调了显式内存控制的好处,并证明了,通过仔细优化,C 在许多常见操作上可以实现与 Go 相当或更高的性能。移植的包在 Solod 中可用,Solod 是一种允许将 Go 代码翻译成 C 的工具。未来的工作将集中于移植 `time` 包。
二十年来,作者参与了Google AdSense,最初是为了学习在线广告并从2005年推出的博客中获得少量收入。虽然从未成为重要的收入来源(最高达到每年1000美元,现在约为100美元),但它提供了宝贵的发布者洞察。
然而,收益已减少。作者现在经常违反AdSense内容规则,收到读者关于侵入性广告的投诉,并且不断与不受欢迎的广告格式扩展作斗争,尽管已经配置了设置来限制它们。
最终,微薄的经济收益不再能证明持续的监控、与“商业”标识相关的潜在法律风险,或负面的用户体验是合理的。因此,作者已将他的博客从AdSense计划中移除,结束了长达二十年的合作关系,尽管对此有些犹豫。
## TTF-DOOM:字体中的Doom
TTF-DOOM是一个完全可运行的Doom风格光线投射引擎,构建在TrueType字体文件*内部*。该项目利用字体内置的、图灵完备的 hinting 程序(一种用于字形网格拟合的虚拟机),仅使用6.5KB的代码渲染3D图形。
一种定制的领域特定语言(DSL)被编译成TrueType字节码,然后操纵字形“A”——特别是它的16条垂直线——以显示16x16瓦片地图的3D透视图。JavaScript处理玩家输入、敌人逻辑和射击,通过字体变化设置将坐标传递给字体。字体执行光线投射和墙壁渲染,而JavaScript则叠加HUD和敌人。
该项目克服了TrueType算术中的一些缺陷和有限的调用栈带来的显著障碍。它利用巧妙的解决方法来模拟循环,规避损坏的乘法/除法和递归函数调用。调试模式(通过按下Tab键激活)可以实时可视化字体变化轴。
与llama.ttf等使用WebAssembly的类似项目不同,TTF-DOOM利用的是1991年原始的TrueType hinting字节码。