Тема вопроса: "Передача значения по значению и по ссылке"
Его именно НЕТ.
Спецификация ECMA не занимается тем, что регламентирует работу с памятью или способами представления этих структур данных в памяти.
Спецификация ECMA не может дать ответа на этот вопрос ПРИНЦИПИАЛЬНО.
Мы можем, опираясь на описание поведений для тех или иных statement или expression и для себя сделать вывод, - как бы для конкретной реализации языка (v8, Chakra, и т.д.) на основе данной спецификации было бы проще это реализовать.
Важный промежуточный вывод
Спецификация ECMA не может диктовать то, каким образом Вы передаете куда-дибо какие-либо данные, потому как это вне ее зоны ответственности.
А это значит, что если мы рассуждаем именно о ЯЗЫКЕ JavaScript - то мы НЕ ИМЕЕМ НИКАКОГО ПРАВА утверждать что в языке JS существует передача по ссылке или по значению. Просто потому, что в ней нет ничего и не может быть ничего что могло бы регламентировать эту работу.
И максимум о чем мы можем судить - КАК спецификация реализована в конкретном коде (например V8).
Или пытаться проводить аналогии, между алгоритмами спецификации ECMA и тем, что мы считаем передачей по ссылке или по значению.
Разберем эти два направления: как реализовано в V8 и как мы можем интерпретировать спецификацию.
Начнем с ECMA.
В спецификации ECMA, любая передача чего-то куда, то управляется двумя конструкциями Reference Record и описанием взаимодейтсвия с ней. (Слово Reference ужу должно напрягать).
Где доступ к данным, выполняется через абстрактную операцию GetValue. Иными словами ни о каком разговоре о интерпретации этого как доступа по значению и мысли быть не может.
Потому как получить данные нельзя без вызова абстракции.
И описанием поведения инструкция let и set (не путайте с let в JS. Это разные вещи). Где в описании (ECMA ) инструкции let прямо написано
передача чего-то по значению, принципиально невозможна, кроме случаев указанных для be a copy. Которые касаются особых поведений для Shared Array или Typed Array.
А именно меньше 1% спецификации. Или того, чем Вы в большистве своем никогда не пользуетесь. То есть того что не касается "традиционного JavaScript"
Дальше берем конкретную реализацию ECMA спецификации, а именно самую ее популярную и развитую - V8.
Где по умолчанию ВСЕ данные в JS являются Object. И исключением являются только особые случаи оптимизации поведения, когда reference может вместо самого себя как value разместить SMI или Floating Point Value.
что является частной оптимизацией поведения конкретно реализации.
ИГОГО
Как на уровне спецификации языка, так и на уровне ее реализации и речи не может идти о интерпретациях вида: передачи чего то по ссылке и чего-то по значению.
Это же можно обозначить еще и другим примером:
Если для Вас передача по значению, это работа с Primitive Value, то обьясните мне и себе каким образом передаются Symbol или BigInt.
Которые являются чистыми абстракциями, то есть никаких реальных Value на уровне реализации в машинном коде, иметь не могут.
То есть за ними лежить глубокая сложная логика при работе с ними, передача которой может быть только по ссылке.
https://news.1rj.ru/str/AsForJsTalks/251239
Итак JS понятия передачи по значению и по ссылке - нету или назвать сложно
Его именно НЕТ.
Спецификация ECMA не занимается тем, что регламентирует работу с памятью или способами представления этих структур данных в памяти.
Спецификация ECMA не может дать ответа на этот вопрос ПРИНЦИПИАЛЬНО.
Мы можем, опираясь на описание поведений для тех или иных statement или expression и для себя сделать вывод, - как бы для конкретной реализации языка (v8, Chakra, и т.д.) на основе данной спецификации было бы проще это реализовать.
Важный промежуточный вывод
Спецификация ECMA не может диктовать то, каким образом Вы передаете куда-дибо какие-либо данные, потому как это вне ее зоны ответственности.
А это значит, что если мы рассуждаем именно о ЯЗЫКЕ JavaScript - то мы НЕ ИМЕЕМ НИКАКОГО ПРАВА утверждать что в языке JS существует передача по ссылке или по значению. Просто потому, что в ней нет ничего и не может быть ничего что могло бы регламентировать эту работу.
И максимум о чем мы можем судить - КАК спецификация реализована в конкретном коде (например V8).
Или пытаться проводить аналогии, между алгоритмами спецификации ECMA и тем, что мы считаем передачей по ссылке или по значению.
Разберем эти два направления: как реализовано в V8 и как мы можем интерпретировать спецификацию.
Начнем с ECMA.
В спецификации ECMA, любая передача чего-то куда, то управляется двумя конструкциями Reference Record и описанием взаимодейтсвия с ней. (Слово Reference ужу должно напрягать).
Где доступ к данным, выполняется через абстрактную операцию GetValue. Иными словами ни о каком разговоре о интерпретации этого как доступа по значению и мысли быть не может.
Потому как получить данные нельзя без вызова абстракции.
И описанием поведения инструкция let и set (не путайте с let в JS. Это разные вещи). Где в описании (ECMA ) инструкции let прямо написано
Algorithm steps may declare named aliases for any value using the form “Let x be someValue”. These aliases are reference-like in that both x and someValue refer to the same underlying data and modifications to either are visible to both.
Algorithm steps that want to avoid this reference-like behaviour
should explicitly make a copy of the right-hand side: “Let x be a copy of someValue” creates a shallow copy of someValue.Вместо ИГОГО по части спецификации ECMA
передача чего-то по значению, принципиально невозможна, кроме случаев указанных для be a copy. Которые касаются особых поведений для Shared Array или Typed Array.
А именно меньше 1% спецификации. Или того, чем Вы в большистве своем никогда не пользуетесь. То есть того что не касается "традиционного JavaScript"
Дальше берем конкретную реализацию ECMA спецификации, а именно самую ее популярную и развитую - V8.
Где по умолчанию ВСЕ данные в JS являются Object. И исключением являются только особые случаи оптимизации поведения, когда reference может вместо самого себя как value разместить SMI или Floating Point Value.
что является частной оптимизацией поведения конкретно реализации.
ИГОГО
Как на уровне спецификации языка, так и на уровне ее реализации и речи не может идти о интерпретациях вида: передачи чего то по ссылке и чего-то по значению.
Это же можно обозначить еще и другим примером:
Если для Вас передача по значению, это работа с Primitive Value, то обьясните мне и себе каким образом передаются Symbol или BigInt.
Которые являются чистыми абстракциями, то есть никаких реальных Value на уровне реализации в машинном коде, иметь не могут.
То есть за ними лежить глубокая сложная логика при работе с ними, передача которой может быть только по ссылке.
https://news.1rj.ru/str/AsForJsTalks/251239
v8.dev
The story of a V8 performance cliff in React · V8
This article describes how V8 chooses optimal in-memory representations for various JavaScript values, and how that impacts the shape machinery — all of which helps explain a recent V8 performance cliff in React core.
🔥8🙏4❤3
22-30 за Київом
Где тот ваш курс про JS.
На каком мы свете?
И может посмотрим видео.
https://www.youtube.com/watch?v=Dtgo9uB1fxU
Где тот ваш курс про JS.
На каком мы свете?
И может посмотрим видео.
https://www.youtube.com/watch?v=Dtgo9uB1fxU
YouTube
AsForJS Talks: Что там за курс и еще
Где тот ваш курс про JS. На каком мы свете? И может посмотрим видео.
Таймкоды:
__будут после__
AsForJs новости в Telegram: https://news.1rj.ru/str/AsForJavaScript
AsForJs Talks в Telegram: https://news.1rj.ru/str/AsForJsTalks
*Поддержать маленького бородатого JavaScript-ра*…
Таймкоды:
__будут после__
AsForJs новости в Telegram: https://news.1rj.ru/str/AsForJavaScript
AsForJs Talks в Telegram: https://news.1rj.ru/str/AsForJsTalks
*Поддержать маленького бородатого JavaScript-ра*…
❤14🕊1🐳1
Упыри мои дорогие.
Помните просьбу о лишних гривнах приюту?
Вот Вам ответ
Спасибо Вам
Помните просьбу о лишних гривнах приюту?
Вот Вам ответ
Спасибо Вам
❤35🙏8
а вот вы сразу на вскидку скажете какой размер у Array в js максимальный?
я вот все время путаю
я вот все время путаю
Спасибо Вам за котов.
посчитали - вы собрали чуть больше 70 000 гривен.
Єто около 1500 дол.
я Вам очень благодарен.
посчитали - вы собрали чуть больше 70 000 гривен.
Єто около 1500 дол.
я Вам очень благодарен.
❤32🔥7🕊2
А вы знаете почему ваши родители так волнуются за то в шапке ли вы?
и при чем тут джабаСкрипт
и при чем тут джабаСкрипт
👍7👀1
Чувакам из дружественного сопредельного государства, показалось мало лишить людей света.
Они решили Одессу лишить воды.
Если у кого есть контакты - расскажите тем дебилам, что єто только увеличивает желание послать именно их курсом русского военного корабля.
Пользуйтесь курортами вашего йух-а.
Они решили Одессу лишить воды.
Если у кого есть контакты - расскажите тем дебилам, что єто только увеличивает желание послать именно их курсом русского военного корабля.
Пользуйтесь курортами вашего йух-а.
💯50👍2👌2🕊2❤1😁1🤯1
Она всегда относила себя к умным людям. Но умные люди, почему-то, всегда относили ее обратно.
😁19🤣12❤1👍1🕊1
Фанати пишуть:
Мурич - чого ми тебе терпемо?
Бо я сонце вашого життя.
Мурич - чого ми тебе терпемо?
Бо я сонце вашого життя.
❤8😁6💯2❤🔥1🕊1😍1🐳1
На Яндекс Фронтенд сейчас идет трансляция с участием Сошникова. Которого я в плоскости языка JS безмерно уважаю
Второй слева
UPD: Я ниче ни чем не понял что они там обсуждают.
UPD2: не смотрите. я зря добавил эту ссылку, не смотря на Сошникова.
https://www.youtube.com/watch?v=Da3cJi7RDPg
Второй слева
UPD: Я ниче ни чем не понял что они там обсуждают.
UPD2: не смотрите. я зря добавил эту ссылку, не смотря на Сошникова.
https://www.youtube.com/watch?v=Da3cJi7RDPg
YouTube
Я 💛 Фронтенд 2026
Я 💛 Фронтенд 2026 — главная фронтенд-конференция Яндекса и ежегодный флагман для тех, кто создаёт современные интерфейсы.
14 февраля соберутся разработчики и дизайнеры, которые искренне влюблены во фронтенд: в код, архитектуру, визуал и пользовательский…
14 февраля соберутся разработчики и дизайнеры, которые искренне влюблены во фронтенд: в код, архитектуру, визуал и пользовательский…
👎13🔥7👍3
Если прогноз по светав верный,
то около 20-00
то около 22-00
за київом спробуємо щось.
приходитите.
рокет саенс не гарантируется, но хоть поржем.
то около 22-00
за київом спробуємо щось.
приходитите.
рокет саенс не гарантируется, но хоть поржем.
❤12👍6🔥2
Сегодня у меня было неожиданно ТРИ созвона.
1) созвон в 12-00
с одним крупным каналом на счет интервью.
Ну там видели выше.
Где мне прислали требования к записи. Среди которых:
2) второй созвон:
Еще спустя пара часов, был разговор с одним умным человеком, который может быть согласиться поболтать со мной о программировании.
И вот там, так же было желание исключить подобные єлементы.
То кто тут раб?
3) созвон около 19
Хорошо что третий, с кем я сегодня говорил, был честен.
И кажется,
что он
был самым умным.
Что с людьми день красной жопы делает...
1) созвон в 12-00
с одним крупным каналом на счет интервью.
Ну там видели выше.
Где мне прислали требования к записи. Среди которых:
Одежда не должна содержать элементы, которые могут трактоваться как национальные.
2) второй созвон:
Еще спустя пара часов, был разговор с одним умным человеком, который может быть согласиться поболтать со мной о программировании.
И вот там, так же было желание исключить подобные єлементы.
То кто тут раб?
3) созвон около 19
Хорошо что третий, с кем я сегодня говорил, был честен.
И кажется,
что он
был самым умным.
Что с людьми день красной жопы делает...
🤣22😁4🕊3❤1💔1👀1
Свет то появляется то пропадает.
Не могу ничего гарантировать на 22-00.
Но конечно очень хочу.
Не могу ничего гарантировать на 22-00.
Но конечно очень хочу.
🙏11🤯1
❤5
Сегодня началась рассылка про курс.
Следите за обьявлениями.
Заткнулась на отметке 70.
Разбираюсь.
Следите за обьявлениями.
Заткнулась на отметке 70.
Разбираюсь.
🔥5👍1🙏1🤣1
⎡msk⎦ Разбор вопроса из Telegram о Array Double vs Array SMI"
https://www.youtube.com/watch?v=vgHNERQGcPk
#razbor
#В_интернетах_кто_то_неправ
#video #timecodes #відео #таймкоди
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:00:00, Музыка
https://www.youtube.com/watch?v=vgHNERQGcPk
#_js_radio_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:02:28, Бормотание про то есть ли звук
https://www.youtube.com/watch?v=vgHNERQGcPk&t=148s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:02:49, О чем это видео
https://www.youtube.com/watch?v=vgHNERQGcPk&t=169s
#Array #Double #SMI
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:05:08, Код, который мы будем разбирать
https://www.youtube.com/watch?v=vgHNERQGcPk&t=308s
#code #код
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:06:55, Первоочередное что нужно делать в подобных случаях
https://www.youtube.com/watch?v=vgHNERQGcPk&t=415s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:09:10, Повторение опыта в Google Chrome
https://www.youtube.com/watch?v=vgHNERQGcPk&t=550s
#Chrome
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:13:40, Повторение опыта в чистом V8
https://www.youtube.com/watch?v=vgHNERQGcPk&t=820s
#V8
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:17:20, Повторение опыта в NodeJS
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1040s
#NodeJS
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:19:20, Обнаружение проблемы о которой говорил автор вопроса
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1160s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:23:10, Базовый анализ кода
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1390s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:23:50, Проблема 1: создание массива
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1430s
#Array
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:31:00, Изменение способа создания массива резко изменило цифры в NodeJs
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1860s
#Array #NodeJS
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:32:20, Тест для Float теперь стал выдавать не аномальные цифры
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1940s
#Array #Float
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:33:40, Предположение о том, что проблема может быть в количестве элементов массива
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2020s
#Array
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:39:50, Предположение о том, что причина в методе indexOf
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2390s
#Array #indexOf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:44:18, Первые промежуточные выводы
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2658s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:47:07, Используем по логам ситуации деоптимизации кода
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2827s
#Deoptimization #Деоптимізація #Деоптимизация
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:55:10, Вторые промежуточные выводы
https://www.youtube.com/watch?v=vgHNERQGcPk&t=3310s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:59:12, Внимательный зритель заметил, что я не сохранил один из файлов, что могло повлиять на результаты, проверяем.
https://www.youtube.com/watch?v=vgHNERQGcPk&t=3552s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:00:00, Результаты вошли в норму
https://www.youtube.com/watch?v=vgHNERQGcPk&t=3600s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:08:40, Ответы на вопросы
https://www.youtube.com/watch?v=vgHNERQGcPk&t=4120s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
https://www.youtube.com/watch?v=vgHNERQGcPk
#razbor
#В_интернетах_кто_то_неправ
#video #timecodes #відео #таймкоди
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:00:00, Музыка
https://www.youtube.com/watch?v=vgHNERQGcPk
#_js_radio_
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:02:28, Бормотание про то есть ли звук
https://www.youtube.com/watch?v=vgHNERQGcPk&t=148s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:02:49, О чем это видео
https://www.youtube.com/watch?v=vgHNERQGcPk&t=169s
#Array #Double #SMI
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:05:08, Код, который мы будем разбирать
https://www.youtube.com/watch?v=vgHNERQGcPk&t=308s
#code #код
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:06:55, Первоочередное что нужно делать в подобных случаях
https://www.youtube.com/watch?v=vgHNERQGcPk&t=415s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:09:10, Повторение опыта в Google Chrome
https://www.youtube.com/watch?v=vgHNERQGcPk&t=550s
#Chrome
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:13:40, Повторение опыта в чистом V8
https://www.youtube.com/watch?v=vgHNERQGcPk&t=820s
#V8
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:17:20, Повторение опыта в NodeJS
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1040s
#NodeJS
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:19:20, Обнаружение проблемы о которой говорил автор вопроса
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1160s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:23:10, Базовый анализ кода
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1390s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:23:50, Проблема 1: создание массива
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1430s
#Array
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:31:00, Изменение способа создания массива резко изменило цифры в NodeJs
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1860s
#Array #NodeJS
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:32:20, Тест для Float теперь стал выдавать не аномальные цифры
https://www.youtube.com/watch?v=vgHNERQGcPk&t=1940s
#Array #Float
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:33:40, Предположение о том, что проблема может быть в количестве элементов массива
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2020s
#Array
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:39:50, Предположение о том, что причина в методе indexOf
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2390s
#Array #indexOf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:44:18, Первые промежуточные выводы
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2658s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:47:07, Используем по логам ситуации деоптимизации кода
https://www.youtube.com/watch?v=vgHNERQGcPk&t=2827s
#Deoptimization #Деоптимізація #Деоптимизация
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:55:10, Вторые промежуточные выводы
https://www.youtube.com/watch?v=vgHNERQGcPk&t=3310s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
00:59:12, Внимательный зритель заметил, что я не сохранил один из файлов, что могло повлиять на результаты, проверяем.
https://www.youtube.com/watch?v=vgHNERQGcPk&t=3552s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:00:00, Результаты вошли в норму
https://www.youtube.com/watch?v=vgHNERQGcPk&t=3600s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
01:08:40, Ответы на вопросы
https://www.youtube.com/watch?v=vgHNERQGcPk&t=4120s
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
YouTube
⎡msk⎦ Разбор вопроса из Telegram о Array Double vs Array SMI
В телеграм, от Владилена пришел вопрос: как так могло получиться в его тесте, что Array Double оказался заметно быстрее Array SMI.
Пробуем в живую разобраться и понять в чем может быть: либо проблема теста, либо проблема Мурыча, когда он утверждает что должно…
Пробуем в живую разобраться и понять в чем может быть: либо проблема теста, либо проблема Мурыча, когда он утверждает что должно…
❤9🤣2
У меня вопрос к тому хрену, который прилепил мне премиум в телеграм - кто? кто тебе дал право тратить мои деньги?
😁32🌚3
Пока я занимаюсь фигней,
посмотрите вот этот шикарный подкаст.
Я получил бесконечное удовольствие.
Гость уровня - бох.
Там очень много проф жаргона, если понадобится расшифровать - свистните.
https://www.youtube.com/watch?v=P9G-GVRgGwI
посмотрите вот этот шикарный подкаст.
Я получил бесконечное удовольствие.
Гость уровня - бох.
Там очень много проф жаргона, если понадобится расшифровать - свистните.
https://www.youtube.com/watch?v=P9G-GVRgGwI
YouTube
Хэш-таблицы | Open addressing, коллизии, hash | Podlodka Podcast #464
Хэш-таблицы – одна из самых элегантных структур данных: простая на поверхности и бесконечно глубокая внутри. Андрей Аксенов — автор поискового движка Sphinx, разбирает их устройство от фундамента до тонкостей реализации.
В выпуске обсуждаем два подхода к…
В выпуске обсуждаем два подхода к…
👍7👀2❤1❤🔥1🙏1👨💻1