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

Safort 18.09.2014 14:55

JS.next(стандарты, фичи, движки)
 
Предлагаю в этом треде обсуждать/вопрошать всё, что связано с будущим JS: стандартами(ES6/7/8), фичами, движками, и прочими новостями из мира нового JS.

Сейчас на подходе ES6, многие фичи уже реализованы в последних версиях браузеров. Пока лидером по реализованным фичам является [не]всеми любимая Панда.

Кто из форумчан уже опробовал новый мясной JS со вкусом ES6?
Как вам?
Используете его в продакшене или только на своих личных проектах?
C помощью транслятора или любите рисковать?)
Если не используете, то почему? Ждёте полной поддержки в браузерах или не понравилось?

kobezzza 18.09.2014 15:28

Использую давно, ну это и так все знают :)

Safort 18.09.2014 15:36

Пожалуй, начну. кобеззза опередил)
Недавно начал активно юзать шестёрку в маленьком пробном проекте, и знаете, она довольно хороша. Чаще всего использую стрелочные функции, параметры по умолчанию и классы(не на полную). Раньше ещё let использовал, но Traceur не может в него. Немного `новое форматирование ${строк}` и объявление методов без function. Пока это всё, что успел.

Safort 18.09.2014 15:46

kobezzza,
ну и как? Насколько [не]доволен новыми возможностями?

kobezzza 18.09.2014 17:58

Цитата:

Сообщение от Safort (Сообщение 331167)
kobezzza,
ну и как? Насколько [не]доволен новыми возможностями?

В целом доволен. Раздражает медлительность внедрения фич. Также некоторые фичи сделаны неверно на мой взгляд, например строки шаблоны выглядят недоработанными, т.к. не декларативного способа вырезать переходы строк и начальные пробелы.

***

Потом сомнительна фича shorthand properties:

var a = 1,
     b = 2;

var c = {a, b};


Гораздо лучше, чтобы данный синтаксис отдали под литерал для Set:

var c = {a, b} // new Set(['a', 'b'])


Т.к. очень часто приходится писать такое:

var c = {
    foo1: true,
    foo2: true,
    foo3: true
};


И это правда раздражает.

Вообще нужно больше литералов:

{a: 1} // Object
[1] // Array
int32[1] // Int32Array
{a, b} // Set
{{a: 1, b: 2}} // Map


Литералы регулярных выражений нужно дорабатывать! Обязательно нужна поддержка разбиения на строки и комментариев

var pattern = ///
  ^\(?(\d{3})\)? # Capture area code, ignore optional parens
  [-\s]?(\d{3})   # Capture prefix, ignore optional dash or space
  -?(\d{4})        # Capture line-number, ignore optional dash
///



***

Мне не нравится подход к рефлексии через объект Proxy, почему нельзя было сделать это на основе Symbol?

var a = {
    @@noSuchMethod() {
        ...
    }

    @@delete() {
        ...
    }
};


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

***

Нужно больше встроенных коллекций, кто сказал, что в JS они не нужны? Вообще стандартная библиотека в JS на редкость убогая.

Также необходима хорошая доработка для API коллекций: во первых его нужно сделать универсальным на столько, на сколько это возможно и добавить больше методов.

***

Нужна нормальная опциональная декларация типов, хватит костылись с jsDoc.

***

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


***

Нужна поддержка асинхронного программирования на уровне синтаксиса (промисы - это хорошо, но этого мало):

async () {
    var result = await $.getJSON(url);
}


Ну т.е. как сейчас делают на генераторах, но более продвинуто.

***

Нужна возможность нормальной трансляции JS в байткод и загрузки уже его, а не исходного текста.

***

Т.к. JS можно считать веб-ориентированном языком, то нужна поддержка шаблонов на уровне синтаксиса


var a = { ... };

function foo() {
    ...
}

template bar() {
    < h1
        Hello World!
}



***

Нужна универсальная обёртка для запросов к БД, аля Linq

....

Много чего нужно :)

Safort 18.09.2014 22:13

kobezzza,
Цитата:

Раздражает медлительность внедрения фич.
И не говори..

Цитата:

например строки шаблоны выглядят недоработанными, т.к. не декларативного способа вырезать переходы строк и начальные пробелы.
Хоть мне это пока не мешает, но тоже кажется некрасивым решением.

Цитата:

Вообще нужно больше литералов
Согласен) Вообще, люблю литералы, все эти new Map()/Set()/WeakMap() кажутся громоздкими в сравнении с литералами.


Цитата:

Нужна нормальная опциональная декларация типов, хватит костылись с jsDoc.
Цитата:

Нужна поддержка асинхронного программирования на уровне синтаксиса (промисы - это хорошо, но этого мало)
Если не путаю, это всё хотят добавить в семёрке, так?


Цитата:

Нужна универсальная обёртка для запросов к БД, аля Linq
Базаришь. С БД на клиенте столько мороки.



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

Safort 18.09.2014 22:27

И ещё вот какой вопросец. В классах ES6 есть возможность использовать ключевое слово super(). Что оно делает? Как я понял из статей на английском, super позволяет вызвать конструктор родительского класса как свой. Я прав или как обычно?)

Safort 20.09.2014 14:54

http://blogs.msdn.com/b/ie/archive/2...m-roadmap.aspx
Ну вот, теперь и в IE уже работают над классами. Хотя модули под вопросом, странные люди)

Safort 08.10.2014 10:46

Релиз Хрома с поддержкой Map, Set, for...of, Symbol и математическими функциями из ES6: http://www.opennet.ru/opennews/art.shtml?num=40773

kobezzza 08.10.2014 10:48

Алилуйя. Поддержка была давно, но она включалась флагами, что не айс было.

Safort 08.10.2014 11:42

kobezzza,
ну ты ведь и сам понимаешь, что флаги это почти тоже самое что и отсутствие поддержки) Ведь у обычного пользователя они выключены.

kobezzza 08.10.2014 12:03

Цитата:

Сообщение от Safort (Сообщение 334029)
kobezzza,
ну ты ведь и сам понимаешь, что флаги это почти тоже самое что и отсутствие поддержки) Ведь у обычного пользователя они выключены.

Понимаю, но не понимаю чем относительно этих фич она была мотивирована.

Одно дело, когда фича что-то ломает, но тут просто добавили новые типы данных, которых не было в ES5 и шансов что-то сломать просто нет. Ну если их так заботит не стабильность фичи, то добавили бы префикс: blinkMap какойнить.

Safort 08.10.2014 12:36

kobezzza,
или как вариант вообще их не выкатывать, если считают их не стабильными.

Octane 14.10.2014 15:57

Это уже работает! (в Chrome 40 dev)
NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];

for (var x of document.querySelectorAll('p')) {
  console.log(x);
}

https://twitter.com/mathias/status/521953589175283712

melky 14.10.2014 16:15

Octane, поясни пожалуйста, что за вызод демона происходит в коде :)

Octane 14.10.2014 16:29

В NodeList.prototype добавляется итератор, который можно использовать в for-of
[][Symbol.iterator] === [].values //true

просто добавить метод values в NodeList.prototype не получится, потому что в for-of используется именно iterator, как я понимаю используется ключ типа Symbol для того, чтобы не конфликтовать с обычными свойствами (раньше было свойство @@iterator)

Стандартный ключ Symbol.iterator используется для именования всех итераторов:
Array.prototype[Symbol.iterator]
Map.prototype[Symbol.iterator]
и т.д.

тоесть это заранее подготовленный
Symbol.iterator = Symbol();
с помощью которого в прототипы добавили итераторы

Внутри метода iterator что-то типа такого:
Array.prototype.myIterator = function () {
    return function * (array) {
        var index = 0;
        while (index < array.length) {
            yield array[index++];
        }
    }(this);
};

var array = [1, , 3],
    values = array.myIterator(),
    value;
for (value of values) {
    alert(value);
}

Safort 25.10.2014 09:35

Немного о будущем ES6/7
http://www.infoworld.com/article/283...al-intent.html

Erolast 26.10.2014 07:59

Цитата:

сомнительна фича shorthand properties:
А я вот часто пользуюсь, очень удобно, плюс деструктуризация же. Без этой фичи она выглядела бы так:
function({param: param, param1: param1, param2: param2}) {

}


Вообще ES6 очень ёмко описан здесь - https://github.com/lukehoban/es6features

FINoM 27.10.2014 15:41

Цитата:

Сообщение от Octane
Symbol

Прочел статью на МДН и на русском и на английском, но не понимаю, что это такое. Это тип данных, который, если является ключем объекта, не перечисляется в циклах?

Erolast 27.10.2014 16:59

Это тип данных, который уникален и никогда ничему (кроме себя) не равен. Как и объекты, но для использования в ключах.

FINoM 27.10.2014 17:01

Erolast, какую задачу он решает?

Erolast 27.10.2014 17:04

Например
Цитата:

Сообщение от Octane (Сообщение 335392)
NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];

for (var x of document.querySelectorAll('p')) {
  console.log(x);
}

В общем, для всяких скрытых свойств.

Erolast 02.11.2014 11:17

Кстати, никто не знает, где можно оставлять предложения по ES6/ES7?

Safort 02.11.2014 11:59

Erolast,
конечно знаем) Держи https://esdiscuss.org/

Erolast 02.11.2014 17:28

Аха, спасибо.

Safort 05.11.2014 21:43

Итак, вот некоторые плюхи, которые будут в ES7
https://github.com/tc39/ecma262

Safort 14.11.2014 23:36

Майкрософт добавит много годноты из ES6 в IE12
http://habrahabr.ru/company/microsoft/blog/243215/

kobezzza 15.11.2014 00:28

Цитата:

Сообщение от Safort (Сообщение 340969)
Майкрософт добавит много годноты из ES6 в IE12
http://habrahabr.ru/company/microsoft/blog/243215/

Генераторов в списке нет :(

kobezzza 15.11.2014 09:21

Похоже, что на данный момент ИЕ12 осуществляет самую богатую поддержку ES6, значительно обходя ФФ и Хром, но к моменту релиза, я думаю все эти браузеры уже будут поддерживать стандарт в полной мере, однако свято место пусто не бывает и теперь Safari самый слоупочный по всем параметрами браузер, и учитывая тот факт, что на яблока девайсах нет технической возможности юзать другой браузер (все другие браузеры под iOS на самом деле надстройка над Safari), то это сильно тормозит развитие мобильных технологий, а на десктопный Сафари можно смело класть болт :)

Safort 15.11.2014 13:55

kobezzza,
Цитата:

ИЕ12 осуществляет самую богатую поддержку ES6
Даже как-то дико звучит)


Думаю, к тому моменту даже Сафари осилит внедрить хотя бы часть нового стандарта.

Safort 15.11.2014 13:56

Цитата:

Сообщение от kobezzza (Сообщение 340971)
Генераторов в списке нет :(

А я вот по отсутствию модулей грущу. Зато классы есть)

Safort 15.11.2014 14:32

В FireFox увеличили скорость генераторов

__он_самый__ 22.11.2014 20:34

kobezzza, и как я полагаю ты хотел бы чтобы обьекты и функции обьединили в нечто одно? чтобы у обектов был @call метод который вызывался бы если обьект пытаются вызвать obj() что думаешь по поводу разделения на обьекты и функции?

__он_самый__ 22.11.2014 20:43

Цитата:

Сообщение от FINoM
какую задачу он решает?

чтбоы вот так не писать

this._privateName = function(){}

пишешь:
privateName = new Symbol()
this[privateName] = function(){}

по сути я в своем полифиле new Symbol() просто генерирую уникальную строку, и все)

FINoM 23.11.2014 11:15

Цитата:

Сообщение от __он_самый__
чтбоы вот так не писать

this._privateName = function(){}

пишешь:
privateName = new Symbol()
this[privateName] = function(){}

Понял. Это, типа, заменет инкапсуляцию переменных в классах.

devote 23.11.2014 12:16

вот и новый тип данных symbol
var isSymbolSupports = typeof Symbol === 'function' && typeof Symbol() === 'symbol';
alert(isSymbolSupports);

Safort 23.11.2014 12:56

devote,
ФоФоша пока не держит(

Safort 25.11.2014 14:37

Уже начинают активно обсуждать 7-ку.
https://www.eventbrite.com/e/version...ts-14284664817

kobezzza 28.11.2014 21:17

https://github.com/nzakas/understandinges6

Яростный Меч 29.11.2014 18:30

Цитата:

Сообщение от kobezzza
Нужны нормальные потоки на уровне языка и не нужно рассказывать, что JS однопоточный. Потоки нужны, без них современный язык выглядит кастратом.

Потоки - это фича исполняющей среды, а не языка. ВебВоркеры, например.


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