Состоялся релиз Node.js 17.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 17.0 относится к ветке с обычным сроком поддержки, обновления для которой будут выпускаться до июня 2022 года. В ближайшие дни будет завершена стабилизация ветки Node.js 16, которая получит статус LTS и будет поддерживаться до апреля 2024 года. Сопровождение прошлой LTS-ветки Node.js 14.0 продлится до апреля 2023 года, а позапрошлой LTS-ветки 12.0 до апреля 2022 года...Подробнее: https://www.opennet.ru/opennews/art.shtml?num=55997
А давно нода позволяет юзать await на верхнем уровне?
Ну в JS эту фичу завезли не так уж и давно
Хотя наверное правильнее сказать в браузерные движки
Обзываем файл в виде name.mjs и получаем await на верхнем уровне.
Да, это все начиная с v14.
В v12 еще нет такой фичи.
Ничего мы не получаем, получаем разве что файл статического импорта, .mjs-расширение которого вообще то формальность, и который ещё нужно импортировать. И какое отношение статические импорты/экспорты имеют к промисам/async/await?
form@work:/tmp$ cat test.mjs
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));console.log(new Date());
await sleep(2000);
console.log(new Date());
form@work:/tmp$ node test.mjs
2021-10-20T07:09:19.174Z
2021-10-20T07:09:21.179Z
form@work:/tmp$
Вопрос был в чём? Предоставить .mjs-модуль и что? Должна была произойти магия, где сразу можно await использовать? С промисом и я могу.
Причем тут с промисом?
await в принципе применим либо к промису либо к async функции.
Речь о том, что await можно использовать в верхнем уровне без всяких async если файл - модуль.
Вот так, чтобы понятнее было что имеется в виду:form@work:/tmp$ node test.mjs
2021-10-20T07:17:53.543Z
2021-10-20T07:17:55.548Z
form@work:/tmp$ mv test.mjs test.js
form@work:/tmp$ node test.js
/tmp/test.js:4
await sleep(2000);
^^^^^SyntaxError: await is only valid in async functions and the top level bodies of modules
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1025:15)
at Module._compile (node:internal/modules/cjs/loader:1059:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10)
at Module.load (node:internal/modules/cjs/loader:975:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47Node.js v17.0.0
form@work:/tmp$
>await в принципе применим либо к промису либо к async функции.Нет. await применим к абсолютно любому значению. Это просто сахар над Thenable.
await 123 // 123
await null // null
await {} // {}
await { then(r) { r('hello') } } // 'hello'
Кстати нода сама подсказывает эту фичу: если попытаться использовать await за пределами async, он подскажет что await можно использовать так же в теле модуля.
Один из лучших фрейморков. Без шуток: малоопытная веб-макака может накидать на нём приличное приложение, для которого понадобилась бы команда пожилых сишников. При этом количество ошибок будет одинаково, в первом случае - из-за дырок в Ноде и ошибок веб-макаки, а во втором - из-за архитектурно устаревшей платформы.
Сравнил молоток с пилой, неуч
Без шуток: малоопытная веб-макака может сломать столько, сколько не сможет сломать команда опытных инженеров.
Это всё-таки не фреймворк, а среда выполнения. И на чистой ноде никто обычно приложения не пишет ибо есть куча более удобных менее трудозатратных инструментов.
На чем программируете вы?
Вы так огульно называете javascript программистов вебмакаками, что прямо интересно.
В школе на паскале/бейсике?
А посоветуйте актуальной литературы? Ну там лучшие гайдлайны, популярные пакеты, всё вот это. В топе выдачи гугла ничего приличного нет. Лет 10 не трогал ноду.
https://github.com/HowProgrammingWorks/Index/blob/master/Cou...
Во-первых, это не литература. Текст гораздо проще воспринимать. Во-вторых, это ужасно. Ужасное качество записи, нет нормального микрофона, диктор мычит и толчёт воду в ступе, шокает и гыкает. Очень много времени тратит на совсем уж примитивные и очевидные вещи, повторяя их по несколько раз. Удручающе,
А для меня нода умерла когда мс купил.
... мс купил npm. Но с другой стороны npm максимально ненужный трешняк, который сделал из здравой идеи полное УГ.
ну и пиши каждый раз новый лефтпад!
> FTPРетрограды! Луддиты!
Вот это днищенское дно... постоянные критические ошибки и уязвимости. В каждом выпуске. И конца и краю этому не видно.При том как я понимаю дело не в самом Node JS, а в убогом HTTP протоколе.
Нельзя не восхититься всё-таки изяществом JS как языка с его прототипным ООП. Где ещё найдешь такое?
> изяществом JS как языка с его прототипным ООПНастолько изящным, что раньше почти все писали свои обертки для создания классов и в ES2015 наконец-то завезли нормальный синтаксис для этого на уровне языка.
> Где ещё найдешь такое?
См. список тут https://en.wikipedia.org/wiki/Prototype-based_programming
Lua. Вообще Lua увернулся от "болезни С++", в отличие от ECMAScript. В Lua до версии 5.4 тащили только действительно нужные вещи. Единственная вещь, которой там реально не хватает - RAII, но её и в жабаскрипте нет.
С Lua ситуация "в топку программирование, стану проституткой" не так вероятна, там язык очень простой и, главное, понятный, а не это "this может указывать на класс метода, а может не указывать", "у нас один оператор для конкатенации строк и сложения чисел". И рантайм не весит минимум 20 мегабайт, как у ноды
Из-за конструкций типа ~= Lua полностью и бесповоротно не нужен.
RAII помимо захвата ресурса при инициализации подразумевает детерминированное освобождение, что затруднено при использовании сборки мусора.
Жаль только вакансий маловато, а которые есть Lua указан как второй язык
Ага.> там язык очень простой и, главное, понятный
Особенно хорошо в Lua с числовыми типами (все целые пусть будут вещественными, так ведь гораздо удобнее!).
А уж как там чудесно работа с Юникодом устроена - не пересказать!
> Ага.
>> там язык очень простой и, главное, понятный
> Особенно хорошо в Lua с числовыми типами (все целые пусть будут вещественными,
> так ведь гораздо удобнее!).
> А уж как там чудесно работа с Юникодом устроена - не пересказать!https://www.lua.org/manual/5.3/readme.html#changes
> Main changes
>
> integers (64-bit by default)
> official support for 32-bit numbers
> bitwise operators
> basic utf-8 support
> Единственная вещь, которой там реально не хватает - RAII, но её и в жабаскрипте нет.Его и не будет, т.к. сборка мусора недетерминированна. Для задач очистки ресурсов см.
1. https://github.com/tc39/proposal-explicit-resource-management
2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
> Выпуск серверной JavaScript-платформы Node.js 17.0ага, вот почему у меня билд фронта упал
Потому что кто-то скачивает каждый раз свежую node при каждом билде?
> Потому что кто-то скачивает каждый раз свежую node при каждом билде?Потому, что CI проверяет актуальность docker image при каждом билде
И нет, я был неправ. Свежая nodejs была не при делах
Опять эта хрень час пересобираться будет... Какой осёл вообще додумался браузер на ней делать..?
А что плохого? Ну кроме С++ под капотом?
> А что плохого? Ну кроме С++ под капотом?Ну я ж говорю - пересобирается долго :D.
самый безопасный инструмент, миллионы самых быстрых программистов проверяют в продакшине