LINUX.ORG.RU

Вышел Node.js 19.0

 ,


0

3

18 октября состоялся релиз серверной платформы на языке JavaScript Node.js 19.0.

Node.js 19.0 заменит Node.js 18 и станет «текущей» версией со сроком поддержки до апреля 2023 года, тогда как 18я версия после стабилизации перейдет в статус LTS.

Из изменений:

  • Добавлена возможность запуска в режиме «наблюдения» с использованием опции node --watch. Запуск в этом режиме перезапускает процесс при изменении импортированного файла:
    node --watch index.js
    

    Эта функция доступна в версиях 19.0.0 и 18.11.0+.

  • Начиная с этого выпуска, Node.js по умолчанию для keepAlive устанавливает значение true. Это означает, что любое исходящее HTTP(S) соединение будет автоматически использовать HTTP 1.1 Keep-Alive. Продолжительность поддержания активности по умолчанию составляет 5 секунд. Включение функции Keep-Alive обеспечит лучшую пропускную способность, поскольку соединения по умолчанию используются повторно.
    • Кроме того, агент теперь может анализировать ответ Keep-Alive, который могут отправлять серверы. Этот заголовок инструктирует клиента о том, как долго он должен оставаться на связи. С другой стороны, в Node.js HTTP-сервер теперь автоматически отключает бездействующие клиенты (которые используют HTTP Keep-Alive для повторного использования соединения) при вызове close()).
  • API WebCrypto теперь стабилен, за исключением следующих алгоритмов:
    • Ed25519,
    • Ed 448,
    • X25519,
    • X448.
  • Удален флаг --experimental-specifier-resolution. Его функциональность теперь может быть достигнута с помощью пользовательских загрузчиков.
  • Удалена поддержка DTrace/SystemTap/ETW. Основная причина заключается в расстановке приоритетов ресурсов. Сложность поддержания поддержки в актуальном состоянии оказалась нецелесообразной без четкого плана поддержки этих инструментов.
  • Движок V8 обновлен до версии 10.7, которая является частью Chromium 107. Эта версия включает в себя новую функцию JavaScript API: Intl.NumberFormat.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от leprecon73

Ну спастил ты эту чушь - дальше что? Лишь показал своё невежество.

Что я должен увидеть из твоей перепасты? То, что ты не знаешь как работают чиселки в компьютере? Или не можешь отличить области определения понятий?

right_security
()
Ответ на: комментарий от vbr

процедурное программирование - удачное

30-и летней давности

Не понял о чем ты.

когда все аргументы запихиваются в одну структуру это ничем не отличается от глобала, т.е. отличается тем что сконфигурировать такой объект становится чреззвычайно сложно, как и 50 аргументов процедурной функции. Процедурный код не может понимать даже программист, который когда-то его напейсал.

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

Ты не нужен. У жс минимальный бойлерплейт среди другой скриптухи.

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

в жс появились современные практики как раз в виде классов

Они там всегда были. Через объект с функцией можно сделать практически всё. Сделали другое объявление, чтобы жаба-свитчеркам было сухо и комфортно.

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

Потому, что ООП это неудачное изобретение

Какое ооп ты имеешь ввиду? Жаба-ооп? Ну да.

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

это называется костыли, еще с с++, который разрабатывался как нашлепка над си такое повелось, когда вы класс объявляете кусками у вас весь код как по теории разбитых окон превращается в кучу ошметков разобраться в которых нереально, т.е. доработать или пофиксить становится проблематично

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

это называется костыли

Я и так знаю как у вас там в ынтерпрайзе обстоят дела с ооп, можно это было не озвучивать.

когда вы класс объявляете кусками у вас весь код

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

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

сейчас практически не осталось понятия ынтерпрайз, т.к. в корпорации понабрали сектантов из вебстудий руководить ничего не соображающими генеральскими детьми, соответственно из своего туманного вебстудийного прошлого они затащили всевозможные г’уби на г’ейцах и г’еякты, в которых ооп конечно никакого нет (или есть но «почти»), ведь у них модель - кажный год переписывать с нуля на новом дизейблд пузыре

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

Так что в итоге? Вот у тебя оопота:

Класс X делает A
Класс Y наследует Х делает B (и A из класса X)
Класс Z наследует Y делает C (и B, A из родителей)
В итоге получается всё как ты написал

у вас весь код как по теории разбитых окон превращается в кучу ошметков разобраться в которых нереально

И

т.е. доработать или пофиксить становится проблематично

Если вы там уже понаследовались от X,Y,Z т.е когда надо для Z делать C,B,A,D - вообще забей.

Но таки да, на ссаном динамическом во все щели жс с костылями это сделать можно лекго. На труъ оопэ язычках - чтобы не переделывать половину проекта, я хз как.

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

не очень понял, что вы имеете в виду, но скорее всего приводите какое-то злоупотребления, не понимая разницы между «можно сделать нормально», «можно свободно сделать ненормально» и «нельзя сделать нормально, можно только ненормально»

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

не очень понял, что вы имеете в виду, но скорее всего приводите какое-то злоупотребления

Злоупотребление чем? Это обычное наследование. Метод, где в каждом классе (X,Y,Z) делается какой-то код (A,B,C), вот сделали эту иерархию, сделали еще всяких классов, которые наследуются от X,Y,Z. Теперь половине из них надо чтобы в X делалось A,D, а другой половине не надо. Ничего такого, обычная хотелка. Покажи, как ты это сделаешь нормально.

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

так и не понял, что значит «надо чтобы в X делалось A,D», вы можете переопределить метод на любом уровне и сделав его пустым или таким как вам требуется. Если делать глубокие иерархии действительно можно столкнуться с какими-то сложностями, особенно если у вас нет возможности делать множественное наследование или в языке усложнено позднее связывание, поэтому такое обычно не рекомендуется, что впрочем не мешает выстраивать 2-3х уровневое наследование и решать этим 80% потребностей переиспользования кода.

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

наследование позволяет вам сделать аккуратно, интерфрейсы - помогают не делать неаккуратно

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

так и не понял, что значит «надо чтобы в X делалось A,D»

В класс X надо добавить код, который будет работать для классов E,F,G но не будет работать для классов H,J,K. Сами эти классы в свою очередь наследуются от Y или Z.

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

И как будет работать код из Y или Z, если я его полностью переопределю?

что впрочем не мешает выстраивать 2-3х уровневое наследование

Оно уже на 3-м уровне не работает.

и решать этим 80% потребностей переиспользования кода.

И что делать с остальными 20% кода? Пастить?

множественное наследование

Даже если есть, то что? Таким же образом есть методы в X которые должны работать F (наследование x->y->z->f) и не должны в Е. В общем случае всё выродится к тому, что у тебя будут классы из одного метода, где-то отдельно структура и ты будешь всё это множественно сношать, а твой код будет на 80% состоять из объявлений классов.

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

Ага, удачи что-то написать без классов.

Современный ui на react обходиться без классов, только функциональные компоненты

Да и жаву во многом косплеит тс.

ts про структурную типизацию, чего общего у него может быть с java?

Вместо нормального.

Какого именно?

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

Современный ui на react обходиться без классов, только функциональные компоненты

Сразу видно эксперта. ui на реакте - говно. Кстати, ретрансляторов пропаганды очень хорошо видно про базворду «функциональные» - это говорит лишь о стандности и невежестве. Потому как это компоненты-функции.

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

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

В основном все более-менее понимающие тему - пытаются как можно дальше держаться от реакт-говна и хранить всё где-то с боку, где этого мусора не будет. А после уже натягивать на него. Эта схема +/- работает.

ts про структурную типизацию, чего общего у него может быть с java?

Всё начиналось с интерфейсов. Ну и много фичей как раз таки касаются классов. А так всё. Генерики, extends, интерфейсы. Конечно, жс это не жава и сюда сложно натянуть что-то. Но с поправкой на реалии - жавы в тс достаточно.

Какого именно?

Без мусора. В целом в базовом жс это невозможно. Хотя были попытки с файберами, но они сдохли.

right_security
()
Ответ на: комментарий от crutch_master

если вам нужно чтобы в половине работало, а в половине не работало и это не решается переопределением метода где вызывается, то, что должно работать выборочно значит вы что-то коряво напроектировали, и кроме наследования можно и даже нужно использовать агрегацию, состояние у класса на то и дано, чтобы не решать все проблемы наследованием

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

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

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

Это проблема не только жс. В целом асинка - он ядовитый. Заюзал где-то - это говно загадило тебе всё. Сломался и язык и контексты и в принципе всё.

Эта пародия на блокирующие апи днище и не может воспроизвести основной фичи блокировок - «писать код так будто бы этих блокировок нет».

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

может лучше наоборот выполнять каждый script или даже эвент в отдельном потоке отдельно от рендеринга и пусть оно хоть заблокируется;)?

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

Ну каждый скрипт - это мусор. И await и так блокирующая операция. Её эмуляция.

К тому же блокирование - это не то блокирование. С тем блокированием о которым ты говоришь - от него ничего не спасает, кроме реальных тредов(т.е. тех, которые можно ступнуть). Любые вариации грин-тредов/корутин/файберов/прочего - их нельзя стопнуть. Поэтому проблемы там те же.

А так да. Лучше сделать как в гошке. Там в скриптухе косплей на нормальную модель. Те же node-fibers уже была реализация. Как следствие весь мусорный асинк сдохнет на помойке.

В нормальной модели, конечно, тоже есть свои маня-проблемы. Но +/- там паритет с асинк/авейтом. Только та модель не такое говно ломающие код.

right_security
()

Отличный сборщик фронтенда. На сервер я бы такое не потащил, даже для SSR.

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

люди его и в бэк и в фронт, и ничего - нормально

Мы вас не осуждаем, но детям показывать такое нельзя

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

Ну каждый скрипт - это мусор. И await и так блокирующая операция. Её эмуляция.

никапельки, это эмуляция императивного кода, а работает он практически также как условно-асинхронные промисы, потому что разворачивается жит-компилятором именно в них. Стопать ничего нинужна, ожидающий тред и так стопнут. Файберы это какая-то костыльная хрень в духе рякта такое добро обычно невозможно дебажить или предсказуемо применять.

Легких тредов из пула хватило бы за глаза, поскольку с однопоточным браузерным UI совсем нинужна изолировать хип и стек, сейчас некоторые что-то такое и городят воркерами, но т.к. это все делается прикладным жс рантаймом выходит жруче-тормозуче, и воркеры все-таки тяжелы из-за необходимости копировать в них данные.

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

Даже матом ругаться не хочется.

а ты умеешь?

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

Ты не нужен. У жс минимальный бойлерплейт среди другой скриптухи.

Не нужны такие икперды. Ты забыл про луа.

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

Злоупотребление чем? Это обычное наследование. Метод, где в каждом классе (X,Y,Z) делается какой-то код (A,B,C), вот сделали эту иерархию, сделали еще всяких классов, которые наследуются от X,Y,Z. Теперь половине из них надо чтобы в X делалось A,D, а другой половине не надо. Ничего такого, обычная хотелка.

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

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

процедурное программирование - удачное

30-и летней давности

За 30 лет ничего лучше не придумали, знак качества, можно сказать.

когда все аргументы запихиваются в одну структуру это ничем не отличается от глобала

Это очень сильно отличается от глобала. Тут вообще ничего общего с глобалом нет.

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

Зачем писать функции, которые требуют 50 аргументов? Функция должна помещаться на экране. То бишь занимать 20-50 строк максимум. За редкими исключениями. И принимать 3-5 аргументов от силы. Если ты пишешь функции в 50 аргументов, ты что-то делаешь не так.

Процедурный код не может понимать даже программист, который когда-то его напейсал.

А может понимать.

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

За 30 лет ничего лучше не придумали, знак качества, можно сказать.

ну с таким же успехом можно сказать, что за несколько тысяч лет ничего лучше мотыги не придумали. ООП придумали когда поняли, что процедурный код это тоже нагромождение goto и бессмысленных операций не несущих бизнесовой нагрузки, т.е. для программ длиннее одного алгоритма оно не годится и возможность пропихивать ссылки одних процедур в агрументы других которую привнесла функциональщина тут не особо помогает. Даже наоборот, функциональный код сложно отлаживать и дорабатывать, т.к. в нем скрыт пошаговый ход выполнения программы. ФП это прикольненько, когда оно инкапсулировано в отдельно взятом методе ООП структуры, можно изящно решить алгоритмическую задачку, но в масштабе системы оно не годится.

Тут вообще ничего общего с глобалом нет.

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

А может понимать.

нет, процедурный код это борьба программиста с данными, функциональный - с поведением, минимальные изменения там как челендж

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

значит вы что-то коряво напроектировали

Да. Наслушался бездарных преподов в шараге и писал ООП - код с наследованием.

кроме наследования можно и даже нужно использовать агрегацию

Показывай, как нужно это делать.

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

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

Не помойка, это когда написал класс и больше его никогда не трогаешь, как я понимаю? Из этой ситуации у тебя есть 3 выхода: не реюзать и копипастить D, сделать в X признак и свитч в A с вызовом D, сломать иерархию. Все 3 выхода - мусор, как и твоя ооп помойка, где, куда не плюнь, делать нихера нельзя, а если пытаться делать правильно, то получиться fuzzbuzzenterprise.

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

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

Syncro ★★★★★
()
Последнее исправление: Syncro (всего исправлений: 1)
Ответ на: комментарий от no-such-file

ООП решает проблему нагромождения if else и всяких switch по типу.

Это не проблема. И ООП её не решает, а переводит в нагромождение типов.

Решает проблему мульти-диспатч. Но его почему-то делать стесняются в популярных ЯП. Использовать ООП для мульти-диспатча можно, но глупо.

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

не решает, а переводит в нагромождение типов

А должна быть одна кнопка «Сделать ЗБС»? Хоть какой диспатч предполагает, что код который будут диспатчить, должен быть написан. ООП хоть и является самым тривиальным вариантом, но, внезапно по известной теореме покрывает 90% случаев. Остальные 10 могут запердолиться в мультидиспатч на коленке, или взять CLOS, или ещё какую-нибудь эзотерику. Если это реально нужно, уровень проблемы и решальщиков должен быть достаточным, чтобы разобраться в инструментах и подходах без @vbr.

no-such-file ★★★★★
()

Ого какой всеобще-агрессивный токсикоз. Вам бы даму завести, ну или аквариум с котами. А что никто не обратил внимание на такую шутку-юмора JS?

> typeof NaN
'number' 

На всякий: NaN - Not a Number

leprecon73
()
Ответ на: комментарий от Psilocybe

JS нужен , чтобы снежинки анимировать на сайте

дед выйди из 2007 года, на дворе 2022, я сам в шоке. js на сервере уже давно

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

а чем так плох синтаксический сахар кроме как по идеологическим причинам? разве развитие языка и обратная совместимость это что-то плохое? ааа ну потому что это сразу снимает налет илитарности и «высокого порога вхождения»

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

Я сейчас рефакторю процедурный код на pg/plsql. Вообще, это даже интересно - как город из спичек собирать... Проблема в том, что я его перевожу на чистый SQL, и он становится менее читаемым (зато с векторной алгеброй)

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

Чувак, на сервере и brainfuck давно. А как давно перловые однострочники!

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

вечные проблемы с зависимостями, вечный половой акт с версиями jdk. а про мусорный Gradle я вообще молчу. вечером все работает, закомитил, с утра на работу приходишь - проект весь красный. ты представить не можешь сколько проклятий я посылал в его сторону пока писал на java. пока в докер все не обернули нормально работать просто отказывалось.

может просто мне попался проект плохой, но это был ад)

а ну и куда же конечно без анального ООП)) О да) Проще было скопипастить что-то чем разбираться в запутанной иерархии классов которую нагородили труЪ ценители ООП. Причем это не spring виноват (хотя и он в какой-то степени тоже), это наши копро-архитекторы постарались. Запаслись упорином и нагородили такой сюреализм что сам Пикасо бы позавидовал.

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

тащемта js тоже не без изъянов, но если ты не совсем дурачек то typescript это лучший javascript

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

Есть такое понятие: байтоепство, этим любят страдать сишники и крестовики, а тут дрочево на данные: текст, цифорки и всякие sql процедурки, это когда часть кода ты забубениваешь из бекенда в нутро свой субд и она пережёвывает все эти данные вот этим кодом перед тем как выплюнуть их. Изменяет в зависимости от курса бакса, к примеру, короче, SQL это тоже крайне узкая ниша… большинству достаточно знать 5 sql операторов))

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

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

А так обычный BI - прогноз-план-факт, анализ тонких мест и ошибок.

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

просто это вообще контр интуитивно. писать кучу процедур в sql вместо того чтобы сделать это в бекенде. как это поддерживать? по хорошему SQL надо знать, но упарываться до такого - это просто дичь.

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