Javascript友好的预处理器困境

dmw*_*dmw 12 javascript preprocessor c-preprocessor

我已经在一个(差不多完成的)Javascript项目上工作了14个多月了.该项目最初是我希望在一夜之间完成的黑客攻击,但随着时间的推移,Javascript部分已经成长为68个独立文件和10,314个非空行,遗憾的是目前依赖于C预处理器进行构建.

很难解释我最终是如何使用cpp来实现Javascript的:这只是一个黑客,我需要的东西能给我宏扩展,ifdef,define,并且不需要太多努力.经过大约3秒钟的考虑,我意识到cpp对于任务是"完美的":

  • 提供在发布模式下消失的LOG()宏.
  • 提供在发布模式下消失的ASSERT()宏,并生成标记有原始文件和行号的异常.
  • 交换LOG()和代码ASSERT()实现,其允许产生"选中"构建,因为它们发生,如果发生碰撞被报告回服务器,其记录事件在一个紧凑的形式.
  • 用"1"替换PROJECT_SOME_CONFIG_VAR_NAME,基于与所述的Python后端共享的配置文件.

像所有真正的黑客,这个破解是现在这么硬编码到,我真的恨也别想将需要更换的工作项目.我的项目是达到我想要的代码库迁移到自己的专用测试服务器(而不是我的笔记本电脑),但是在建立一个Linux实例,我发现舞台是GNU CPP版本4.1不再预处理后的Javascript与崩溃一起出错.

我认为现在是真正解决这个问题的好时机,而不是将特定版本的GCC添加到构建要求列表中.但问题是,我找不到具有与cpp相同功能和特性的替换预处理器!我考虑过m4,但是m4本身就是一个痛苦的世界.我发现的其他特定于Javascript的预处理器缺少我目前所依赖的所有功能,例如:

  • __FILE__ & __LINE__
  • 变体宏
  • 包括警卫
  • 令牌连接
  • 条件编译

我正在认真考虑为Javascript实现一个全新的预处理器,它完全借用了C预处理器语法,因为它运行得很好.我只是想知道在这之前是否有更好的选择.:)也许已经有一个类似cpp的通用预处理器我可以交换?替换这68个文件中的所有预处理器语法所需的工作接近简单地重新实现预处理器所需的工作量.

到目前为止,依靠C预处理器,我感到非常惊讶; 在这项任务中,它比健康的心灵理解更有效.另一个对我开放的选择是为Linux,Darwin-i386,Win32静态构建cpp-4.1版本,并将这些二进制文件存储在项目的存储库中.

救命!

Rem*_*o.D 4

您已经尝试过mcpp了吗?它是一个“便携式 C 预处理器”

如果失败,您可以尝试使用通用宏处理器(如gema)并在其上构建足够的 cpp 。

  • 感谢您提供 mcpp 的链接:它在“-@old”模式下走得很远,但似乎失败了,因为我对字符串使用单引号字符(C 中的字符文字)。暂时调查杰玛。 (2认同)