Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   JS.next(стандарты, фичи, движки) (https://javascript.ru/forum/offtopic/50248-js-next-standarty-fichi-dvizhki.html)

kobezzza 07.01.2015 11:53

Столкнулся с проблемой, что в Chrome в strictMode метод next у объекта генератора помечен как readOnly, но с другой стороны через defineProperty его можно поменять.

В ФФ всё ок.

Копался в спеке, но ничего не нашёл по этому поводу (может конечно проглядел), может кто в курсе или может дать ссылку на ответ? Хочется понять: это баг хрома или действительно по стандарту next readOnly (хотя это очень странно), но тогда почему через defineProperty свойство можно установить.

kobezzza 07.01.2015 12:08

Перевёл Collection на 6to5, почти не было проблем. Snakeskin не поддаётся, но баг какой то суко хитрый, пока сдался.

***

ФФ полностью воспроизводит Collection и Snakeskin без трансляции! Однако транслированный вариант пока работает быстрее.

kobezzza 07.01.2015 13:19

Ура! Я смог перевести SS на 6to5! Приятный профит: скорость транслятора увеличилась на ~10%.

cyber 07.01.2015 13:51

kobezzza, как с багом разобрался ?

Safort 07.01.2015 13:51

kobezzza,
Цитата:

ФФ полностью воспроизводит Collection и Snakeskin без трансляции!
Но ведь у тебя там classов нет, по этому не считается :D

kobezzza,
Цитата:

Ура! Я смог перевести SS на 6to5! Приятный профит: скорость транслятора увеличилась на ~10%.
Только недавно она тоже увеличилась, а сейчас ещё раз?)

kobezzza 07.01.2015 13:54

Цитата:

kobezzza, как с багом разобрался ?
А просто обновил транслятор (сегодня вышло релиза 3-4) и всё заработало :)

Цитата:

Но ведь у тебя там classов нет, по этому не считается
:p

Цитата:

Только недавно она тоже увеличилась, а сейчас ещё раз?)
Ну недавно увеличилась из-за оптимизаций, что я сделал, а сейчас из-за смены транслятора GCC смог лучше с оптимизировать код.

Вообще в целом SS работает оч шустро, но есть узкие места. Идеи по оптимизации есть, но пока лень имплементить их, уж больно муторно.

***

В целом 6to5 уже production ready транслятор, юзать можно смело. Баги встречаются, но автор просто с адовой скоростью их фиксит :)

Octane 07.01.2015 14:25

Цитата:

Сообщение от kobezzza
Столкнулся с проблемой, что в Chrome в strictMode метод next у объекта генератора помечен как readOnly, но с другой стороны через defineProperty его можно поменять.

В ФФ всё ок.

Копался в спеке, но ничего не нашёл по этому поводу (может конечно проглядел), может кто в курсе или может дать ссылку на ответ? Хочется понять: это баг хрома или действительно по стандарту next readOnly (хотя это очень странно), но тогда почему через defineProperty свойство можно установить.

function Constructor() {}

Object.defineProperty(Constructor.prototype, 'test', {
    value: 1,
    configurable: false,
    writable: false
});

var obj = new Constructor;
obj.test = 2;
alert(obj.test);

kobezzza 07.01.2015 14:33

Octane, интересно, что

function Constructor() {}

Object.defineProperty(Constructor.prototype, 'test', {
    value: 1,
    configurable: false,
    writable: false
});

var obj = new Constructor;

Object.defineProperty(obj, 'test', {
    value: 2
});

alert(obj.test);


Но вообще мой вопрос в другом: правильно ли, что next у объекта генератора read-only, т.к. в ФФ поведение другое и в стандарте ничего про это я не нашёл, ну и плюс это странно, т.к. в JS любой базовый метод можно переопределить или доопределить, например,

Array.prototype.forEach = function () {
     ...
};


И что принципиально другое в

function *foo() {
}

var bar = foo();
bar.next = function () {
    ...
};


Собственно, вот https://github.com/kobezzza/Collecti...orEach.js#L796

Octane 07.01.2015 14:44

Цитата:

Сообщение от kobezzza
В strictMode в Chrome (баг?) данный метод нельзя установить через obj.next =

почему ты считаешь это багом?
Если ты запустишь мой пример в strict режиме в любом браузере, то получишь exception
Все дело только в том, что разработчики хрома зачем-то добавили атрибуты configurable=false и writable=false для next

kobezzza 07.01.2015 14:47

Цитата:

почему ты считаешь это багом?
Потому что в стандарте нет ни слова про специальные дескрипторы этого свойства и ФФ также их нет, а в хроме есть, следовательно хром не следует стандарту ES6 и это баг :)

И ещё: Object.defineProperty позволяет обойти это поведения, я не знал про это и как я понимаю, что это так и должно быть?


Часовой пояс GMT +3, время: 03:59.