我是一名计算机科学专业的学生,作为学校项目的一部分,我被要求要么在v8引擎中找到一个漏洞,要么进行一些非常好的优化,要么添加一个新特性。
我选择添加一个新特性,如下所示:
function* numbers() {
i = 1;
while (true) {
yield i++;
}
}
var gen = numbers();
var l = [...gen];
var n = l[42];换句话说,我希望有可能使用析构语法来创建一个列表,该列表可以容纳无限多的对象并访问它们。
在Haskell中可以这样做,我也想尝试用JavaScript来做同样的事情。
如果v8的开发人员能给我指明正确的方向,那就太棒了。
我已经有了一个工作环境,可以编译引擎,读取源代码,并在带有符号的d8二进制文件上运行调试器。
发布于 2020-01-27 19:00:19
这里是V8开发人员。
首先:要明确的是,堆栈溢出并不是一台做家庭作业的机器。(你只要求“正确的方向”,没关系。)
其次: V8将JavaScript作为规范来实现,因此任何任意的“新特性”都不会出现在我们的存储库中,请注意。
第三:基思有几个优点。特别是,您建议的语法已经是有效的JavaScript,并热切地评估生成器。当生成器产生无限的值流时,您的想法是切换到懒惰的评估吗?后退一步,思考一下这个想法的含义。
最后,如果您想出了可行的语法/语义,那么在V8中这样做仍然需要大量的工作,因为没有类似的先例。您可能希望使用元素拦截器,并将生成器存储在私有属性中。我认为使用代理在纯JavaScript中填充整个过程要容易得多。
(重新考虑你对项目的选择也许是个好主意,但这取决于你。这也是一个相当古怪的项目描述开始.他们认为“寻找开发或做出真正好的优化”有多难?如果您发现了漏洞,请执行让我们知道!)
https://stackoverflow.com/questions/59933887
复制相似问题