jmi*_*ite 6 javascript haskell ghc node.js 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
Run Code Online (Sandbox Code Playgroud)
请注意,这是机器生成的JS,因此我不希望手动完成并减少变量的数量.
欢迎任何想法.
小智 5
一定是一个相当大的程序:)
我在非常旧的节点版本 (32k) 上遇到了变量限制,但还没有达到新的提高限制。该问题类似于导致动态链接问题的 Windows DLL 符号限制,并且可能同样令人讨厌。
为了效率和简单性,GHCJS 将所有生成的代码作为顶级函数和变量发出(闭包由 STG 实现处理,因此这里不需要嵌套函数)。
该限制仅适用于本地(函数)范围。不幸的是,node.js 使用模块系统,并将所有代码隐式加载到本地范围内。
幸运的是,JavaScript 为我们提供了一种仍然从本地范围声明全局名称的方法,您只需要删除var关键字即可!我认为如果var h$将行开头的all 替换为h$.
或者,您可以尝试使用 SpiderMonkey JS shell 或在浏览器中运行该脚本,但这会给您提供更有限的环境(无法访问文件系统,无法启动或与其他进程交互)。
如果变量限制对您来说仍然是个问题,请在https://github.com/ghcjs/ghcjs/issues 上开工单,以便我们可以尝试找到更持久的解决方案(可能通过调整链接时间转换步骤来划分生成的代码分成多个模块)。