在 v8 中实现无限列表

implement infinite lists in v8

我是一名计算机科学专业的学生,​​作为学校项目的一部分,我被要求在 v8 引擎中找到漏洞,进行一些非常好的优化或添加新功能。

我选择添加一项新功能,它是:

function* numbers() {
  i = 1;
  while (true) {
    yield i++;
  }
}

var gen = numbers();

var l = [...gen];

var n = l[42];

换句话说,我希望有可能使用解构语法来创建一个可以容纳无限数量的对象并访问它们的列表。

可以在 Haskell 中做到这一点,我想尝试在 JavaScript 中做到这一点。

如果 v8 的开发人员能为我指明正确的方向,那就太好了。

我已经有一个工作环境,可以编译引擎,阅读源代码,运行带符号的d8二进制文件上的调试器。

这里是 V8 开发人员。

首先:需要说明的是,Whosebug 不是一台可以帮你完成作业的机器。 (您只要求 "the right direction",没关系。)

其次:V8 按照规范实现了 JavaScript,因此任何任意 "new feature" 都不会出现在我们的存储库中,请注意这一点。

第三:Keith 有几个优点。特别是,您提出的语法已经有效 JavaScript 并且急切地评估生成器。当且仅当生成器产生无限的值流时,您是否想切换到惰性求值?退后一步,想一想这个想法的含义。

最后,如果您提出了可行的 syntax/semantics,那么在 V8 中执行此操作仍然是一项艰巨的工作,因为没有类似的先例。您可能想要使用元素拦截器,并将生成器存储在私有 属性 中。我认为使用代理在纯 JavaScript 中填充整个内容会容易得多。

(重新考虑您的项目选择可能是个好主意,但这取决于您。这也是一个相当时髦的项目描述开始......他们认为"find an exploit or make some really good optimisation"?如果发现漏洞,请执行 let us know!)