我已经在一个(即将完成的)Javascript 项目上工作了 14 个多月了。该项目最初是一个我希望在一夜之间完成的 hack,但随着时间的推移,Javascript 部分已经增长到 68 个单独的文件和 10,314 个非空行,遗憾的是目前依赖于 C 预处理器进行构建。
很难解释我是如何最终将 cpp 用于 Javascript 的:这只是一个 hack,我需要一些东西来给我宏扩展、ifdef、define 和包含,而不需要太多努力。经过大约 3 秒的考虑,我意识到 cpp 非常适合该任务:
- 提供一个在发布模式下消失的 LOG() 宏。
- 提供一个在发布模式下消失的 ASSERT() 宏,并生成带有原始文件和行号标记的异常。
- 将 LOG() 和 ASSERT() 实现交换为允许生成“已检查”构建的代码,该构建在发生时以紧凑的形式记录事件,如果发生崩溃,则将其报告回服务器。
- 根据与 Python 后端共享的配置文件,将 PROJECT_SOME_CONFIG_VAR_NAME 替换为“1”。
像所有真正的 hack 一样,这个 hack 现在已经被硬编码到项目中,以至于我真的不想考虑替换它所需的工作。我的项目正处于我想将代码库移动到它自己的专用测试服务器(而不是我的笔记本电脑)的阶段,但是在设置 Linux 实例时,我发现 4.1 之后的 GNU cpp 版本不再预处理 Javascript因错误而崩溃。
与其将特定版本的 GCC 添加到构建要求列表中,我认为现在是真正解决这个烂摊子的好时机。但是,我的问题是,我找不到与 cpp 具有相同功能和功能的替代预处理器!我考虑过 m4,但 m4 本身就是一个痛苦的世界。我发现的其他特定于 Javascript 的预处理器缺少我目前依赖的所有功能,例如:
__FILE__
&__LINE__
- 可变参数宏
- 包括警卫
- 令牌连接
- 条件编译
我正在认真考虑为 Javascript 实现一个全新的预处理器,它完全借用了 C 预处理器语法,因为它运行良好。我只是想知道在这样做之前是否有更好的选择。:) 也许已经有一个类似 cpp 的通用预处理器我可以换掉?替换这 68 个文件中的所有预处理器语法所需的工作量接近于简单地重新实现预处理器所需的工作量。
我很惊讶我能在依赖 C 预处理器的情况下做到这一点。在这项任务中,它比健康的头脑更有效地理解。对我开放的另一个选择是为 Linux、Darwin-i386、Win32 静态构建 cpp-4.1 版本,并将这些二进制文件存储在项目的存储库中。
帮助!