As For JavaScript Coalesce Expression - Nullish coalescing operator - ??
Abstract
О том, почему coalesce expression является идиотизмом притянутым в спецификацию идиотами не понимающими архитектуру языка, а так же о том как разработчики V8 реализовали эту парашу именно как парашу.
Что это такое ваше за Coalesce Expression - я забыл - напомни мне - я упырь
не волноваться, я тоже упырь и совершенно не понимаю как придумывают эти названия.
Потому вот документация и примеры:
Официальная спецификация ECMA
MDN
пример:
В чем проблема проверять и на null и на undefined одной конструкцией
Эта разница принципиальна для runtime. На основе этой информации RunTime может предпринимать совершенно разные шаги каким образом можно работать с нашим кодом. Очевидно, что идентификатор связанный с
По этой причине, Coalesce expression бесполезно так как включает в себя два пограничных случая, которые не пересекаются. Иными словами, если в Вашей программе Вы вынуждены проверять идентификатор на то может ли он быть связан в одной и той же ситуации с
Конечно если в Ваши задачи входит писать эффективный код. То есть код, который претендует на максимальную производительность.
Посмотрите на официальные API - если API должно вернуть обьект, но при этом что-то произошло, что не позволяет это сделать, то API всегда вернет null. Чем прямо сообщает RunTime - да я должен был вернуть обьект, но что-то пошло не так.
Байт код от V8 для Coalesce expression
Именно ради этого раздела я и затеял все это словоблудие.
JavaScript код:
Ldar - это загрузка содержимого регистра в регистр аккумулятора.
Регистр аккумулятора - это особенный уникальный регистр,
который существует в единственном числе в V8. Через него делаются практически все операции. */
на языке байткода V8 звучит как - если в регистре аккумулятора находится что-то
что является undefined или null то сделать переход к метке label1 */
Abstract
О том, почему coalesce expression является идиотизмом притянутым в спецификацию идиотами не понимающими архитектуру языка, а так же о том как разработчики V8 реализовали эту парашу именно как парашу.
Что это такое ваше за Coalesce Expression - я забыл - напомни мне - я упырь
не волноваться, я тоже упырь и совершенно не понимаю как придумывают эти названия.
Потому вот документация и примеры:
Официальная спецификация ECMA
MDN
пример:
var theThing;"
(theThing ?? "Yo");
// Если theThing связан с undefined или null результат вычисления выражения будет "Yo
В чем проблема проверять и на null и на undefined одной конструкцией
undefined - это primitive value которое устанавливается для идентификаторов созданных при помощи variable statement.null- это primitive value которое связывают с идентификатором который в прошлом или в будущем был/будет связан с обьектом, но в его текущем состоянии обьект не определен. То есть null - это обьект с нулевой структурой. Не путать с указателями из других языков.
Эта разница принципиальна для runtime. На основе этой информации RunTime может предпринимать совершенно разные шаги каким образом можно работать с нашим кодом. Очевидно, что идентификатор связанный с
undefined - это идентификатор поведение которого в будущем предсказать невозможно. Идентификатор связанный с null - в будущем будет обьектом или ранее использовался как обьект. По этой причине, Coalesce expression бесполезно так как включает в себя два пограничных случая, которые не пересекаются. Иными словами, если в Вашей программе Вы вынуждены проверять идентификатор на то может ли он быть связан в одной и той же ситуации с
null или undefined - то у Вас проблемы с вашим кодом, его архитектурой. Так как если Вы знаете что Ваш идентификатор будет связан с обьектом в будущем - он обязан быть про инициализирован как null, а не undefined. Конечно если в Ваши задачи входит писать эффективный код. То есть код, который претендует на максимальную производительность.
Посмотрите на официальные API - если API должно вернуть обьект, но при этом что-то произошло, что не позволяет это сделать, то API всегда вернет null. Чем прямо сообщает RunTime - да я должен был вернуть обьект, но что-то пошло не так.
Байт код от V8 для Coalesce expression
Именно ради этого раздела я и затеял все это словоблудие.
JavaScript код:
var theThing;byteCode V8:
(theThing ?? "Yo");
Ldar r0/* Регистр r0 это наш идентификатор theThing.
Ldar - это загрузка содержимого регистра в регистр аккумулятора.
Регистр аккумулятора - это особенный уникальный регистр,
который существует в единственном числе в V8. Через него делаются практически все операции. */
JumpIfUndefinedOrNull "label1"/* Это непосредственно операция ??,
на языке байткода V8 звучит как - если в регистре аккумулятора находится что-то
что является undefined или null то сделать переход к метке label1 */
Jump "label2"// безусловный переход к метке label2
label1:// метка label1 к которой происходит переход
LdaConstant [0]// загрузить в аккумулятор подготовленную константу. В нашем случае это будет ссылка на "Yo"
label2:// метка label2 к которой происходит переход
Этот же код без комментариев:
// Other code
Ldar r0Ничего не покоробило в логике этого кода?
JumpIfUndefinedOrNull "label1"
Jump "label2"
label1:
LdaConstant [0]
label2:
🔥3
⎡JSbook: 02.03⎦ JavaScript: От мифов к спецификации. Выражения.
https://www.youtube.com/watch?v=lq5vi6DmEpA
#JSbook #chap_02_03
#JavaScript_От_мифов_к_спецификации
#video #timecodes #відео #таймкоди
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:00:00, ожидание начала
https://www.youtube.com/watch?v=lq5vi6DmEpA
#_js_radio_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:07:39, тема трансляции
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=459s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:08:05, благодарности
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=485s
#_Благодарности_
#Susuwatari #Сусуватарі #Сусуватари #煤渡
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:21:29, антидисклеймер
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=1289s
#AntiDisclamer #АнтиДисклеймер
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:23:54, О чем был первый раздел: js - скриптовый язык. js и хост среда
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=1434s
#JSbook #ScriptingLanguage #СкриптоваМова #СкриптовыйЯзык #EmbeddedLanguage #ВбудованаМова #ВстраиваемыйЯзык #Host #Хост #RunTime #РанТайм #Agent #Агент #V8 #SpyderMonkey #JSC #JavaScriptCore #API #Browser #Браузер #DOM #CSSOM #EventLoop #NodeJS #setTimeout #HTML5 #CallBack #КолБек #КолБэк
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:33:36, js - скриптовый язык: что есть и чего нет
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=2016s
#JSbook #ScriptingLanguage #СкриптоваМова #СкриптовыйЯзык #EmbeddedLanguage #ВбудованаМова #ВстраиваемыйЯзык
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:35:26, О чем был второй раздел: js: структурирование информации
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=2126s
#JSbook #InformationStructuring #СтруктуруванняІнформації #СтруктурированиеИнформации #Key #Ключ #Property #Властивість #Свойство #Проперті #Проперти
#ECMA
#InternalMethod [[Get]]
#InternalSlot [[PrivateElements]]
#sec_object_internal_methods_and_internal_slots
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:57:50, музыкальная пауза
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=3470s
#_ПАУЗА_ #_js_radio_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:02:24, вопрос про структурирование информации и прототипное наследование
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=3744s
#alert #Browser #Браузер #process_stdout_write #NodeJS #print #D8 #console #console_log #prototype #Prototypes #Прототипи #Прототипы #Inheritance #Наслідування #Наследование
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:12:17, Второй раздел: выражения
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=4337s
#JSbook #InformationStructuring #СтруктуруванняІнформації #СтруктурированиеИнформации #alert #Browser #Браузер #process_stdout_write #NodeJS #print #D8 #console #console_log #Host #Хост #Expression #Вираз #Выражение
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:17:55, пауза
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=4675s
#_ПАУЗА_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:19:47, выражения
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=4787s
#JSbook #Expression #Вираз #Выражение #arguments #Аргументи #Аргументы
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:58:00, Созвон, объяснение функционирования console.log("Hello world");
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=7080s
#Expression #Вираз #Выражение #arguments #Аргументи #Аргументы #console #console_log #prototype #String #Рядок #Строка #StringExoticObject #ExoticObject
#ECMA
#clauses #subclause
#BinaryLogicalOperators
#sec_binary_logical_operators
#production
#LogicalANDExpression
#prod_LogicalANDExpression
#LogicalORExpression
#prod_LogicalORExpression
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
03:06:09, итоги по сказанному
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=11169s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
⬇️⬇️⬇️
https://www.youtube.com/watch?v=lq5vi6DmEpA
#JSbook #chap_02_03
#JavaScript_От_мифов_к_спецификации
#video #timecodes #відео #таймкоди
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:00:00, ожидание начала
https://www.youtube.com/watch?v=lq5vi6DmEpA
#_js_radio_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:07:39, тема трансляции
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=459s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:08:05, благодарности
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=485s
#_Благодарности_
#Susuwatari #Сусуватарі #Сусуватари #煤渡
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:21:29, антидисклеймер
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=1289s
#AntiDisclamer #АнтиДисклеймер
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:23:54, О чем был первый раздел: js - скриптовый язык. js и хост среда
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=1434s
#JSbook #ScriptingLanguage #СкриптоваМова #СкриптовыйЯзык #EmbeddedLanguage #ВбудованаМова #ВстраиваемыйЯзык #Host #Хост #RunTime #РанТайм #Agent #Агент #V8 #SpyderMonkey #JSC #JavaScriptCore #API #Browser #Браузер #DOM #CSSOM #EventLoop #NodeJS #setTimeout #HTML5 #CallBack #КолБек #КолБэк
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:33:36, js - скриптовый язык: что есть и чего нет
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=2016s
#JSbook #ScriptingLanguage #СкриптоваМова #СкриптовыйЯзык #EmbeddedLanguage #ВбудованаМова #ВстраиваемыйЯзык
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:35:26, О чем был второй раздел: js: структурирование информации
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=2126s
#JSbook #InformationStructuring #СтруктуруванняІнформації #СтруктурированиеИнформации #Key #Ключ #Property #Властивість #Свойство #Проперті #Проперти
#ECMA
#InternalMethod [[Get]]
#InternalSlot [[PrivateElements]]
#sec_object_internal_methods_and_internal_slots
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:57:50, музыкальная пауза
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=3470s
#_ПАУЗА_ #_js_radio_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:02:24, вопрос про структурирование информации и прототипное наследование
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=3744s
#alert #Browser #Браузер #process_stdout_write #NodeJS #print #D8 #console #console_log #prototype #Prototypes #Прототипи #Прототипы #Inheritance #Наслідування #Наследование
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:12:17, Второй раздел: выражения
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=4337s
#JSbook #InformationStructuring #СтруктуруванняІнформації #СтруктурированиеИнформации #alert #Browser #Браузер #process_stdout_write #NodeJS #print #D8 #console #console_log #Host #Хост #Expression #Вираз #Выражение
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:17:55, пауза
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=4675s
#_ПАУЗА_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:19:47, выражения
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=4787s
#JSbook #Expression #Вираз #Выражение #arguments #Аргументи #Аргументы
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:58:00, Созвон, объяснение функционирования console.log("Hello world");
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=7080s
#Expression #Вираз #Выражение #arguments #Аргументи #Аргументы #console #console_log #prototype #String #Рядок #Строка #StringExoticObject #ExoticObject
#ECMA
#clauses #subclause
#BinaryLogicalOperators
#sec_binary_logical_operators
#production
#LogicalANDExpression
#prod_LogicalANDExpression
#LogicalORExpression
#prod_LogicalORExpression
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
03:06:09, итоги по сказанному
https://www.youtube.com/watch?v=lq5vi6DmEpA&t=11169s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
⬇️⬇️⬇️
YouTube
⎡JSbook: 02.03⎦ JavaScript: От мифов к спецификации. Выражения
В третьей части второго раздела, мы поговорим о том, что такое интерпретируемый язык. Как понимание принципов вычисления выражений - может перевернуть все восприятие языка. И почему любая цифра или строка это не то, чем оно кажется.
Таймкоды:
Будут после…
Таймкоды:
Будут после…
❤2