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 29.11.2014 18:38

Цитата:

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

Потоки могут быть частью самого языка, см. Rust. Про ущербность ВебВоркеров я писал неоднократно.

Вот я сделал потоки на основе именно языка: http://javascript.ru/forum/project/4...tml#post330243

и юзать их охренеть как удобно, очень хотелось бы иметь похожее из коробки.

cyber 02.12.2014 03:31

Кто то может объяснить что это за штука http://www.w3.org/TR/beacon/ ?

cyber 02.12.2014 03:38

И еще вопрос Map, WeakMap, Set, WeakSet какая между ними разница, кроме названия?

Aetae 02.12.2014 04:49

cyber, глупый вопрос, неужто непонятно из пары строчек описания?

kobezzza 02.12.2014 08:40

Set - набор одиночных уникальных значений.
Map - набор значений типа key: value.

Weak типы - это не перечисляемые аналоги Set и Map и они не могут содержать в качестве ключа не объекты, а нужны для более простой очистки памяти.

var s = new WeakSet();
// Мы добавили анонимный объект в WeakSet,
// но т.к. на него нет внешних ссылок,
// то он будет немедленно удалён сборщиком мусора
s.add({});


Пример из жизни WeakMap: у меня на сервере в нём лежат {объект соединения пользователя : ИД сессии} и когда рвётся связь и объект соединения удаляется, то он автоматически чистися из WeakMap.

Aetae 02.12.2014 08:52

Цитата:

то он будет немедленно удалён сборщиком мусора
Немедленно ли? Думается мне, что потому значения там и не перечисляемые, что удалены будут из памяти только при следующем проходе GC. Я не прав?

kobezzza 02.12.2014 09:01

Цитата:

Сообщение от Aetae (Сообщение 343904)
Немедленно ли? Думается мне, что потому значения там и не перечисляемые, что удалены будут из памяти только при следующем проходе GC. Я не прав?

Я имел ввиду немедленно для программиста :) GC JS VM никаким стандартом не регламентирован и в каждой VM работает по своему, поэтому хз :) Если нужно прям немедленно и без GC, то типизированные массивы спешат на помощь :)

Цитата:

Думается мне, что потому значения там и не перечисляемые
Если бы значения были перечисляемые, то такое удаление впринципе было бы невозможно.

var s = new Set();
s.add({});

// Мы всегда можем получить ссылку на значения через перечисление
s.forEach ...
s.keys ...

cyber 02.12.2014 10:27

kobezzza, Спасибо, а что скажешь насчет Beacon API не совсем пойму где эта штука может пригодится

kobezzza 02.12.2014 11:23

Цитата:

Сообщение от cyber (Сообщение 343916)
kobezzza, Спасибо, а что скажешь насчет Beacon API не совсем пойму где эта штука может пригодится

Это для решения проблемы: нужно отправить аякс запрос на событий закрытие вкладки / окна, т.е. бекон гарантированно отправится, а вот аякс - нет.

cyber 02.12.2014 11:40

kobezzza,понял, спасибо

Safort 04.12.2014 18:38

Итак, снова хорошие новости: https://chromium.googlesource.com/v8...767db00c5b9791

И в догонку свежая статья на английском про модули http://24ways.org/2014/javascript-modules-the-es6-way/

kobezzza 04.12.2014 18:45

Цитата:

И в догонку свежая статья на английском про модули http://24ways.org/2014/javascript-modules-the-es6-way/
Я уже перешёл на них :)

Правд es6-module-transpiler оказался глюченым говном, поэтому сделал на основе своего Monic.

.pipe(monic({
	replacers: [
		// Поддержка ES6 modules
		function (text) {
			text = text
				.replace(/export\s+(?:var|const|let)\s+([^\s=]+)\s*=/g, 'this.$1 =')
				.replace(/exports\s*\./g, 'this.')
				.replace(/export\s+(function\s+([^(]+))/g, 'this.$2 = $1')
				.replace(/export {([^}]+)};?/g, function (sstr, $1) {
					return $1.split(',').reduce(function (res, el) {
						el = el.split(/\s+as\s+/);
						el[0] = el[0].trim();
						res += 'this.' + (el[1] || el[0]) + ' = ' + el[0] + ';\n';
						return res;
					}, '');
				});

			text =
				'(function () {\n' +
					text +
				'\n}).call(this);';

			return text.replace(
				/^\s*import\s+(.*?)\s+from\s+('|")(.*?)\2;?/gm,
				function (sstr, nm, q, url) {
					nm = nm.replace(/{|}/g, '');
					nm = nm.split(',').reduce(function (res, el, i) {
						el = el.trim();

						if (i !== 0) {
							res += ',\n';
						}

						res += el + ' = this.' + el;
						return res;

					}, 'var ') + ';';

					return '' +
						'//#include ' + url + '\n\n' +
						nm;
				}
			);
		}
	]
}))


Хардкод, но работает нормально :)

Safort 04.12.2014 18:50

kobezzza,
попробуй 6to5. Он полон плюх из ES6, в т.ч. модули. Сам я его долго не мог использовать, потому, что авторы забыли залить его ;(
Теперь с Трансплитера перешёл на 6to5 и код даже не пришлось менять, в отличие от перехода с Трэйсера на Трансплитер.

kobezzza 04.12.2014 18:52

Цитата:

Сообщение от Safort (Сообщение 344518)
kobezzza,
попробуй 6to5. Он полон плюх из ES6, в т.ч. модули. Сам я его долго не мог использовать, потому, что авторы забыли залить его ;(
Теперь с Трансплитера перешёл на 6to5 и код даже не пришлось менять, в отличие от перехода с Трэйсера на Трансплитер.

Хм... надо затестить :) Хотя немного стрёмно: всё таки у мя ща дето 200к строк кода сумарно на транспилере висит)

Safort 04.12.2014 19:14

kobezzza,
не, ну ты же просто попробуешь, а не в продакшн зальёшь)
К тому же ты можешь пробежаться тестами, это должно гарантировать хоть какую-то надёжность, не?
//сам пока модули в 6то5 не тестил

Там, кстати, и async есть)

kobezzza 04.12.2014 19:20

Цитата:

не, ну ты же просто попробуешь, а не в продакшн зальёшь)
Так не интересно :D

Цитата:

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

Цитата:

Там, кстати, и async есть)
Угу, но ещё бы в WS поддержка :)

Safort 04.12.2014 20:46

kobezzza,
Цитата:

Угу, но ещё бы в WS поддержка
Но ты ведь можешь отправить им предложение в фичетрекер)

-------------------------------------------------------------------

Кстати, кто как оформляет свой es6[7]-код? Ведь в язык добавились новые синтаксические конструкции. Мб где-то уже есть годные стайл-гайды?

kobezzza 04.12.2014 20:49

Цитата:

Но ты ведь можешь отправить им предложение в фичетрекер)
Разумеется, я делаю это регулярно, что мне даже лицензию подарили на WS :)

Цитата:

Кстати, кто как оформляет свой es6[7]-код? Ведь в язык добавились новые синтаксические конструкции. Мб где-то уже есть годные стайл-гайды?
Также как и раньше :)

Safort 04.12.2014 21:03

kobezzza,
Цитата:

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




Цитата:

Также как и раньше
Это как? Интересует именно новые ES6+ конструкции.

Может быть много вариантов:

let f = ()=>{};
let f = ()=> {};
let f = () =>{};
let f = () => {};

someF((a) => {});
someF(a => {});

kobezzza 04.12.2014 21:25

Цитата:

let f = () => {};
:)

Safort 04.12.2014 21:29

kobezzza,
тоже самое)

kobezzza 05.12.2014 10:40

Часть проектов перевёл на 6to5, но вот большие уже не скомпилились из-за багов в трансляторе, запостил им)

Safort 05.12.2014 12:25

kobezzza,
что-то ты быстро решил на него проекты перевести)
Как я понимаю, Collection и Snakeskin не скомпилировались?

kobezzza 05.12.2014 12:30

Цитата:

Сообщение от Safort (Сообщение 344740)
kobezzza,
что-то ты быстро решил на него проекты перевести)

Ну, я вчера весь вечер игрался с ним: он объективно лучше es6-transpiler:

1) Больше фич, причём есть даже из ES7;
2) Хорошая дока (в es6-transpiler её толком и нет);
3) Быстрый отклик разработчика: после моего вопроса он ответил через минуту, а в es6-transpiler баги висят месяцами незакрытые;
4) Субъективно работает быстрее.

Цитата:

Сообщение от Safort (Сообщение 344740)
Как я понимаю, Collection и Snakeskin не скомпилировались?

Угу, но как выяснилось виноват не сам транслятор, а AST парсер, который он юзает:

https://github.com/marijnh/acorn/issues/173

Надеюсь быстро пофиксят и тогда я перекомпилю все проекты.

kobezzza 05.12.2014 13:04

Ставим лайки!

https://youtrack.jetbrains.com/issue/WEB-11723

Safort 05.12.2014 13:18

kobezzza,
Цитата:

Ну, я вчера весь вечер игрался с ним: он объективно лучше es6-transpiler
Я знал, что 6to5 тебя заинтересует, хотя, если не путаю, раньше ты его не воспринимал всерьёз)


Так EcmaScript Harmony это же 6, а не 7 версия, автор малясь напутал, не?

kobezzza 05.12.2014 13:23

Цитата:

Я знал, что 6to5 тебя заинтересует, хотя, если не путаю, раньше ты его не воспринимал всерьёз)
Не помню, но был не прав значит :)

Цитата:

Так EcmaScript Harmony это же 6, а не 7 версия, автор малясь напутал, не?
Да пусть хоть ПХП назовут, главное чтобы добавили поддержку :D

kobezzza 06.12.2014 11:59

Эх, пока перевод на 6to5 пришлось отложить из-за ряда багов и недоработок транслятора, жду когда автор всё починит.

Erolast 06.12.2014 15:33

Цитата:

Сообщение от kobezzza (Сообщение 344745)
1) Больше фич, причём есть даже из ES7;
2) Хорошая дока (в es6-transpiler её толком и нет);
3) Быстрый отклик разработчика: после моего вопроса он ответил через минуту, а в es6-transpiler баги висят месяцами незакрытые;
4) Субъективно работает быстрее.

5) Выходной код читаемый.

kobezzza 06.12.2014 17:12

Насчёт скорости 6to5 я погорячился, вот сравнение: Collection на es6-transpiler сборка 3сек, а на 6to5 30сек.

Но насчёт оперативности автора - это просто мега респект ему. Я сегодня постил баги и он просто в течении минут сразу же их фиксил и выпускал релиз, итого 4 критических бага (ломающих код), которые я сегодня нашёл он уже пофиксил.

Safort 06.12.2014 17:50

kobezzza,
Цитата:

Я сегодня постил баги и он просто в течении минут сразу же их фиксил и выпускал релиз, итого 4 критических бага (ломающих код), которые я сегодня нашёл он уже пофиксил.
Сразу видно, человек ответственно относится к своему проекту.


Цитата:

Насчёт скорости 6to5 я погорячился, вот сравнение: Collection на es6-transpiler сборка 3сек, а на 6to5 30сек.
Думаю, это может исправиться со временем.



Вот мне интересно, можно ли отрубить трансляцию конкретных фич? Что бы, например,
let a = 'value';
транслировалось как есть.

kobezzza 06.12.2014 17:53

Цитата:

Вот мне интересно, можно ли отрубить трансляцию конкретных фич? Что бы, например,
let a = 'value';
транслировалось как есть.
Да, там оч граммотно сделано, см параметры whiteList и blackList

Цитата:

- abstractReferences
- arrayComprehension
- arrowFunctions
- classes
- computedPropertyNames
- constants
- defaultParameters
- destructuring
- exponentiationOperator
- forOf
- generatorComprehension
- generators
- letScoping
- memoizationOperator
- methodBinding
- modules
- objectGetterMemoization
- objectSpread
- propertyMethodAssignment
- propertyNameShorthand
- react
- restParameters
- spread
- templateLiterals
- unicodeRegex
- useStrict

Safort 06.12.2014 18:09

kobezzza,
о, крутота, спасибо)

kobezzza 06.12.2014 18:10

Добавил хотелку:
https://github.com/6to5/6to5/issues/256

kobezzza 07.12.2014 11:30

Цитата:

Думаю, это может исправиться со временем.
https://github.com/6to5/6to5/issues/261

:)

FINoM 07.12.2014 12:38

Всё круто, но в продакшне-то можно использовать?

Safort 07.12.2014 13:13

kobezzza,
он прям мысли читает)


FINoM,
ну... смотря какой продакшн. Если покрываешь всё тестами и количество кода на клиенте тебе не особо важно, то, наверное, можно.

FINoM 07.12.2014 13:21

Цитата:

Сообщение от Safort
Если покрываешь всё тестами

Тесты забирают больше половины времени. У клиентов нет на это денег.

Safort 07.12.2014 13:22

FINoM,
значит пока нельзя)

kobezzza 07.12.2014 13:36

Цитата:

Сообщение от FINoM (Сообщение 345238)
Всё круто, но в продакшне-то можно использовать?

Можно.

Цитата:

и количество кода на клиенте тебе не особо важно, то, наверное, можно.
Ну, количество кода практически не увеличивается, если конечно не юзать полифил для генераторов, то тогда да.


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