javascript - 使用 Node 运行 GHCJS 程序的变量太多

标签 javascript node.js haskell ghc ghcjs

我正在尝试使用 node.js 运行一个使用 GHCJS 构建的程序。但是,我收到以下错误:

SyntaxError: Too many variables declared (only 131071 allowed)
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3
  1. 是否可以增加 Node 中允许的变量数量?
  2. 是否有更好的实用程序来运行允许更多变量的 JS 文件
  3. 有没有可以自动减少变量数量的优化工具?

请注意,这是机器生成的 JS,因此我不想手动完成并减少变量的数量。

欢迎提出任何想法。

最佳答案

一定是一个相当大的程序:)

我遇到了非常旧的 Node 版本 (32k) 的变量限制,但尚未达到新的提高限制。该问题类似于导致动态链接问题的 Windows DLL 符号限制,并且可能同样烦人。

GHCJS 将所​​有生成的代码作为顶级函数和变量发出,以提高效率和简单性(闭包由 STG 实现处理,因此此处不需要嵌套函数)。

该限制仅适用于局部(函数)范围。不幸的是,node.js 使用模块系统,并将所有代码隐式加载到本地范围。

幸运的是,JavaScript 为我们提供了一种在局部范围内声明全局名称的方法,您只需要删除 var 关键字!我认为如果将一行开头的所有 var h$ 替换为 h$,您应该能够运行脚本。

或者,您可以尝试使用 SpiderMonkey JS shell 或在浏览器中运行脚本,但这些会给您带来更有限的环境(无法访问文件系统,无法启动或与其他进程交互)。

如果变量限制仍然是您的问题,请在 https://github.com/ghcjs/ghcjs/issues 开工单所以我们可以尝试找到更永久的解决方案(可能通过调整链接时转换步骤将生成的代码分成多个模块)。

关于javascript - 使用 Node 运行 GHCJS 程序的变量太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344259/

相关文章:

node.js - "Fatal error: Unable to find local grunt."运行 "grunt"命令时

haskell - 禁用 Haskell 类型强制

javascript - 在对象类上实现 jquery 作用域的最佳方法?

javascript - 更改 img src 属性是否会发出任何发射器?

javascript - 数据表 : trouble formatting to stripe rows

authentication - socket.io 客户端命名空间授权

haskell - 如何对元音进行检查?

haskell - 相当于 attoparsecs `inClass` 的秒差距

javascript - 使用嵌套回调设置js模块的属性

javascript - 无法在 firebase 实时数据库中存储新记录