LINUX.ORG.RU
Форум — Talks  

В жабаскрипт почти доехали нормальные регулярки

 ,


0

1

https://v8project.blogspot.ru/2017/07/upcoming-regexp-features.html

Наконец-то добавят поддержку \p \P и lookbehind. Скоро станет не нужен гребаный ад вроде такого

Больше недостатков у яваскрипта не осталось :)

★★★★★

Больше недостатков у яваскрипта не осталось :)

там щас недостаток это отличие (function(){})() от () => {} и прочие вещи нацеленные на исправление костылей прошлого

но вообще новость позитивная

Deleted
()

Зачем люди пишут серверную часть на этом языке?

lochness ☆
()

Когда уже наконец регулярки допилят до полноты по тьюрингу и ими можно будет парсить html?

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Когда уже наконец регулярки допилят до полноты по тьюрингу и ими можно будет парсить html?

Так они и используются в библиотеках для «разбора» DOM :)

lochness ☆
()

Да-да, это супер, обсудили уже, вроде.

Но пора валить на Emojicode!

ChALkeR ★★★★★
()
Последнее исправление: ChALkeR (всего исправлений: 3)
Ответ на: комментарий от Deleted

недостаток это отличие (function(){})() от () => {}

Разве это не фича? Как -> и => в CoffeeScript.

Anatolik ★★
()

Ещё в stage-3 (кроме регексов) `for async` есть, но его пока не запили. Но он очень крут.

ChALkeR ★★★★★
()
Ответ на: комментарий от ChALkeR

А ее до этого разломали или изначально кривая была? Просто регулярки - это вечная юникодная попаболь.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Не гуглится потому что я написал не то, что думал =). `for await`, конечно же, asynchronous iteration. Нужен он в т.ч. для итерирования асинхронного потока данных — например, при чтении из файла или загрузки чего-то чанками можно будет забыть про .on('data' и .on('end'.

ChALkeR ★★★★★
()
Последнее исправление: ChALkeR (всего исправлений: 1)
Ответ на: комментарий от Vit

Так было давно, скорее всего изначально. Буферы дёргают только mark-sweep, что во-первых само по себе плохо, а во-вторых происходит когда занимаемая память уже довольно разрастётся. При этом буферы отлично чистятся scavenge, но почему-то их не вызывали. Тот коммит, на который я сослался, это почти чинит, но не включает ещё.

Простейший костыль с gc мог скостить память в несколько раз и увеличить производительность потоков (которые используют буферы) в некоторых случаях процентов на 20%.

ChALkeR ★★★★★
()
Ответ на: комментарий от Vit
for await (const line of readLines(filePath)) {
  console.log(line);
}

Вот пример. Это, по сути, асинхронное перечисление.

Два момента:

  • Итерации идут асинхронно.
  • Они могут кончиться (когда закончится файл или поток). Причём этот флаг тоже, очевидно, прилетает асинхронно, вместе со значением.

Да, его можно реализовать через for () { await }, но тогда в каждой итерации надо будет получать не строчку, а каскад из строчки и флага останова/продолжения и проверять их ручками, делая break.

Генераторы, собственно, и нужны для этого — они на каждой итерации выдают такую пару, и сахар for-of спасает от проверки этого руками. Но этого сахара до for await не было для асинхронного перечисления.

В примере выше readLines — генератор, который выдаёт промисы.

Аналогичный вышеприведённому код у тебя выглядел бы так:

const stream = readLines(filePath);
for (;;) {
  const { value, done } = await stream.next();
  if (done) break;
  const line = value;
}

Ну и плюс сахар для самого определения генераторов, которые возвращают промисы.

ChALkeR ★★★★★
()
Последнее исправление: ChALkeR (всего исправлений: 1)
Ответ на: комментарий от ChALkeR

Примерно понятно. through2, eos. У меня нет таких задач, чтобы оценить, но какой-то смысл в подобной конструкции имеется.

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

Vit ★★★★★
() автор топика
Ответ на: комментарий от Deleted

там щас недостаток это отличие (function(){})() от () => {}

В чем тогда польза будет от твоих стрелочных функций? как ты будешь делать new Promise(() => {}).then(() => {}); elem.addEventListener('click', () => {});, снова function писать?

Вот так вот обычно оборачивают:

var foo = (function(){
   var a = [];
   var b = 0;
   
   return function(c, d) {
      b += d;
      a.push(c * b);
      return a;
   }
})()

что бы изолировать какие то переменные которые нужны для внутренней программы от внешнего мира. Их используют в крайне единичных случаях arrow-function можно точно так же обернуть (() => {})() - пожалуйста.

Со своей стороны я вообще не понимаю этих arrow-function и прочих новвоведений es6 var etc = 123; etc => {} - вот что оно дает? При этом именованные функции стрелками делать нельзя (можно если через переменные только), а () => {} !== function(){} arrow-functions не имеют свойств типа arguments/caller и наверно своих свойств добавлять нельзя (впрочем то же самое примерно у 0 и Number(); «» и Strring(); [] и new Array() так что может тут и ничего необычного, сделали типа легкую короткозаписываемую функцию)

uin ★★★★
()
Ответ на: комментарий от ChALkeR

Чет какой то адов говнокод вообще.
Зачем вы константами как простыми переменными обмазываетесь? Вам делать нечего что ли?

Запишите на лбу себе про let и const:

const MAX_BUF_SIZE = 2048;

MAX_BUF_SIZE += 10;  //эксепшн
MAX_BUF_SIZE = 1024; //эксепшн

let a = 3;
let b = 1;

if (b < 10) {
   let a = 23;
   b += a;
}

b //=> 24;
a //=> 3;


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

uin ★★★★
()

Недостаток останется - совместимость с легаси, как следствие, возможность легко говнокодить. Ад неизбежен. Вот когда введут уголовное наказание за отсутствие в коде типизации, злоупотребления лямбдами и рекурсивное запутывание контекста - тогда яваскрипт будет спасен.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от Shadow

злоупотребления лямбдами

А, так это лямбда выражения сделанные через функции, понятно тогда.
А для чего и как они вообще используются?

var etc = 2.5,
    lm  = etc => etc * 2;

lm() //=> возвращает NaN потому что etc становится неизвестно чем и умножает себя на два

Как правильно вообще это выглядит?

uin ★★★★
()
Ответ на: комментарий от uin

блин до меня доперло это что бы как во всяких модных молодежных языках писать:
(a = 1, b = ' чая') => a * 2 + b;
только непонятно почему можно просто test => resolve(test) написать (я где то такое видел) или test в данном случае это то же самое что (test) => resolve(test) то есть просто аргумент и просто скобочки не обязательно писать если он один. Тогда все в принципе на свои места встает.

uin ★★★★
()
Последнее исправление: uin (всего исправлений: 1)
Ответ на: комментарий от uin
var etc = 2.5, // это объявлена переменная etc, которой присвоено значение 2.5
    lm  = etc => etc * 2; // Это объявлена "функция" с одним параметром etc, возвращающая etc*2 (к переменной etc это не относится никак)

lm(); // здесь мы вызвали функцию lm, передав ей параметр etc=undefined

lm(5); // здесь мы вызвали функцию lm, передав ей параметр etc=5. в результате получим 10
Qasta ★
()
Ответ на: комментарий от uin

Вообще рекомендую книжку прочесть. Себе купил вот эту - https://habrahabr.ru/company/piter/blog/309298/ (Книга «ES6 и не только» Кайл Симпсон).

Стоила мне рублей 300 (электронная версия). Написана хорошо, легко читается.

Там вообще много разной хрени полезностей навводили в javascript. Без пол-литры книги не разобраться

Qasta ★
()
Ответ на: комментарий от Qasta

Вообще рекомендую книжку прочесть.

Мне не нужно, я все таки на браузеры больше и web ориентирован а не на узкий мир ноды.

uin ★★★★
()
Ответ на: комментарий от uin

А я про браузеры и пишу. Ещё ни одной серверной штуки на NodeJS не писал (и не собираюсь - даже приветмир, имхо сервер на nodejs - очень и очень плохая идея).

Дело в том, что под браузеры тоже давно используют транспиляцию - пишут на ES6, а написанное потом преобразуется в «старый» JavaScript. Ключевые слова для поиска: webpack, babel.

Для средних и больших приложений - самое то. Ну а если нужно что-то простенькое - это, конечно, JQuery.

Qasta ★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.