реализовать бесконечные списки в v8 - PullRequest
0 голосов
/ 27 января 2020

Я студент информатики, и в рамках школьного проекта меня попросили либо найти эксплойт в движке v8, сделать действительно хорошую оптимизацию или добавить новую функцию.

Я выбрал чтобы добавить новую функцию, и вот она:

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

var gen = numbers();

var l = [...gen];

var n = l[42];

Если выразить это словами, я хочу иметь возможность использовать синтаксис деструктурирования для создания списка, который может содержать бесконечное количество объектов и получать к ним доступ.

Можно сделать это в Haskell, и я хочу попробовать сделать то же самое с JavaScript.

Если бы разработчики в v8 могли указать мне правильное направление, это было бы будь таким замечательным.

У меня уже есть рабочая среда, я могу скомпилировать движок, прочитать исходный код и запустить отладчик в двоичном файле d8 с символами.

1 Ответ

2 голосов
/ 27 января 2020

V8 разработчик здесь.

Во-первых: просто для ясности, stackoverflow не машина, которая делает вашу домашнюю работу. (Вы спрашиваете только о «правильном направлении», это нормально.)

Во-вторых: V8 реализует JavaScript как указано c 'ed, поэтому любая произвольная «новая функция» не приземлится в нашем хранилище, пожалуйста, имейте это в виду.

В-третьих: у Кейта есть несколько положительных моментов. В частности, синтаксис, который вы предлагаете, уже действителен JavaScript и охотно оценивает генератор. Была ли ваша идея перейти на ленивую оценку, если генератор генерирует бесконечный поток значений? Сделайте шаг назад и подумайте о последствиях этой идеи на минуту.

Наконец, если вы придумаете работоспособный синтаксис / семантику, то это все равно будет трудоемко сделать в V8, потому что нет прецедента чего-то подобного. Возможно, вы захотите использовать элемент-перехватчик и хранить генератор в частной собственности. Я думаю, что было бы намного проще полностью заполнить все в чистом JavaScript с помощью прокси.

(Возможно, было бы неплохо пересмотреть ваш выбор проекта, но это зависит от вас. Это также довольно начните со странного описания проекта ... что они думают о том, как трудно "найти эксплойт или сделать действительно хорошую оптимизацию"? дайте нам знать , если вы найдете эксплойт!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...