Здравствуй, уютненький ЖЖ. Сегодня тут у меня филиальчик Хабра.
В компьютерной науке меня интересовала и интересует больше всего та часть, которая не про O-большое и алгоритмы (это Авву интересует больше всего), и не про железячность (как сделать микросхему, или там программировать на ПЛИСах, или там реализовывать алгоритм на уровне каких-то "регистровых передач" в железе), а та, которая про лингвистику. То есть про языки программирования и их дизайн. То есть про то, как писать код для компьютера, но чтобы он был понятен человеку. Что делает программист 90% своего времени? Нет, не пишет код. А читает. Поэтому понятность этого кода - это важно. Важно, чтобы этот код был понятен другим, кто его будет читать, и важно, чтобы язык был такой, чтобы код на нем было понятно читать другим программистам (в этом смысле хвалят golang, на техтрэйне докладчик из ВК прямо так и говорил - читаешь чужой код, и все понятно! Это классно же!). И поэтому и продуктивно тоже. Поэтому и появляются декларативные языки разметки (xml, html), выборки данных (sql), выявления соотношений между предикатами (prolog), и т. п. Удачно сделанный DSL приносит миллион пользы.
В этом смысле появление async / await в ES это просто что-то нечто. "Маленький шаг в развитии языка, огромный шаг в развитии всей индустрии".
Компьютеры и программы работают по сути асинхронно и распределенно. Компетентные ребята из MS написали библиотеку RxJS (для других языков тоже она есть), где заметно, что они крепко это все дело обдумали и, кажется, у них получилось вычленить нужные паттерны. Но люди не могут думать асинхронно и распределенно. Люди думают последовательно. "Нажми на кнопку, получишь результат". Потом возьми этот результат, подумай, что с ним делать, и на какую кнопку нажимать дальше. И именно так и пишут программы. Это так называемое "однопоточное программирование", которое является естественным способом выражать свои мысли для человека, но для компьютера это крайне неэффективный способ работы. Потому что пока компьютер ждет, когда человек придумает, на какую ему кнопку нажимать дальше, он простаивает. А мог бы выполнить за это время миллион разных других операций. Так мы приходим к концепции многопоточности, которая прячет сложность того, что реально происходит, и позволяет писать программу так, как будто бы все происходит последовательно, одно за другим.
В ES же этого не было, и образовывался callback hell и т. п. А теперь есть:
let p = fetch('
http://localhost:8090/products');
let p1 = fetch('
http://localhost:8090/products/1');
let [rp, rp1] = await Promise.all([p, p1]); // запросы к серверу ушли одновременно
Только недавно сделали.