## NaN 的秘密生活:摘要
IEEE 754 浮点标准包含一个“非数值”(NaN)值,旨在表示未定义的结果。然而,双精度 NaN 包含 51 位未被标准使用的“有效载荷”——这一特性被巧妙地利用起来。
IEEE 754 最初的目的是在不同处理器上标准化浮点数的表示,它为诸如无穷大和 NaN 之类的值定义了特定的位模式,区分了“安静”NaN(用于传播错误)和“信号”NaN(可能引发异常)。关键在于可用的 NaN 位模式数量众多。
这种未使用的有效载荷在诸如 JavaScript(通过 JavaScriptCore 和 SpiderMonkey 等引擎中的 NaN-boxing)和 LuaJIT 等动态类型语言中被巧妙地重新利用。这些实现将非浮点数值*和*其类型信息存储在 NaN 有效载荷中,从而在 64 位空间内表示所有数据类型。
虽然这是一种复杂的实现,并存在潜在的安全问题,但 NaN-boxing 提供了诸如节省内存和更快操作之类的优势。它展示了一个迷人的例子,即利用看似错误处理功能来实现强大的优化技术。该标准有意允许有效载荷的灵活性,鼓励将额外信息“临时组装”到 NaN 中。
## l123:对 Lotus 1-2-3 的现代诠释
l123 是一款基于终端的电子表格应用程序,旨在重现 DOS 版 Lotus 1-2-3 Release 3.4a 的体验,同时利用现代技术。它使用 Rust 和 IronCalc 引擎构建,提供原生 .xlsx 兼容性,并采用键盘优先的工作流程和熟悉的斜杠菜单界面。
目前正在积极开发中(已达到里程碑 M10),l123 具有 3D 工作表、命名范围、撤销功能、打印到各种格式以及一个功能齐全的图形库等功能。它甚至包含一个支持鼠标的所见即所得图标面板,镜像了原始 1-2-3 的布局。
主要功能包括 1-2-3 公式语法、三行控制面板和广泛的键盘快捷键。l123 并非模拟器,而是优先考虑对原始版本的函数保真度,确保有经验的用户可以直观地操作它。该项目强调严格的测试和文档,专注于真实性和与现代电子表格格式的干净往返兼容性。
源代码和详细文档可在 GitHub 上找到:[https://github.com/duane1024/l123](https://github.com/duane1024/l123)。