Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 变量太多,无法使用节点运行GHCJS程序_Javascript_Node.js_Haskell_Ghc_Ghcjs - Fatal编程技术网

Javascript 变量太多,无法使用节点运行GHCJS程序

Javascript 变量太多,无法使用节点运行GHCJS程序,javascript,node.js,haskell,ghc,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 F

我正在尝试运行一个使用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
  • 是否可以增加节点中允许的变量数
  • 有没有更好的实用程序来运行JS文件,从而允许更多的变量
  • 是否有可以自动减少变量数量的优化工具
  • 请注意,这是机器生成的JS,因此我不希望手动完成并减少变量的数量


    欢迎任何想法。

    一定是一个相当大的计划:)

    我在非常旧的节点版本(32k)上遇到了变量限制,但还没有遇到新的提高的限制。这个问题与Windows DLL符号限制类似,它会导致动态链接出现问题,并且可能同样令人讨厌

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

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

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

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


    如果变量限制仍然是您的问题,请在打开一张罚单,以便我们可以尝试找到更持久的解决方案(可能通过调整链接时间转换步骤将生成的代码划分为多个模块)。

    这实际上是javascript引擎v8的一个限制,它无法处理超过131071个变量定义,所以你不能增加它。2和3:这取决于,你到底在这里做什么?当您在中简单地
    require()?因为变量太多了,唯一值得优化的可能就是将自己的代码重写为更合理的代码。@Mike'Pomax'Kamermans好吧,它用GHCJS标记,这是一个haskell->JS编译器。所以,这是生成的代码,他没有太多的控制权。只是为了更新,我能够使用闭包编译器将大小降低到4MB,所以这应该会有所帮助。