As For JS
3.42K subscribers
140 photos
14 videos
4 files
436 links
As For JavaScript...
Обсуждения — @AsForJsTalks
Download Telegram
Извините.
традиция такая.

и снова третье сентябряяяя


upd: вибачте, я забув про беслан.
саме про нього треба згадувати цієї дати.
👎31🔥27👍5😁4🤣4💔32
Єто все, еще не все
💯10🙏5💔4
#муризмы
Что самое главное для программирования?

красивые женщины

а знаете почему?

потому что ее царапающаяя насмешка над вашим кодом, намного сильнее вашего сеньера
😁15👍11💯53🔥2💔1
Сегодня с 20-30 по 23 ищите луну на небе.
Будет полное затмение.

уже сейчас погаснет/вспыхнет
🌚145👍3
Forwarded from Demi Murych
Відповідь треба поідилити на 2 частини: де саме JS та чому існує потреба розглядати JS без відриву від HOST середовища у якому JS використовується.

Згідно офеційної специфікації ECMA, мова JS є скріптованою мовою, тобто мовою у якої не може бути свого вводу/виводу, тобто мовою яку вбудовують кудись, де вона вже користується можливостями системи.
Система куди вбудовують JS, згідно специфікації зветься HOST.

HOST користується можливостями які надає JS для вирішення свої задач.
Тобто HOST не може зробити нічого, якщо специфікація забороняє це, або не надає необхідних можливостей.

Розглянемо ваш перелік пунктів згідно специфікації та окремо - згідно HOST середовищу яке ви позначили як chromium.


1) single threaded
Відповідає дійсності щодо 1997 року.
Та НЕ відповідає дійсності сучасному JS, а саме з 2017 року, коли з'являється концепція Multi-Agent
ECMAScript 2017 introduced Async Functions, Shared Memory, and Atomics along with smaller language and library enhancements, bug fixes, and editorial updates. Async functions improve the asynchronous programming experience by providing syntax for promise-returning functions. Shared Memory and Atomics introduce a new memory model that allows multi-agent programs to communicate using atomic operations that ensure a well-defined execution order even on parallel CPUs.


При цьому треба звернути увагу на те, що специфікація не регламентує то як саме буде реалізовано те саме "Multi-Agent ". Що призводить до того, що то, як воно працює in wild - залежіть від конкретної реалізації.
Наприклад v8 (рушій який створено Google) в залежності від операційної системи може використовувати різні моделі: в Linux це будуть системні треди, в Windows в залежності від обставин це можуть бути або треди або окремі процеси.

Тобто сучасний JS згідно специфікації може бути распаралелено в межах декількох агентів, реалізація яких халежіть від конкретного рушія. І може бути як архаічною - single thread, до мульти тхреад, мульти процесс, або будь чого що автори рушія вирішать за важливим для себе.

До речі, щоб сучасний Chrome використав V8 який працює в Single thread для цбого треба руцями вказати ключ:
--single-threaded


2) garbage collected
З точкі зору сучасної специфікації, не має ніяких обмежень на то, що саме вікористовуї рушій для виконання JS коду. Рушій сам обирає для себе ту модель роботи з памятью яка йому зручніше. І це не обов'язково garbage collector.

V8 - працює саме завдяки Garbage Collector. Його так зробили. Але, навіть V8 можно запустити з вимкненим GC, на будь якому Chromium (треба лише стартанути використавши ключ --gc-interval) . І це буде працювати ДУЖЕ ШВИДКО якщо код на JS написано людиною яка розуміється на тому, як не витрачати безліч пам'яті.



7) non blocking event loop
Згідно сучасної специфікації, виконання JS коду не потребує ніякого EVENT LOOP.
У випадку Chrome Event Loop існує тому, що це потреба специфікації HTML5.
NodeJs використовує свою імплементацію Event Loop яка відрізняеться від HTML5
Будь яке інше середовище взагалі може використовувати JS без Event Loop


Замість ІГОГО:
Імплементація JS з 2017 року може бути будь якою, тобто не завжди sibglt threaded. Все залежить від можливостей рушія який або використовує сучасні можливості специфікації мови, або ні.
У випадку Crhomium ми можем бачити це на прикладі Worker API яке саме це і робить.

Garbage Collector - це одна з можливих особливостей реалізацій JS рушія, яка не має відношення щодо реалізації її у випадку саме JS специфікації. І є частину особистої реалізації конкретного рушія. Наприклад V8. І навіть в ньому він може бути відключено, та JS продовжить свою роботу, ефективність якої буде вже зхалежіть від того, як програміст написав свій код.

Event Loop - знову ж не є частиною JS. У випадку Chrome це частина специфікації HTML5. Сам по собі JS може працювати або по іншщому алгоритму Event Loop або без Event Loop взгалі.
👍145
Кому нечего делать

Придумайте четыре и больше способов проверить данные на NaN.


Приз за самый необычный способ.


Уже предложенные варианты:
// 1
Number.isNaN(value)


// 2
Object.is(NaN, value)


// 3
((value) => {
return value + 1 !== value + 1
})

/// 3.1 упрощенный
value !== value;

// 4
new Set([value, NaN]).size === 1
new Set([NaN]).has(value)

// 5
typeof value==="number" && String(value) === "NaN"

// 6
[NaN].includes(value)

// 7
typeof value === 'number' && !(value <= Infinity)


Есть еще минимум один вариант, который радикально отличается от всего предложенного
4🌚4💔3🔥1
Сегодня 21-00 по Киеву
Почему NaN это диапазон из 9 квадриллионов чисел

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

https://www.youtube.com/watch?v=QxmS2ny5o3s
👍11🔥4🤯41
Кому не трудно
выполните вод этот код у себя в девтулс

(
()=>{
var ab = new ArrayBuffer( 24 );
var float64 = new Float64Array( ab );
var int64 = new BigUint64Array( ab );

float64[ 0 ] = NaN;
float64[ 1 ] = Math.sqrt( -1 );

// console.log( Math.sqrt( -1 ) );

console.log( 'sqrt', float64[ 0 ], int64[ 0 ].toString( 2 ) );
console.log( 'sqrt', float64[ 1 ], int64[ 1 ].toString( 2 ) );



}
)();

и покажите что выдало в консоль
3
Если все будет хорошо то 24 - ВНБ
👀8🔥21🤯1
Ежик, сто один, оградка
💯5
К слову о разговоре с В.Н.Брагилевским,
если у Вас есть желание что-то спросить - напишите что именно, я єто попробую интегрировать в план разговора.

Вопросы с донатами получают +10% в карму (;
👍16
А Вы знаете разницу между
isNaN( value );
// и
Number.isNaN( value );



Разница в том, что
Глобальный isNaN, оценивает именно результат приведения переданных данных к числу, а не само переданное данное
Например:
isNaN( "lorem" ); //true


В то же время Number.isNaN, проверяет ИМЕННО переданные данные на то, являются ли они УЖЕ NaN
Number.isNaN( "lorem" ); //false
👍251👎1
А Вы знаете разницу между
+"123";  //123
// и
Number( "123" ); //123

?
https://music.youtube.com/watch?v=v0BCYZTHBWo&si=kGT1iQWHG4Y9vz6h

Розмови про колір болю
Почати треба здаля
Коли вони палять поле
То плаче сама земля

Коли вони рвуть твій прапор
Натомість, тобі болить
Золото і блакить
Золото і блакить

Я пив би і пив із твоїх долонь
Дивився на твоє лице
Та вдосвіта з неба упав вогонь
І перевернув усе

Свого і чужого впізнати
Нескладно, та менш із тим
Ми мали на собі знаки
Блакитні із золотим

І повнились люттю жили
Відплати кожен бажав
Ревіли важкі машини
І ті, хто їх проводжав

Коли ти цілуєш очі
В куточку очей бринить
Золото, золото,
золото і блакить

Золото до небокраю
Блакитне затягне дим
І кожен, хто помирає
Помирає тут молодим

Золото плавиться в кулі
Блакитне в огні горить
Золото і блакить
Золото і блакить

То ось тобі моє слово
Ось тобі зміст буття
Ось тобі тіло Христове
Розірване на шмаття

В бою за священне право
Узріти в останню мить
Золото і блакить
Золото і блакить
🔥19👍32👎2🕊1😍1
Сегодня, суббота 20.07 в 16-00
Глазами реверс-инженера: npm червь Shai-Hulud

Разберемся что действительно интересного в npm черве Shai-Hulud. Стоит ли он какого либо внимания, и если стоит то в каком месте.

https://www.youtube.com/watch?v=rVfNr7aYYm0
🔥16👀1
Тем, кому был интересен вопрос, относительно первого шага в алгоритме Number.isNaN

Вопрос дошел уже до членов tc39.

Ответ на вскидку - не знаем, возможно для реадебилити.

Пообещали найти концы єтого решения.

Разницы от того найдут или не найдут - нет никакой, но все равно весело.
👍6😁4
Воскресение. 2-15 ночи по Киеву
Asm для JS программиста: Вирус и эвристический анализатор
Ранее мы написали очень простой файловый вирус, у которого есть существенный недостаток: антивирусные механизмы, даже не зная его сигнатуры, используя алгоритмы эвристического анализа, его обнаруживают.

Давайте разберемся с тем, как мы можем защитить себя. То есть сделать так, чтобы эвристический анализатор не воспринимал зараженный файл как нечто опасное.

Напишем наши первые стелс-механизмы.

https://www.youtube.com/watch?v=qjVKgy835KQ
🔥125👍4😎2😍1
Новые времена - новые вопросы на собеседованиях

Один знакомый прислал вопрос с собеседования:

Перед вами html код, внутри которого есть тег table с данными.

Напишите приведение его к json без использования chatGpt
🌚13🔥4👨‍💻4😁2