0: Включились.
1: Так, теперь вот это тут, а теперь вот это вот тут. О.
2: Hollow мои маленькие бородатые джаваскриптеры.
3: С вами, Янь, такой же маленький, не менее бородатый.
4: Слышно, видно нас. Ну, наверняка слышно и видно, судя по всему, я вот тут сейчас вот в этой, в окошке, в этом тоже себя вижу. Отлично. Сейчас только тут вот надо
5: Вот я остановлю, чтоб на всякий случай оно не мешало. Вот так вот.
6: Здравствуйте, дорогие мои, или я, дорогой ваш, сегодняшнюю трансляцию не рассматривайте каким-либо, не воспринимайте каким-либо серьёзным способом, что
7: Мы будем сегодня делать на последней такой трансляции, где мы там разбирали видео про 10 мифов и так далее. Под самый конец угораздил же нас черт, разбираться с тем,
8: Какие могут быть проблемы в производительности в случае использования for в случае использования for each и в случае использования reduce как 3 разные способа сравнения решения 1 и той же?
9: Задачи, которые мы могли бы сравнить с точки зрения производительности.
10: И там, под самый конец, там случились обстоятельства, когда мы так и не закончили, я так и не закончил этап, связанный с reduce, мы завершили. И вот сейчас мы попробуем возобновить весь этот процесс, и быренько, быренько бы
11: В манере давайте попробуем так давайте попробуем этак повторить все то, что было тогда, и выйти на необходимые нам выводы, или возможные выводы, или черт его знает.
12: Это ещё что, world of comedy shorts? Дорогой наш дедушка, кто ж ты такой world of comedy shorts? 1 раз тебя вижу такого прекрасного.
13: Ось, вот так вот, прежде чем мы перейдём к этим самым форам форыча и редьюсом. А, ну, во первых, да, рядом со мной тут голосом.
14: Висят товарищи, которые, которым вдруг захочется что-нибудь именно голосом спросить, так что вы не пугайтесь, если вдруг в вашу голову ворвутся голоса какие-то, кроме моего, это 1 денди b8 добрый.
15: Вечер и тебе добрый вечер. О, кстати, Максим Юрьевич, там, может, она. Так что Вертай, я просто, может, не никого нема вас.
16: Вас 2 героя. Ты и ещё, Александр. Больше пока никто не хочет. Ну и прекрасно так.
17: Так.
18: Вот, прежде чем мы перейдём к этим самым редьюсом форам и форичем, я
19: Я хотел бы ответить на вопрос, который, который я озвучивал в предыдущей трансляции, а потом 1 из подписчиков попросил показать проде.
20: Демонстрировать пруф того, о чем я рассказывал. Я рассказывал тогда. О тын тын эндрю наун. Здорово. И тебе, эндрю нано. Здорово. Кстати, во первых, почему не вылазит окно сейчас
21: Так, вот так, теперь влазит окно. Прекрасно. Так и я опять в этом. Надо ж разобраться, как бы сделать так, чтобы оно легко добавлялось без моего прямого участия.
22: Да ну, чтоб вас, кто там ещё?
23: И тебе, пожалуйста, разрешите.
24: Прекрасно.
25: Вот вопрос, который так озвучивался в процессе видео, я про него так рассказал. А потом в чате пришёл в чате, в телеграмовскому чате нашей группы, которая сопровождает этот наш чудесный канал.
26: Пришёл вопрос с просьбой показать какой-нибудь пруф, который бы подтверждал этот тезис. Вот сначала я начну с него, а потом мы перейдём к for редьюс. Так вот ещё кто-то пришёл.
27: Пожалуйста.
28: Вот есть такое дело, значит, начнём именно с этого.
29: Точнее даже сделаем так. Сейчас полсекунды перерыв.
30: Самые полсекунды. Я через полсекунды, полминуты. Я сейчас вернусь через полминуты.
31: Не знаю, чайный формы потише описывается то продуктивный так, то оно так, а сучасна мова джава скрипт c не та мова, яка так легко.
32: Транспилируется машин.
33: Вы значения и там её безлич додатковым моментив Бо ситуаций Колы все стае с ног с головы на гору. Сегодня мы
34: C подивимось так?
35: Машине машинное представление представления, машине представления дякую пив холины я знаю на пив холины через пив хвылины я заявляюсь, и мы починаем.
36: Добрый вечер и тебе добрый вечер. То почему?
37: Проще и демо. Так это нам, это, это, это нам потребуется для for я заранее подготовил тут все необходимое а я покажу вот здесь.
38: Да, вот это сейчас я сделаю это все немножко крупнее, чтоб было виднее. Вот суть вопроса и суть того тезиса, о котором мы говорили, заключался в следующем он
39: Касался ситуации, при которой в том случае, когда мы имеем
40: Некоторый идентификатор, вот он у нас, который связан с каким-то большим рай, неважно с каким большим небольшим, не принципиально.
41: И наша функция, которую вот в данном случае я её назвал тайтин, результатом работы нашей функции возвращается новая функция. Если вы ориентируетесь в языке javascript, то вы
42: Знаете, что внутри тела этой самой новой функции у нас должен быть доступен, доступна ссылка на идентификаторы, функции родителя.
43: Как следствие, наша, наш the array, созданный на 1000 элементов, должен быть доступен из функции, которая возвращена при помощи нашего условного такого конструкт.
44: Как следствие, мы получаем ситуацию, которая формально такова, при которой определённое количество ресурсов, а чем больше наш этот рай, тем большее количество ресурсов будет залочено до тех,
45: Пор, пока вот та функция, которую мы вернули, будет существовать сама по себе. Одновременно с этим мы можем находиться в ситуации, когда код возвращаемой функции вот наша
46: Наш идентификатор зе Хоу, я его так назвал, почему Хоу потому что ho ho ho
47: Код нашей этой функции никаким образом напрямую не связан с нашим идентификатором.
48: Определённой в родительской функции, который связан с вот тем самым большим объёмом данных.
49: Когда-то, очень давно, на Заре появления языка javascript на Заре появления в 8 как того, что начало очень эффективно и быстро исполнять этот java script код была история, и она полностью отвечает.
50: Временной спецификации, при которой пока существует наша ссылка на нашу функцию в ho вот мы взяли идентификатор ве Хоу, выполнили функцию type thing наша функция type thing вернула дру.
51: Функцию. Теперь наша the Хоу это идентификатор, который ссылается вот на эту функцию одновременно с этим тело, которое код javascript, код, который содержится внутри этой функции, обязан
52: Иметь ссылку на все идентификаторы родительской функции обязан
53: Это означает, что идентификатор зе ар, ссылающийся на очень большой арай, на гигантский, который может быть заполнен каким-то большим количеством данных, несмотря на то, что он не используется.
54: Three этой нашей функции все также будет оставаться в памяти, занимать ту самую память, что
55: Плохо говорит о неквалифицированности нас как программистов, и так далее, и так далее, и так далее. Так было когда-то до определённого момента времени, когда внутри в 8 не была написана соответствующая
56: Оптимизация, при которой окружение для вновь созданного, вновь созданной функции для вновь созданного функционального кода содержит внутри себя только те ссылки.
57: Которые реально используются внутри этой функции, ещё раз подчеркну, согласно спецификации.
58: Пока существует наша функция the ho, которую мы вернули, вот эти все идентификаторы обязаны существовать. Такова спецификация, экма, скрипт, и так когда-то долго было и
59: Качественно работающие программисты на языке javascript должны были бы думать об этом, если бы они хотели, чтобы идентификатор варай больше не был бы связан с каким-то диким количеством данных, поскольку они не нужны, он должен был бы здесь перед
60: Этим написать что-нибудь типа вот так.
61: Но, как показала практика, языком программирования javascript пользуются чаще всего люди, которые не являются профессиональными программистами, которые не задумывались над этими проблемами и поэтому внутрь.
62: В 8 добавили специальную оптимизацию, которая связана с тем, что в момент формирования окружения для возвращаемой функции эта оптимизация старается убрать из этого окружения.
63: Несмотря на то, что это является нарушением спецификации, любой идентификатор, который не используется внутри самого самого тела этой функции, вот наш the array внутри здесь никак не использует.
64: И этот объём данных, который был здесь зарезервирован, будет какими-то сторонними механизмами, потом очищен. Вот в чем суть того вопроса.
65: Который задал человек, который я когда-то объяснял. Наоборот, я объяснял, а товарищ подписчик спросил, а каковы есть доказательства того, что это работает именно таким образом? И никак иначе? Вот я сейчас показываю наглядно специально, прежде чем
66: Перейдём к for редьюс и прочему наглядно показываю, как внутри в 8.
67: Происходит процесс, который в точности совпадает с тем, что я сказал, вот наш код дами джиэс.
68: Что мы делаем? Мы этот код запустим внутри окружения д. 8, то есть минимального окружения для исполнения джаваскрипт кода с использованием имплементации.
69: Google в 8 д. 8 в 8 тавтология такая ну зато зато красиво и отследим шаг за шагом, что будет происходить ну, для начала давайте просто проверим, работает ли вообще наш код как таковой.
70: Сейчас я сделаю здесь покрупнее, чтоб вам было видно вот она наша хо хо хо хо хо ар e1 вот она наша хо хо хо в хо ехо элемент, который был связан.
71: С 1 элементом нашего арай выполняется все именно так, как и ожидалось, а теперь мы, воспользовавшись возможностями самого в 8, для отладки некоторым набором внутренних.
72: Отследим, существуют ли ссылки на определённые части этого окружения, которые связаны с нашей функцией. Что мы для этого сделаем? Мы для этого запускаем. Д. 8.
73: С параметром allow.
74: Syntax правильно, с параметром shell and syntax это параметр, который разрешает использовать теперь в javascript коде, некоторый набор дополнительных команд, позволяя.
75: Получить доступ к внутренним структурам в 8 Шёл означает, что после завершения работы скрипта не нужно завершать работу всего д. 8, а вывести привести нас в состояние.
76: При котором мы можем вводить дополнительные команды и непосредственно указываем вот тот самый наш скрипт дами джиэс. Вот он, наш скрипт дами джиэс, который выглядит сейчас вот таким вот образом. Напоминаю, сейчас он работает. Логика этого скрип
77: В следующем есть некоторая объявленная стрелочная функция type, thing, внутри которой заявлен арай на 1000 элементов 1 элемент этого арая объявлен как.
78: Строковое представление вот это он нам в принципе не нужно, но просто я его для наглядности здесь поставил, чтобы было видно в окружении мы это потом увидим. Потом у нас есть некоторый элемент, который связывается
79: Оказывается, связан с данными, которые связаны с 1 элементом нашего арай наша функция type thing возвращает другую функцию, внутри которой присутствует код консоли лог хо хо хо ты ты.
80: Ты вот наша функция вверху.
81: Вот мы оказались внутри.
82: Окружение, д. 8.
83: 1, что мы для себя должны сделать, чтобы убедиться в том, что у нас все в порядке. Вот мы берём наше Хоу, его выполняем и видим, что оно работает именно так, как нам требуется.
84: А теперь мы воспользуемся дополнительными командами, описывающими, позволяющими заглянуть под капот работы в 8, для того, чтобы проследить, что происходит, первейшая из этих команд, с которой все начинается, основополагающее это.
85: Команда дебаг принт дебаг принт начинается со знака процента.
86: Скобка открылась, и мы указываем идентификатор, про который мы хотим узнать. Тот самый дебак принт, получили целую кучищу разной дополнительной информации. Что это за информация, как ей пользоваться. Это я рассказывал много раз.
87: Других наших трансляциях. Смотрите, канал сф джис, вкладка подкасты, вкладка, инструменты и так далее. Вкладка производительность, там об этом очень много. Нас сейчас же волнует только 1 единственная строка, которая называется контекст.
88: Контекст, где указан адрес памяти, в котором расположен контекст исполнения текущей функции.
89: Чтобы посмотреть, что находится по адресу в этой памяти, нам для этого нужно воспользоваться 2 командой.
90: Ой, ёкарный бабай.
91: Так, друзья.
92: Вот это да. Так, извините, сейчас мне нужно будет прерваться на полминуты. У вас сейчас пропадёт трансляция у всех, и я через полминуты вернусь.
93: У меня иногда такое бывает. Это большая проблема ноутбуков dell. Вернусь через полминуты. Не расходитесь.
94: Сейчас я вернусь в прямой эфир.
95: Так.
96: Алло. Алло. Если кто-то там сидит, это не, не, я про, сейчас обращаюсь, я сейчас обращаюсь к этим, к товарищам, кто-то там, я про сейчас так, судя по
97: Меня видно и слышно это прекрасно, сейчас я возобновлю все, как было.
98: 1 минутку. Так, так, так, так, все, отлично. Это запустилось маленькое лицо, плюс десктоп запустился. Ага. Единственное, чего у меня сейчас нет.
99: Это моей среды видно, слышно? Да, сейчас я перезапущу свою среду, о чем мы говорили?
100: Какая у вас ос? Я с 98 года пользуюсь только линуксом. У тебя получается хайв ос, судя по логину, в терминале? Нет, хайв это у меня просто название моей машины. А у меня ли
101: Все, больше никаких дополнительных вопросов нет. Возвращаемся к нашему.
102: Позже к нашему даме, я его сделаю чуть крупнее есть и возвращаюсь теперь к тому, чтобы показать, как это все работает экран.
103: А Выбач, Выбач точно. И расскажи какие-то дистрибутив линукса. Сейчас распи хвалынку. Так, экран, экран. Где мои? О так, Ота.
104: Так, оце, так, оц, так, оце, так.
105: Вжух.
106: Так, так, так, так, гарно, ц, я правлю на 4, чтоб она, меня не заважало. Дистрибутив дистрибутив. Я пользуюсь по историческим причинам уже.
107: С Бог знает каких времён, не знаю с каких, с, не знаю, 12, 13 года дистрибутивами, которые собирает команда кубунту, кубунту. Это реплика от убунты, которая связанная с кад.
108: Так исторически сложилось.
109: Вот теперь перейдём к сути. Ну а само окружение, которое сейчас вы видите вокруг, почему я очень сильно люблю кде, потому что это среда, которая позволяет
110: Мне настраивать это окружение и программировать и апплеты, и виджеты, и внешние отображения, так как я хочу там миллиард всяких возможностей. А самое интересное, что миллиард этих возможностей доступны из обычного джаваскрипт, то есть я могу
111: Вот эти все мои штуки, которые здесь настроены с окнами, с переключениями, с управлением, жестами, это все. Я пользуюсь внешним апи, которое пишется на языке javascript, что очень, очень становится удобным, когда мы совмещаем 1, 2 и 3.
112: Так, кто-то там захотел ещё присоединиться. Вот я их всех, всех присоединяю. Возвращаемся назад.
113: Так, переключаюсь теперь на экран. Прекрасно, прекрасно, прекрасно. Есть, есть, есть. Отлично. И теперь перезапускаю нашу.
114: Нашу демонстрацию.
115: Нам для этого понадобится.
116: Д. 8 с разрешённым.
117: Найти синтакс
118: С ты не пришёл, папку дивно дякую тебе.
119: Ось, и нам нужен тот самый наш скрипт дами джиэс. Вот про который мы говорили сейчас на всякий себя случай себя перепроверю. Я перепроверяю, есть ли та самая зех? Да, она работает.
120: Теперь повторяем весь этот набор операций, про который я рассказывал при помощи команды дебаг принт.
121: Я визуализирую для себя на экране целую кучу дополнительных структур, при помощи которых в 8 описывает работу нашего джаваскрипт кода, в данном случае функции the hawk.
122: Который я создал. Нас волнует сейчас контекст, а именно адрес в памяти того самого контекста. Для того, чтобы увидеть, что находится по этому адресу памяти, мы пользуемся дополнительно.
123: Функции дебак не функции там команды нет. Это все-таки функция print, только в данном случае с приставкой птр, потому что мы используем не идентификатор, а мы используем конкретный адрес в оперативной памяти и
124: Получаем расшифровку и в том случае, если внутренняя отладочная структура в 8 распознает по этому адресу какую-то реально существующую структуру, он нам показывает всю возможную информацию, которую он может
125: Нам продемонстрировать относительно этой самой нашей структуры нас волнует в 1 очередь элементс, то есть то, что внутри этой структуры описано, согласно включено в это наше
126: Окружение, какие идентификаторы включены в родительское, это то самое наше окружение, тот самый контекст, который мы сейчас разбираем. И мы можем здесь обратить внимание, что у нас здесь идут адреса, где есть некоторое описание функшн скоуп.
127: Следующий адрес нейтив контекст это ссылка на контекст, вышестоящий по отношению к этому следующий адрес описание некоторой некоторой некоторых данных строкового типа yo ho.
128: Следующее ссылка на описание некоторых данных строкового типа с описанием ар оо о 1.
129: Вернёмся к коду нашей функции мы видим вот она наша a e1 вот она наша ехо, вот наш этот элемент, который у нас ссылается здесь и здесь, и мы среди этого.
130: Его перечисления не видим никакой ссылки на наш оригинальный the array.
131: Как убедиться в том, что на самом то деле мы смотрим в правильную структуру, и в том случае, что если действительно the array используется, то он должен был бы появиться в этом нашем контексте очень просто мы берём тот же
132: Тот самый консоль лог, где у меня здесь есть перечисление 2 этих параметров. 1 для контроля, который всего лишь навсего связан со строковыми данными. 2, который ссылается на 1 элемент. A3 параметром мы ради интереса берём и добавляем наш
133: Оригинальный the array. И теперь повторяем всю ту же самую манипуляцию, где сначала мы смотрим.
134: На наш se ho находим адрес контекста, теперь он находится в другой части оперативной памяти, распечатываем для себя при помощи команды деблок принт птр.
135: Содержимое этого контекста и обращаем внимание на то, что теперь присутствует дополнительная
136: Ссылка внутри этого контекста, которая ссылается на тот самый gs рай.
137: То есть давай так, давай и так номинальное.
138: Для финальной, скажем так, запуску всего ничего тому, що мы зараз перегляда саме контексты, топто структуры.
139: Yaki описывают саме те, що потрибно знати коду або ручью джава скрипт ще до того, яким чином выконувании ся.
140: Внутри, в середине яки находится в середине. Мы зараз не вимос, мы зараз не дивимося на сам код. Мы зараз вот нашими командами, наприклад, вот дебаг при
141: Мы дивимось на внутришние структуры в висим, яки описуют все необхидмо для того, щоб Цей код выконовал, мы не дивимось на сам код. Мы.
142: На службових структур яки необидно.
143: Яким треба сноваты для того, щоб джаваскрипт код выконовал и kolya мы беремо функцию зе Хоу.
144: И ось. Я за.
145: Ось выучи команду debug print запросив, вывести мне зовнишння все тёще знае ви.
146: Службов про цю функцию воно мени и продемонстровала безлич додатковым параметров яки на ривне самого в висим иснуют для того, щоб код функции.
147: The ho выконовал самое тут мы можем знайти и сам код вот наприклад сорс код або найти, байт код, або найти, найти код яки було.
148: Оптимизована-таки таки инше то безлич таких инших зараз нас хвилю не c зараз нас хвылюетэсь уация де оригинальная функция type thing мае идентифика.
149: There are, який посылается на длиннючий арай, який занимае мисце у оперативной памяти.
150: Наша функция type thing, поверте функцию.
151: Яка тому самому яка такос ссылается на тей самый арай, як на идентификатор у функции яка створила нашу функцию яку мы повернули.
152: И мы зараз дивимось не на код, не на щось таке инше мы дивимся, лише на контекст, що що сбережено сбережено, як це?
153: Що зараз у поточному контексте поточной функции иснуе так як щодо чего можлыво было бы.
154: Обратиться, вернуться и вось, перше, шо я роблю, я прошу в висим де бак принт.
155: The ho выкороти функцию, особливо функцию дебаг принт тому, что я вказывала конкретный идентификатор зе Хоу вот он у меня вот тут было створно его
156: Ось воно мени вывело додатково информацию без информации менее хвилю Лёше контекст топто що в рамках функции выхоу у структуре яка описует контекст.
157: Функции зараз и диснее.
158: Тут я Бачу адрес оперативной памяти ну дисно, Бо то в здравом уме тут нема ниякого идентификатора, це якась внутренняя структура для того, шоб щоб побачити що це за внутренняя структура.
159: Иснуе додаткова команда дебаг принт птр топто спробуй мени расшифровать якусь додатков информацию по конкретному.
160: Оперативной памяти. Вот я его скопировал, а, 0 65 Останний. Вот он.
161: 8. Показав, що вин нашёл по цему адресу оперативной памяти, но без информации де головне для нас те, що ко
162: Поле, элементс нуль 1, 2, 3, 4 the null c посылание на опис самой функции 1 c. Посылание на родительский кон.
163: Текст Батьковский Батьковский контекст 2 c. Посылание на то есть ты самой джесс арай с десятью тысячами элементами 3 это посылание на строку йоу Хоу вот.
164: Наша строка вот Максим, а шо мы перейдём по птр птр, по их адресах мы побачимо, вот и все элементы так, summer так топто девиться у нас.
165: Native context 302. Я ещё давайте подымаемся, прежде чем мы распечатаем то, что произошло, чтобы это было очень интересно. Ну как бы подтвердило, закрепило у нас в памяти, что происходит. Вот наша тайп синк, это fun.
166: Функция, которая находится в каком контексте
167: Вот смотрите её сейчас очевидно, что в глобальном глобальном глобал энвайрмент правильно внутри, когда выполняется и возвращается функция, вот эта наша анонимная функция, она находится в контексте функции.
168: Typing. Следовательно, поскольку мы ориентируемся в языке javascript, то мы помним, что контексты это цепочка от 1 к другому, от 1 к 3 кто кого как породил. Чем я тебя породил, тем я тебя и
169: Убью. Вот эта вот функция наша тайпинг, она на, она имеет ссылку на родительский контекст, который является глобальным. Вот эта функция, поскольку она порождена внутри тайпинг, она имеет ссылку на контекст, который связан
170: Непосредственно с typing и так далее, как следствие. Поскольку мы знаем, что type thing находится в глобальном окружении, то это означает, что native context, вот этот адрес, он должен будет ссылаться на структуру, которая описывает глобал.
171: Объект глобал инвайромент, и мы себя можем так проконтролировать. Мы можем написать дебаг принт птр, передать сюда этот адрес и убедиться увидеть весь тот на
172: Бор типичный набор элементов в глобальном объекте, который обычно у нас присутствует в тот момент, когда у нас инициализируется глобальный объект. Вот они наши аплай, резон 16 array и так далее, и так далее и так далее.
173: Улавливаете?
174: Все зразумил. В принципе, ты основный тейк. Пока ещё моего тейка я ещё не закончил. Я хочу на примере показать. Просто был параллельно задан вопрос, который я хотел продемонстрировать. Вопрос был очень правильный. Типа, если вот это у нас определённый адрес,
175: То, воспользовавшись дак принт птр, можем ли мы увидеть информацию по этому адресу? Да, можем и на примере как раз ссылки на глобальный контекст, который здесь вот и определён. Я продемонстрировал, что это именно так и есть. Мы можем взять любой другой адрес, который
176: Описывает происходящее и увидеть дополнительные структуры, которые описывают, например, в этом случае они будут описывать в памяти в определённом месте, в куче, каким образом в 8 сформировала тот самый
177: Debug print птр тот самый наш арай на 1000 элементов обратите внимание 0 элемент холл дырка 1 элемент ссылка на
178: Строку, а я обращу внимание, что вот по нашему коду, здесь я специально для 1 элемента его связал со строкой. Вот она и целая куча дополнительной информации, которая описывает, как этот объект существует.
179: И в каком формате он сейчас существует для в 8 описывающий этот рай?
180: Позвольте встрять. Ты че, конечно, это покажите код, пожалуйста, исходный. Вот, да, мне вот стало интересно 2 нюанса. Вот когда мы добавили за a, в консоль лог,
181: То он сохранился для в 8, там принт и так далее. Так, так, так, в контексте совершенно верно. Следовательно, есть какой-то такой базовый парсинг, вот тело функции, которое там будет возвращено, да, да. Или
182: А если мы засунем ещё 1 функцию сюда такая вложенность будет и в 8 тоже придётся в неё лезть. Вопрос очень интересный, точный ответ на этот вопрос я дать не могу. Насколько глубоко он залезет внутрь, могу
183: Попытаться спрогнозировать, спрогнозировать на основании того, каким образом работают определённые оптимизации в в 8. Я знаю, что в в 8 большинство оптимизаций, которые связаны с вложенными контекстами, не заглядывают.
184: Дальше 1 уровня. Поэтому я предполагаю, что если здесь будет далее ещё 1 дополнительный уровень вложенности. То есть, если мы вот здесь будем возвращать ещё 1 функцию, если я правильно понял вопрос, да, если мы вот
185: Здесь вернём ещё что-то. То, что произойдёт дальше, нужно исследовать, насколько предполагаю, что может произойти история, при которой в том случае, если окажется ещё 1 уровень вложенности, то оптимизация уже не сработает с этим.
186: Нужно разбираться. До этого мы можем дойти после того, как сейчас просмотрим основную цепочку событий просто для себя, чтоб после этого проконтролировать. И вот последнее вот интересно стало b8, он запоминает.
187: Идентификаторы, которые вот непосредственно в этой области лежат, так сказать, если мы, например, создадим блок statement в нём, а ещё какой-то array, он же никак не сохранится, ведь, да, для в 8, в 8 работает таким образом, что он сохраняет абсолютно все.
188: Идентификаторы в рамках 1 1 кода, 1 функции. Блок стейтменты, он игнорирует, но это если говорить об этом. Если говорить, опираясь на спецификацию, то вопрос совершенно правомочен, потому
189: Потому что с точки зрения спецификации у нас на каждый блок стейн должен, должно создаваться отдельное окружение. Отдельный инвайромент, в котором должны были бы отдельно храниться эти идентификаторы. Это если говорить о спецификации, но конкрет
190: На в. 8 игнорирует эту часть спецификации ради производительности и оперирует только кодом функции, телом кода функции.
191: Как он решает эту проблему, он решает её очень просто как только объявляется следующий блок в том в том случае, если внутри блока появляются совпадающие имена, он этим именам внутри себя, внутри своей структуры добавляет единичку плюс единичку.
192: Плюс единичку, то есть, иными словами, в 8 в истории, при которой у нас вот здесь, например, есть лет, а равно 1, а здесь у нас будет блок стейтмен, и здесь будет лет, а равно 1 то внут.
193: 3 байт кода. Мы можем это потом посмотреть, если интересно, вот это, а это будет иметь ссылку на какой-нибудь внутренний регистр, там, например, р 11, а это, а будет автоматически иметь регистр р 12 плюс.
194: Единичка плюс единичка, плюс единичка для того, чтобы не создавать никаких дополнительных структур в виде этих самых контекстов, но при этом разрешить проблему с let const декларейшн.
195: Вернёмся ещё раз к сути, к сути нашего примера, и повторю я его сейчас с самого начала, чтоб стало понятно, о чем идёт речь. Итак, код вложенной функции, которая возвращается внутрь, вхо содержит внутри себя ссылку на зар. Ещё раз.
196: Посмотрим на этот самый war я использую дебаг принт the ho вижу целую кучу информации, Ровно точно, также я мог бы воспользоваться дебаг.
197: Print птр, если бы точно знал адрес памяти, где лежит эта самая функция. Сейчас я знаю этот адрес. Вот он. То есть если я повторю это, я на всякий случай поясняю, чтобы было понятно, что
198: Вот, Максим, а если мы имеем там the array равно, ну и все равно его вы, ну в console выведем поп, не пропаде, пропаде топ, то ни.
199: Сам идентификатор зе арай будет сбережено. Алле. Структура яка описует, ты самый великий array будет знищено. То есть, будет все равно. Ну, так. Угу. Я там.
200: Я и говорю с самого початку до того момента Колы зявилася ця оптимизация в висим программист який разумив що вин робе ему было бы потрибно зараз я продемонстри що зробити так.
201: Демонстрирую дебак принт по адресу я вижу ту же самую.
202: Целую кучу. Набор всякой разной дополнительной информации по поводу нашей функции. Ровно точно такую же, как когда я вызвал дебаг принт, просто дебак принт ориентируется на существующие идентификаторы, которые есть, а debug print
203: На конкретную область оперативной памяти после вызова дебак принт я уже точно знаю адрес моей функции. Могу ссылаться на неё через этот самый адрес и увидеть Ровно тоже самое. Теперь нас интересует контекст. Вот он, наш контекст.
204: Я прошу через debug print птр де бак принт птр.
205: Показать содержимое этой самой структуры. И я опять же вижу описание структуры, которая описывает нашу функцию ссылку на родительский контекст, ссылку на тот самый арай, ссылку на
206: И ссылку на are you 1 вот он, наш арай ар ю 1 и yo ho а теперь что происходит? Слушаю. А можно на весь array, а на п с нулевым индексом ещё раз.
207: The array так и вказати в консоль лог не весь, а с индексом наприклад, ну у Колы мы робим самому коде, а 2d вывести стоп стоп стоп, не разумею.
208: Ещё мы хочем побачить добав индекс добав индекс, а вот тут да, да, будь ласка на прикладу, ничего не изменится. А стрелочка?
209: Написать это, это все я объясню впоследствии. Я сейчас специально, очень часто повторяю некоторый набор операций, делая их вручную для того, чтобы вы, когда за ними сле,
210: Улавливали и запоминали смысл, если вы никогда этим не пользовались. А потом я покажу и объясню, как это можно автоматизировать для того, чтобы не делать этого. Естественно, руками. Это делать очень сложно, постоянно, просто в концу.
211: Которая появляется в оригинальном d8. Это не работает, потому что эта консоль, она максимально примитивно создана таким образом, чтобы не создавать никакого дополнительного шума при
212: Следований, программ. Однако это можно поведение изменить. И потом, если будет интересно, кто, кто захочет дальше с этим разбираться, я это продемонстрирую, как это можно сделать. Итак, ещё раз дебаг принт.
213: Наш идентификатор зе Хоу.
214: Опять же, это то, что я сейчас показываю, это я специально вручную каждый раз шаг за шагом внешне вам это визуализирую, чтобы вы видели, как это происходит. Естественно, весь этот процесс можно автоматизировать для того, чтобы не каждый раз
215: Вводить это все руками дебаг принт птр наш адрес контекста, и мы снова видим ссылку, которая сохранена на наш оригинальный арай несмо.
216: Смотря на то, что мы указали всего лишь навсего индекс. Почему? Потому что язык джаваскрипт устроен таким образом, что вот это ничем не отличается от ссылки на весь array. Это всего лишь навсего нужно воспринимать как некоторую внешнюю
217: Абстрактную функцию, которая принимает на вход ссылку на структуру данных и передаёт ей параметр 0.
218: А теперь что произойдёт, когда мы убираем этот самый параметр?
219: Согласно спецификации, несмотря на то, что этого параметра нигде в теле нашей функции не существует, окружение, инвайромент вокруг этой нашей функции обязано сохранить ссылку на этот наш the array.
220: Связано.
221: Есть несколько интересных случаев, при которых в 8 откажется от той оптимизации, которую я сейчас продемонстрирую. Сначала смотрим вот текущий случай, когда мы видим, что возвращаемая функция, несмотря на то, что она является
222: Дочерние по отношению к нашей родительской, вот этой, которая должна обязательно содержать ссылку на наш the array перестаёт иметь теперь ссылку на этот самый the array, и это именно делает тот самый в 8. Это то, о чем просил, что мне
223: Просил в качестве пруфа показать подписчик. Вот мы опять смотрим на наш дебаг принт.
224: The home снова возвращаемся к нашему контексту, получаем адрес этого контекста.
225: Debug print птр. Адрес и видим, что теперь в структуре, описывающей контекст существования нашей функции, the ho никакой ссылки на the array больше не существует.
226: И она будет собрана гарбаш коллектором или любым другим механизмом, который занимается обработкой всевозможных структур всех возможных событий, связанных с оперативной памятью как той, которой теперь эта структура не нужна, хотя на самом
227: Деле, согласно спецификации в 8 был бы обязан здесь вернуть ссылку на array, несмотря на то, что она нигде не используется, и это именно оптимизация внутри в 8, которая появилась где-то с пятна.
228: 15, с 14 года. До этого момента даже в этом случае мы бы здесь увидели ссылку на тот самый арай, а сейчас мы этого не видим.
229: Это мы проговорили вот тот процесс, который, про который я рассказывал выше. Очень часто в примерах в разных видео по поводу так называемых неправильно описываемых утечек памяти приводится пример.
230: Подобный этому типа у вас здесь сохранилась ссылка на массив. Вы вернули функцию, которая является замыканием по отношению к внешнему окружению. Во внешнем окружении у вас сохранился наш дарай.
231: На громаднейший аррай это было правильно с точки зрения это правильно с точки зрения спецификации, но неправильно с точки зрения современного в 8, который оценивает код возвращаемой функции, понимает, что внутри него не используется иденти.
232: Следующий идентификатор и исключает его из этого окружения. Это такая так называемая оптимизация. Раньше нужно было бы писать вот так.
233: То есть напрямую, как программист, говорить о том, что теперь the array не имеет никакого значения, потому что все необходимое мы сохранили в каких-то других локальных идентификаторах и
234: Эту структуру можно обнулить, но поскольку инженеры в 8 ездили по конференциям, ездили, ездили, ездили, не переездили, люди никак этому не учились, и память текла в конечном итоге они сподобились на то, чтобы придумать.
235: Алгоритм, который в большинстве случаев работает очень хорошо, исключая подобного рода структуры из контекста исполнения этой самой функции.
236: Вот все, что я хотел сказать в качестве показать и рассказать в качестве пруфа 1 части, о которой вот мы тогда заявляли в нашей предыдущей трансляции, на то шло магуда. Ну, мы отвлекались.
237: Потом у меня клавиатура зависла, ещё что-то, а потом же дай мне ж хлебом не корми, дай поговорить.
238: Потом же я несколько раз перепоказывали один и тот же самый пример и делаю это специально, намеренно для того, чтобы человек, который смотрит со стороны, видя, как это происходит, хотя бы глазами насматривал я, какие команды и как используются, если он
239: Захочет в будущем пытаться начинать обследовать или исследовать поведение определённого кода, используя механизмы, которые предоставляет в 8, для изучения этого самого кода, как можно посмотреть на количество
240: Разных структур, предоставляемых по той или иной для описания той или иной структуры, тут обследовать, не переобследоваться, где лежит, как лежит, какие алгоритмы используются, есть.
241: Байт код, нет, байт кода оптимизировано, не оптимизировано и так далее, и так далее, и так далее. Первые 2 простых метода исследования этого, это дебак принт и debug print птр.
242: Глянь чат в YouTube а чат в YouTube щас щас щас подавлюсь чат в YouTube ой, господи, так чат в YouTube.
243: Большая рожа с чатом чуч делюся.
244: Тик смотрю снизу вверх вопрос а такой финт нужно было делать с аргументами функции, если передавался объект или массив, объект и массив это одно и то же в языке javascript.
245: Ничем не отличается от объекта, кроме реализации 1 единственной внутренней функции массив это экзотик, обжект, то есть для оптимизации поведения и работы с арай или с object.
246: Внутри, в 8 и внутри любого другой, любой другой имплементации фундаментально нет никакой разницы.
247: То старую версию, но джс а в каком моменте они обсуждают производительность форфо и reduce ещё не обсуждали, сейчас перейдём к этому вопросу, это мы обсуждали 1 вопрос, который мне задали в telegram по отношению страте.
248: Предыдущей трансляции, где я рассказывал о том, как на самом то деле никаких утечек, так называемых утечек памяти в современном, в 8 в таких случаях не происходит. И меня попросили пруф. Этот пруф я сейчас демонстрировал на основании
249: Использование внутренних структур в 8, показывая, что автоматически подобного рода структуры, которые не задействованы в дочерних дочерних функциях, исключаются из окружений и, как следствие, собирается
250: Впоследствии гарбаш коллектором.
251: Уважаемый мурррыч, что произошло с вами на прошлой трансляции? Честно сказать, я немного испугался. Товарищ мурыч немножко болеет, и у него иногда случаются непрогнозируемые состояния.
252: Офигительного Афига, который приводит к тому, что он потом на некоторое время становится недееспособным. В результате приходится вот так вот себя вести. Ок, это мы вот на часок
253: Проговорили по поводу того 1 вопроса.
254: Извините, но вопрос был не про разницу арай и объект, а. С. Занулин м the array нал. Если бы это был аргумент функции, а. Менски, если бы это был аргумент функции.
255: Послушайте, когда вы какой-то определённый идентификатор связываете с null, то вы никоим образом не влияете на структуру, которая была связана с ним, с этим же идентификатором, перед этим он продолжает Ровно точно так же.
256: Существовать в памяти Ровно так же, как он существовал перед этим, и исчезнуть он из этой памяти может тогда и только тогда, когда алгоритм для себя примет решение, что ему необходимо освобождение определённой части памяти и он.
257: Решить, что вот эта структура, которая лежит в этой памяти, более не связана ни с каким другим идентификатором.
258: Здесь же вся, самая главная суть этого вопроса, который я сейчас демонстрировал, заключается именно в том, что идентификатора зе арай, описывающий наш арай, она связана непосредственно с окружением возвращаемой функции.
259: Он обязан лежать в памяти, при этом в 8 внутри себя содержит определённую оптимизацию, при которой, анализируя код дочерней функции, он понимает, что этот идентификатор не используется внутри, а следовательно,
260: Хранение этого идентификатора и связи с какой-то определённой структурой данных теперь не нужно.
261: Вот о чем я рассказывал.
262: А с занулением, если мы the array делаем равно null, то есть сейчас я включу вот так, если мы
263: Выполняем следующее, то наша структура, которая описывает контекст для нашей функции, все также будет содержать вот таким вот образом ссылку на
264: Идентификатора зе арай, но ссылка эта теперь не будет связана с вот этой структурой, которая здесь была описана. Эта структура лежит где-то в куче, если не существует больше ни 1 ссылки на эту структуру. И если
265: И вдруг понадобится оперативная память, то в 8 в процессе работы гарбаш коллектора, в силу того, что вот эта штука более не имеет на себя никаких ссылок, будет удалена и будет эта память будет использована под что-то другое.
266: Кстати, мы можем сейчас в этом увидеть, как глянь, глянь там c Менский, продолжи своё питание, ему все-таки Колы продаются аргументы, функции под в чат сейчас, сейчас.
267: Сейчас, сейчас, сейчас я быстренько покажу. Оц.
268: Там совершенно неважно, аргумент это или не аргумент, это все же работает, использует одни и те же принципы.
269: Это вопрос, видимо, лежит из того поля, где описывают
270: Вот где описывают, как передаются параметры в функцию по значению, по ссылке и так далее. Итак, сейчас я на всякий случай гляну ещё раз.
271: Тут больше нюанс. Можем ли мы сказать, что аргумент функции тоже является, конечно, можем аргументы функции, это и есть идентификаторы. То есть вот смотрите, какая штука вот наш. Так, да, вы говорите о том, чтобы передать зе,
272: Ray вот этот наш в качестве аргумента, правильно.
273: И вот здесь Тайпин, и как раз передать тот самый нью райт 1000 в качестве аргумента.
274: Ровным счётом вообще ничего не меняется для кода функции, для в 8. Все, что происходит внутри, этот самый варай это Ровно точно такой же идентификатор, связанный с контекстом.
275: Этот, кстати, вопрос говорит о том, что вы не до конца правильно воспринимаете то, каким образом работает язык джаваскрипт. Вот даже если я уберу отсюда вот, например, тот же самый нал. И повторю теперь все равно ту же самую процедуру.
276: Опять обращу своё внимание на контекст.
277: То вот она, та самая ссылка, как она и была для кода внутри функции. Аргумент, который передаётся внутри неё, ничем не отличается от любого другого идентификатора, вообще ничем есть разные.
278: Поведение, связанное с описанием ситуации, значение по умолчанию ещё каких-то разных других пограничных случаев. Но в общем случае это абсолютно одно и то же, если
279: Я правильно понял вопрос?
280: Доброго дня в Украине, Девина, тут чат про российского. Может треба зменит моу, хотя для того, чтобы наша трансляция на russia слава Украине, героям слава.
281: Можно яще? Ну, то мне что, до этого вопроса есть своё особенное мнение. Товарищам россиянам нужно будет платить репарации для того, чтобы им платить репарации, им потребуется зараба.
282: Деньги. Если я их научу зарабатывать деньги, они будут платить репарации. Это 1. 2 для того, чтоб виноват украинскою мовою её до техничных тем, яки стасуются само мовы джаваскрипт. Мне
283: Постийно практика, якой в мене немае я людина яка народилась и росла у Харькове, який её российско мовным городом мистом, и я намагаюсь вышиты украинскую.
284: Для того, щоб вильно вся на техничные темы, алё це дуже Важко одне дило говорите в попути, а инше дило рассказывать про якись техничные детали де.
285: По перше дуже Особливый словник, че до терминологии и по друге дуже.
286: Крайне, очень, очень нужно, крайне звычайно потребно названо, надзвичайно, да, надзвичайно. Потребно убирать термины яки максимально лучние, до того, про що я кажу.
287: Андрей Юрьевич, тоста ты не у тебя тут одни просят, чтоб ты говорил по российским, другие просят, чтоб ты говорил украински, понимаешь, как хорошо, когда все меня о чем-то просят.
288: Вот и все то зручно размовлять российскую. Алле. Я хочу. Научится говорить себе душу. Ты размовляешь тому тому. Я для выкрестов ей самый.
289: Выпадок як ситуацию Колы я можу спробовать, начится украинской так добре, шо ты це робишь. Я просто час бираешь материалу.
290: И раздираешь себе душу на те, что зараз це правда, но нет, ты даже думаешь российской оо.
291: Вид мене, щоб я выкорел дуже развинутый, як це словник и точный словник, ещё до того, якие термины я выкорел, якие слова выкорел.
292: Ты говоришь про техничны темы.
293: Пидир термини надзвычайных. Сам тому я часто впадаю вот такие в казус. Ну ладно, то-то пишли, значит начали мы в 8, 21, 10 осветили вопрос, который был
294: Связан с вопросом нашего редача. Очень интересная тема. Если кому-то интересно, мы потом можем отдельно посидеть и поразбирать, если вдруг кому-то будет интересно по поводу этих самых структур и каким образом мы, изучая эти структуры, можем получить какую-то
295: Для себя дополнительную информацию не про язык javascript, хотя и про него тоже, а про то, как непосредственно работает в 8, это очень любопытное исследовать тем, кого интересует тема реверс инжиниринга, то есть изучение.
296: Того, наоборот, не с фундамента к тому, чем мы занимаемся, с того, чем мы занимаемся к фундаменту. Раскручивая это в обратную сторону. Напишите, можем что-нибудь придумать, какие-нибудь примеры разбирать.
297: Что там дальше происходит по разным из этих структур?
298: Это мы разобрали. Теперь мы перейдём сейчас к тому, ради чего наша трансляция и создавалась. А чтобы мы туда перешли, мне нужно полминуты перерыва пойти попить воды, поэтому я
299: Сейчас включу вот такую картинку на трансляцию и полминуты перерыва, а потом мы перейдём к нашему фричу.
300: Тыкс, тыкс, тыкс, окей. Большая рожа, маленькая рожа, чат. Тут у нас ничего нового не добавилось. Отлично. Переходим теперь к сути в продолжении предыду.
301: Трансляции. У нас там возник разговор, который касался следующего а давайте попробуем разобраться, поковыряться и понять для себя, как в современном javascript, а точнее, не в самом.
302: Javascript, а в его реализации в 8 происходит работа, связанная либо с циклом for, либо Ровно с той же.
303: Решая Ровно ту же самую задачу в случае выполнения, например, метода фор, не например, а именно конкретно методов фор ич применительно к нашему арай, тогда мы начали потихоньку тогда в этом
304: Всем ковыряться и пришли к ситуации, при которой
305: На конец там трехчасовой трансляции начали делать выводы о том, что for each очень очень не догоняет до аналогичного решения с точки зрения цикла for.
306: Вот давайте сейчас быстренько постараемся повторить тот самый момент для того, чтобы ввести в курс дела. Сейчас у меня все правильно включено, да, все правильно включено, чтоб я показывал крупненько, крупненько у нас.
307: Здесь для нашего примера. То есть мы сейчас что сделаем, мы сейчас попробуем решить какую-то элементарную задачу, а именно посчитать сумму элементов массива с использованием цикла for, а потом посчитаем ту же самую сумму с использованием метода.
308: Ich применим применимую к тому же самому арай, наш идентификатор арай, связан с массивом, который содержит внутри себя 40000 элементов.
309: У нас есть функция мур мафор, которая принимает на вход.
310: Для подсчёта тот самый exotic тоже торай здесь мы, во первых, так сейчас мы это все уберём, чтобы сейчас оно нам не заважало, чтобы было поменьше всего мешающего.
311: Выполняем. Ой, простите, выполняем сначала очень простой цикл Прохода от нулевого до длинны массива элемента.
312: Складывая.
313: С накопителем.
314: Текущий элемент массива. Повторяем всю эту процедуру.
315: Сколько здесь у нас раз 100000 раз? Почему мы повторяем это 100000 раз? Потому что если мы сохраняем только сумму из 40000 элементов, то скорость исполнения этого кода настолько высока, что
316: Он выходит за рамки погрешности, и нам нужно создать дополнительную нагрузку, а именно 100000 раз повторить 1 и ту же операцию, чтобы увидеть хоть какую-то временную задержку, которую мы могли бы оценивать. Вот он, наш, наш цикл for
317: Вот сейчас мы его стоп секунду, это counters.
318: Да это не то немножко, это я уже на будущее заранее подготовил примеры, чтобы их не писать вручную. Вот наш фор, вот этот for нас сейчас волнует.
319: Да, да. Так вот он наш лимит, лимит линк. Та, та, та, да, да, да, да, все абсолютно верно. Вот мы сейчас берём и
320: Ага, мы здесь и находимся, и попробуем выполнить этот скрипт и посмотреть, сколько времени это у нас займёт для этого.
321: Я вызываю симпл кли эс аш.
322: Сейчас покажу, что это такое, и это у меня все лежит в ага тест for this редьюс и мы смотрим фор.
323: Вот он сейчас там крутит, крутит, крутит эти циклы в рамках производительности именно моей вычислительной машины.
324: Мы видим, что он потратил 9,3 секунды и посчитал какую-то сумму. Что такое скрипт симпл клио для тех, кто вдруг не знает. Я постоянно использую их это.
325: Очень простой в данном случае вызов.
326: С использованием юниковской утилиты для оценки потребляемых ресурсов от процессорного времени до памяти и многих других.
327: Simple кли это вызов сборки в 8.
328: Обновлённый до максимально текущей версии, с отключёнными всеми дополнительными дебаг функциями, то есть для того, чтобы создать условия с минимальными издержками на
329: Какие-либо дополнительные существующие эфемерные возможности внутри самого 8.
330: Если бы мы пользовались в 8 дебак, например, то цифра по времени была бы совершенно другое другая мы здесь, я здесь специально намеренно исключаю все возможные дополнительные издержки на существование каких-либо
331: Дополнительных расширенных возможностей.
332: А 100000 раз пробегать по фору стою дружиною говно тебе не выходим за лимит. Сейчас мы пойдём дальше шаг за шагом и как раз вернёмся к тому вопросу про.
333: Про который ты задавал тогда зачем я делал анд 0 x ф. И почему я этого не делаю сейчас я пока думал над этой трансляцией для того, чтобы это было интересно в качестве рассуждений я специально пока этот.
334: Момент вынес за скобки. Мы к нему обязательно сейчас придём. Вот мы 2 раз, 3 раз повторяем вычисление 1 и того же, для чего мы это делаем? Для того, что когда мы пишем на коленке на ночь глядя,
335: Какой-нибудь микро бенчмарк. 1, что для нас важно, самое главное, что для нас важно, чтобы на нашей машине, в наших условиях наш бенчмарк при некотором количестве повторений выдавал приблизительно одни и те же.
336: Оценочные характеристики для выполнения нашего кода. В данном случае нас, нас интересует время выполнения того самого цикла, не цикла, а скриптово. И мы видим, что здесь 9, 33, 9, 32, 9, 34.
337: Это приблизительно значение 1 и того же порядка, что даёт нам возможность предполагать, что, скорее всего, эта цифра не будет плавать дальше, а мы на неё можем опереться как на что-то нечто базовое, абстрактное.
338: Вот он, наш, этот for.
339: Вот он у нас посчитал эту самую сумму, как работает у нас этот цикл, этот скрипт форм. Можем обратить внимание. Вызывается эта наша функция замечательная. Да, да, внутри этой самой внутрь функции передаётся в качестве параметра.
340: Ссылка на арай, вот она передаётся. Дальше определяется лимит йод, итая, сумматор йод. Это у нас количество дополнительных повторов 100000 итая. Это у нас непосредственно складывание всех.
341: 40000 элементов. Суматр это у нас суматр, он в африке суматр. Возвращение. Можно писать вары прямо в самом форе. Можно мы сейчас к этому придём. Это 1 из Шагов, про который мы сейчас будем говорить, и
342: Обсуждать, потому что я уже несколько покрутил здесь разных Тестов, посмотрел в код для того, чтобы было интересно, мы к этому как раз сейчас и придём, с чем мы будем сравнивать. У нас есть 2 варианта сравне, 2 варианта кода, который делает тоже самое.
343: И мы можем получить время для того же самого, в 2 разных других вариантах кода. 1 вариант кода это reduce, которая делает Ровно тоже самое. Только мы используем редьюс. Вот наших 100000 повторений. Та же.
344: Самая функция, вот она, вот наша консоль лог, вот вызов этой функции, вот он, наш арай, вот 100000 повторений. Сумматор занимается тем, что 100000 раз вызывает редьюс по отношению к нашему арай.
345: Давайте посмотрим, что делает редьюс с точки зрения времени для выполнения той же самой задачи в том виде, в котором мы сейчас её представили.
346: 5 92 6, предположительно на 3 секунды быстрее, чем for.
347: Ну, судя по всему, время сильно меняться не будет сейчас.
348: Около 6 секунд на решение Ровно той же самой задачи проконтролировать мы себя можем по сумме, которую мы получаем, а в случае того, for который мы там написали выше, у нас 9 секунд на 3 секунды разницы интересно сделали себе галочку.
349: В голове, что оказывается, при реализации работы four. Вот в такой форме, в сравнении с reduce, вот в такой форме мы получили разницу в 3 секунды на
350: 9 секундах. Это больше 30%. И 2 важная часть, которая, с которой мы хотели бы сравнивать, с которой все, в общем то, и началось. Это наш фор ич благословенный, правильно?
351: А где он здесь, у тебя for each.
352: Это другие тесты.
353: А, нет, у меня здесь фурыч, тогда мы быстренько его сейчас напишем. А как его написать? Это очень просто. Нужно всего лишь навсего сделать копию редьюсер нашего.
354: Правильно, правильно. Так. И что в этом случае нужно нам будет сделать это вот в этом месте мы должны сделать
355: Вот здесь a for.
356: Ich и выполнение функции элемент.
357: Который?
358: Делает.
359: Сумматор.
360: Plus равно элемент, а редьюсер нам этот здесь не нужен.
361: Правильно.
362: Правильно. Вот он, наш сумматор, вот он наша. 100000 повторений.
363: Только теперь мы делаем это через обращение, и здесь мы это изменим на
364: Вот так do for each все, все, теперь перепроверим себя. Работает ли она с тем же самым успехом?
365: Так кто-то там к нам стучится.
366: Ой ой ой.
367: Что уже никто не стучится. Ну и ладно, я из за вас время потратил, а вы уже не стучитесь, а оно все считает и считает в случае for each.
368: Все считает, и считает, и считает, и считает, и считает о, кто-то опять постучался, пусть пока считает, а я опять приму запрос.
369: Принял запрос.
370: И все считает, и считает, и считает ужас, как долго считает, перепроверяем себя, может быть, ошибка какая-то array, фор, ич арай.
371: Элемент сумматор плюс равно элемент, сумматор, Рекун вроде бы все правильно, но что-то слишком долго уже 71. Есть ли здесь ошибка?
372: Ты зуппе че то он это я зупини зуппе в вот видишь, терминейт сигнал это я зупини. Сейчас перепроверим себя. Элемент сумматор. Вот он наш сумматор плюс.
373: Все равно элемент сумматор. Да нет, вроде бы все правильно написано.
374: Этот смотрит отдельно.
375: Почему ж так долго?
376: Попробуем ещё раз, но походу что-то очень сильно долго еше просто взяты. Цикл буквально на 10. Не, не, не, цикаво ты побачите. Вразумит?
377: Ну вот, долго.
378: Для
379: Тесту.
380: Не срахует, надохуя, надохуя, надохуя ахуе 197, да, и считает оно абсолютно правильно. То есть по какой-то причине при осуществлении именно вот такого тест.
381: Вот в такой форме это почему-то начинает занимать какое-то сумасшедшее количество времени, такое сумасшедшее количество времени, что я даже не дожидаюсь конца подсчёта в
382: Случаев ич.
383: На 10000 просто. Да же ж, я ж же зробив.
384: Нас уже, уже, уже было, мы же уже увидели, что она считает правильно. Вот порядок числа увеличивается Ровно так же, как он должен был увеличиваться здесь. То есть оно работает, верно? Только при таком большом количестве итераций. По какой
385: То причине идёт 0 в случае использования Фур ич и подобного колбэка это приводит к какому-то странному, любопытному замешательству, но это
386: Уже очень интересно. Именно ради этого мы сейчас и проводим трансляцию для того, чтобы сейчас шаг за шагом, разбираясь с определёнными ситуациями, понять, что у нас происходит. У нас сейчас есть 3 любопытных результата. Результат, который подсчёта фор
387: Для одних и тех же данных в случае вот такого кода результат подсчёта.
388: Это все нам пригодится. Результат подсчёта, связанного с кодом, где у нас он? Вот он, наш редьюс, который оказался почему-то на 3 секунды быстрее.
389: Хотя считает все Ровно тоже самое и результат подсчёта фор ич вроде бы точно таким же, как и у редьюс, кодом. Правильно? Мы же взяли копию редьюс, только заменили здесь редьюсер на for each и в.
390: For each
391: Ссылаемся на наш верхний сумматор. Правильно? Правильно. И имеем ситуацию, когда, при которой он уже считает 71 секунду. Для всего этого и никак досчитать не может. Очень интересно все это изучить, это поведение.
392: Посмотреть, что мы можем сделать для того, чтобы разобраться в том, что в данном конкретном случае с нами происходит, и прийти к определённым выводам.
393: Итак, вот он, наш фор, вот он, наш редьюс.
394: Разница в 3 секунды аномальная. Перепроверим себя. Вот он, наш редьюс, который мы выполняем, у нас должен выполниться что-то там около 6 секунд, 5, 28. И вот он наш фор.
395: Который оказывается вдруг 9 или что что-то около того.
396: 8 ну, разница те же самые 3 секунды.
397: Если здесь, в
398: Code той функции, которую мы разбираем. Вот это for наш в сравнении с нашим редьюс.
399: Какое-то фундаментальное отличие, которое могло бы привести к тому, что мы вдруг потеряли целых 3 секунды на форе. А ну, во первых, сделайте для себя галочку в голове, что, казалось бы,
400: Для с использованием цикла for.
401: Мы получили код, который не только не является выигрышным по отношению к редьюсер, но ещё и проигрывает минимум на треть. Хотя, казалось бы, внешне код безобиден, если я здесь заме.
402: Вары на let ничего совершенно не изменится или на консте можно просьбу давай.
403: Сначала вары поставить именно в тело этого фора самого. Давайте поставим ещё, конечно, посмотреть, конечно. Ну давай вот это, вот это мы убираем.
404: Здесь делаем наш var, тут не принципиально можно написать лет будет абсолютно тоже самое. И йод. Мы сделали что у нас ещё есть лимит. Давайте и лимит заменим на конкретное число.
405: Вот так есть, есть. И теперь давайте посмотрим, насколько изменится наше время.
406: Ой, на секунду увеличилось. Это может быть сейчас связано с тем, что, ну, не может на секунду так сильно прыгать. Это возможно, из за того, что у меня сейчас нагружена этот, трансляция сильно на
407: Нужен. Давайте перепроверим себя несколько раз.
408: 8 94.
409: 8 91. Че то больше стало. Вроде хотели меньше стало больше. Ну тогда с редьюсом запусти, чтоб посмотреть, там тоже увеличился этот время. Так, с редьюсеров. У нас же тут ничё.
410: Ничего не менялось, да? Ну давайте запустим так, сейчас, подожди, я подумаю.
411: Как разгрузить машину, что у меня сейчас все 4 ядра перегружены. У меня здесь vs хром, что хром хром. Это у меня google meet.
412: Так, сейчас ещё раз тогда понаблюдаю и потом приму решение насчёт этого.
413: Просто очень плохо, когда в случае результатов у меня результаты прыгают более чем на секунду. Это слишком большая погрешность, чрезвычайно слишком большая.
414: В таких случаях нужно увеличивать количество итераций и отбрасывать и считать погрешность, отбрасывать верхние нижние флюктуации. Самое плохое значение, самое большое. Ну, 5 92 6 28 разница.
415: В 3/10 секунды. Это, в принципе, конечно, допустимо, но не так, чтобы сильно.
416: Вообще не к слову будет сказано, но есть в отношении цикла for и while очень интересная легенда.
417: Что он быстрее while из за того, что в его теле идентификаторы все указаны, с которыми он работать будет. Дело все в том, что когда я смотрю в непосредственно в код, я смотрю непосредственно в тот код.
418: Который генерируется оптимизатором, а именно в машинный код. И там принципиальной разницы совершенно нет. Никакой. Мне здесь сейчас не нравится слишком большой разброс при каждом выполнении теста. Это означает, что у меня перегру
419: Нужна сейчас машина.
420: Там, там 111111 должное меньше 4 быть. Шо шо ещё раз. Ну, востоке ты art за 6.
421: Угу. На сам, сам пособе. Алгоритм выкания 1 и того самого. Потребно, чтоб оно выковалось за 1. Ты самый час близкий. А у меня зараз скаче час, дес.
422: 1 секунды туды сюды и це дуже погано у выпадку Колы менее 6 секунд, и 1 секунда пляшет туды сюды топто я зараз нахожусь у ситуации Колы.
423: И у меня так перегружена машина, що выпадку, тестовая килькисть ресурсов, яки бере на себе тест кожного разу ризна и мои тесты.
424: Ничего не варте тому, що дуже великий разброс, я зараз думаю, як це меньшите?
425: Зараз хвылыночку.
426: Что у меня тут жрёт у меня здесь жрёт хром за 15 о, ещё раз. Ну вот other за 15 и ну за за 15 я Бачу есть это значит что на 4 моих ядра
427: Происходит перезагрузка. Перезагрузка происходит потому что у меня все 4 ядра перегружены сейчас, по какой становится само. Так. Единственное, что у меня сейчас происходит высоконагруженное, это обс занимает 1 ядро и 2.
428: Ядро сразу же перегружает хром, который транслирует гуугл мид.
429: А вот куда деваются 2 других у меня ядра на все остальное, я пока не понимаю сейчас.
430: 68, 24. Вот эти, это вот у меня 112. Это хром, это, видимо, google, мид 66. Это мой обс. 27, 19, 15. Что у меня ещё здесь висит?
431: Да больше ничего.
432: Чат висит. Ну, чат я, допустим, закрою здесь, что я сделаю? Я здесь.
433: Это уберу. Тут все. Ничего такого нет. Камера хорошо. Работа. Себя дальше нет. Что ещё в самом, в самом вск?
434: Тут у меня ничего сейчас нет такого, что могло бы его нагрузить, и единственное, конечно, что осталось, это google meet
435: Что я могу сделать с ним?
436: Дело все в том, что в прошлой трансляции конфигурация была приблизительно точно такая же, и такой нагрузки не было почему сейчас он так нагрузился, вот что непонятно единственное отличие, нет никакого отличия другого.
437: Нет, все равно было тоже самое, как и тогда, даже сейчас. Система гораздо чище, чем тогда. Ладно, сейчас попробуем ещё раз посмотреть, что будет. Так здесь у меня все в порядке, здесь все в порядке.
438: Здесь все в порядке. Ну давай попробуем ещё раз.
439: Ооо, ну он хоть хотя бы сейчас начал выдавать цифры 1 порядка. Прекрасно. Для редьюсер. Прекрасно. Ок.
440: Так прелестно теперь наш изменённый фор.
441: Те же та же разница в 3 секунды, да?
442: Да, пока что да.
443: Что я сейчас могу сделать? Это я могу чуть чуть снизить точность и чтобы время не так долго ждать по 8 секунд. Так я сейчас и сделаю.
444: Вот он наш фор. Давайте снизим на порядок у нас. Подожди, если на порядок, то у нас будет нет, на порядок это плохо.
445: Интерес. Давайте попробуем. Просто интересно. Да, на порядок это плохо. Значит, будем считать так, пока цифры попадают.
446: В один и тот же диапазон. Этого нам достаточно, да?
447: Да, прекрасно. Здесь 9, там 8 91, и мы здесь, в нашем форе, поменяли тю тю тю тю тю. А теперь вернём для сравнения назад и посмотрим, насколько эти цифры изменились.
448: По сравнению с девятью секундами.
449: Они стали меньше.
450: Это никуда не годится.
451: Вообще, а что, если консту брать? Мне интересно стало? Нет, это оно будет иметь значение. Ты правильно мыслишь в правильном направлении, но при тех, при той точности, которую мне сейчас выдаёт.
452: Мой тест, это будет незаметно, потому что у меня такие сейчас происходят странные дикие скачки туда сюда. Я не могу понять, что происходит.
453: Что я могу сделать? Что я могу сделать? Что я могу сделать?
454: Так, а давайте я сейчас ради опыта сделаю следующее.
455: Просто ради интереса. Давайте я пока отключу дополнительную эту трансляцию с экрана тем, кто слушает google meet мне просто ради интереса, хватит ли этого.
456: Тоже не хватает.
457: Нет, стало хватать. Включаешь наш. Ну, я отключил трансляцию вам в google мид захвата экрана и сейчас вижу, что у меня
458: Освободилось достаточное количество ресурсов.
459: Сейчас попытаюсь посмотреть, что у меня теперь происходит.
460: Да у меня сразу цифры другие пошли.
461: Это получается, что
462: Че то заплющил гуугл мид.
463: Зачем-то так сильно. А ну-ка, ради интереса.
464: Ради интереса, что ради интереса повторить эксперимент вот такой.
465: Ну, разницы никакой не видно. Ну и не может быть увидено, если у меня флюктуации 2/10 секунды, такие изменения, они действительно имеют положительное влияние, но не на 2/10 секунды. Ладно, тогда я пойду по дру.
466: Плану.
467: Я не буду сейчас говорить об этих деталях.
468: А сразу перейду к самым основным, к существенным.
469: Интересно, интересно то, что, почему это так непрогнозируемо.
470: А я ты будешь показывать, что ты робишь шарит экран в YouTube и подаётся на в YouTube в YouTube же он и так шарится я YouTube то как раз и не отключал а господи, я в YouTube я в YouTube, я в YouTube.
471: Свою рожу показываю как да, я красавчик, никто об этом ничего не сказал, но это существенно ничего не меняет.
472: А может, и меняет.
473: Может именно поэтому, типа, что там он с камерой че то глючит. А теперь, ну, посмотрим тогда сейчас.
474: Кончался после того, как ты за тесто форич. Угу. Который там начал по 70 секунд считаться. Вот явно нагрузка. Нагрузка стала явно снижаться.
475: Может быть, на самом деле и obbs это какой-то, видимо, совместный фактор вместе с obs и google мид, потому что вот сейчас я переключился с большой рожи на захват десктопа, и нагрузка упала до 2 26.
476: Сравнению с тем, что было сейчас, мы подождём, посмотрим.
477: Это надо, наверное, если уж делать такие трансляции, чтобы с хорошей точностью относительно времени, это надо, наверное, делать захват со 2 ноутбука.
478: Чтобы там вот, допустим, обс работал, а сами тесты, или, или, или, или можно выкрест, вывать не time, ну, ей самой линукса, а
479: Java там уже есть и нано тайм, они, во первых, вообще не настолько точные, как time time. Это самая точная вещь, которая у тебя может быть в системе, потому что time тебе показывает реальное время, которое происхо
480: Ходило по затратам ресурсов конкретно в процесс в процессе выполнения этого приложения. Все остальные вещи это прыгание вокруг с костылями. Сейчас, я думаю, вообще
481: Можно сделать гораздо проще захват, и все здесь это происходит на этой машине, а сам по себе тест будет происходить на другой машине. Я же могу легко переподключиться там по тому же самому, ссаш, либо
482: К любому из ноутбуков, либо к какому-нибудь своему внешнему серверу и там проводить этот тест. И в том случае, когда мне нужны очень точные данные, и тогда 1 не будет нисколько влиять на другое. Ну, 1 хостинг же все равно надо
483: Настроить в 8, добавить, а то у меня там все есть. Просто я никогда об этом не задумывался. Раньше хорошая мысля приходит опосля, ну тогда я сейчас, и значит, что
484: Сейчас сделаю. Я сейчас.
485: А что я сейчас сделаю?
486: Я сейчас покажу, я сейчас покажу 2 момента, которые являются радикально влияющими на производительность, потому что они гарантированно снизят цифры там на треть наполовину без тонкостей, связанных как раз с варами, с
487: И со всем остальным это можно будет сделать в 3 трансляцию. Я заранее как раз подготовлю, чтобы уже говорить о тонкостях, а покажу просто прям критически любопытные вещи, которые, возможно, заставят подумать и взглянуть.
488: Со стороны по другому на свой собственный код. А все тонкости пока уберу из за этого, а потом на следующую трансляцию заранее протестирую как раз с тестами на удалённой машине. Че я раньше до этого не додумался? Ну почему? Почему? Потому что дурак, значит,
489: Смотрите, какая штука. Ваши предположения относительно Варов, которые находятся здесь или Летов, это все вещи, которые действительно имеют место быть, и они снижают нагрузку, но эту, но эту нагрузку они снижают не настолько
490: Чтобы это было прям существенно заметно на текущей в текущей конфигурации, в которой мы работаем. Она там снижает, может снижать её там на 10%, на 7%, но это реально имеет место быть и отдельно мы сделаем отдельную трансля.
491: Когда я переведу эти тесты на другую машину для того, чтобы освободить ядра для трансляции, чтобы не было таких значительных прыжков. А сейчас мы поговорим о вещах, которые прям сильно снижа, меняют соотношение 1 к другому.
492: Чтобы это было явно заметно не на Десятых секундах, а на прям количественных секундах. Вот у нас сейчас for это у нас в районе 7 секунд происходит, туда, сюда прыгают, там 3/10, 4/10, фиг с ним, если
493: Мы возьмём тот же самый тест с редьюсом для вычисления того же самого мы там получим. Сколько сейчас? 4, 33, 3 секунды разницы.
494: Перепроверим себя пару раз.
495: Целые 3 секунды разницы. Это аномалия. Почему такая аномалия происходит?
496: Сейчас.
497: 10, 15 секунд перерыв.
498: Я бы не было авантажен, лес сама. Ну так там.
499: Я сидел, думал, может бокс стейтменты вообще надо удалить или, например, этот постфикс оператор поменять на другой. Но это все микрооптимизация, что обидно. Плюс ща расскажу кильки.
500: Сама пропорции там было, а тут у нас по пере, по тестам, на мы маемо до 5, 7 процентв.
501: 3 секунды, а то если в коде где-то там, не знаю, находится этот оптимайз фанкшн, че то такое.
502: Так в том-то и суть, что в 8 в коде написано для таких-то вещей оптимизация, но ты их не знаешь. Не, я говорю там же, помню, мурыч как-то умел запустить функцию таким образом, чтобы её
503: Запуском в 8 оптимизировал до максимальной формы ну это через eval он бросал так я снова здесь и снова здравствуйте, давайте теперь посмотрим вместе сейчас я здесь разделю.
504: Наше окно вот так здесь у нас Лева фор. Можешь, может, на Мите пошаришь тоже. А, да, да, да, конечно, сейчас сделаем. Трансляции нигде нет, вообще нигде нет.
505: В YouTube есть, на YouTube есть мы, я понял сейчас google мид, сейчас я добавлю в google мид, опять расшарю стол, потому что теперь, чтоб не бороться за миллисекунды, я потом, а там за так-то вот.
506: Давится, бачите.
507: Явился. Так итак, у нас вот есть for и вот он, наш редьюс.
508: Разница между выполнением 1 и 2 составляет 3 секунды. При общем времени исполнения около 7, что является сумасшедшей разницей. Давайте
509: Думать, предполагать, какие мы можем совершить шаги для того, чтобы понять, в чем является, что является основной причиной такой Страшной разницы между 1 и 2. Ну, не может быть такой сумасшедшей разницы чуть ли не там.
510: В половину. 1 предположение, с которого мы зави, с которого я завис из за того, что начались там вот эти прыгать, наши циферки, заключалось в том, чтобы перенести определение наших иденти.
511: Фикатор внутрь цикла for эта штука действительно имеет место быть, и она действительно влияет на производительность, только она влияет на неё не в порядке секунд, а порядка в порядке Десятков секунд десяток.
512: Десятых доли секунды, когда я перепишу это же самое видео как-то по другому, чтобы снизить эту нагрузку, мы её увидим. То есть сейчас правильно? Мы бы могли, изучая текущее поведение, перенести
513: Наши декларации вот вот сюда и увидеть реальное изменение производительности в случае в случае нашего фора на цифры, которые были бы близки к туда сюда.
514: Плюс - 1 секунда, плюс - 1 секунда, но это совсем не 3 секунды, которые у нас происходят в а тоже можно шорты. А так.
515: Можно перенести так, самый так, цтш.
516: Это точно также приведёт к тому, что мы выиграем каких-нибудь 2 дополнительных Десятых в случае for сейчас я чуть чуть чуть сделаю его, блин.
517: Вот так вот так, чтоб было виднее.
518: Вот подобная штука при точном измерении позволила бы нам снизить разницу там с 3 секунд до 2 с половиной до 2 секунд, но это все равно какая-то чрезвычайно большая разница.
519: Что ещё мы можем постараться сделать для того, чтобы, а либо попытаться найти проблему, либо б, что мы можем ещё протестировать или каким-то образом изменить этот код для того, чтобы
520: Понаблюдать за цифрами и принять какое выдвинуть какую-то гипотезу и принять какое-либо решение по поводу этой гипотезы. А есть тут якуси пост, пр. Идентификатор там плюс плюс и плюс плюс.
521: Да, да, это не то направление, в котором следует сейчас задуматься. Угу.
522: А вы сейчас говорили про поменять? Плюс, плюс местами ведь, да, оператор этот.
523: Это сейчас не принципиально изменение того, каким образом работают вот эти счётчики сейчас никак кардинальным образом не изменит ситуацию. Ещё раз подчеркну, если вместо фора вот этого тэнкс поменять на о.
524: Не в ту, тоже, не в ту сторону б обратите внимание, что мы сейчас делаем. Мы, я сейчас даю намёк, мы 100000 раз увеличиваем сумматор на
525: 40000 элементов. Результат работы нашей функции, какое-то ебанутое запредельное число.
526: Пытаемся вспомнить все то, что когда-то рассказывал мурыч, о том, каким образом в 8 пытается работать с числами, с архитектурой, как он пытается в случае математических операций, если это возможно.
527: Местить эти числа в регистры.
528: Вот выражение каждый, если в мы здесь в качестве результата в нашем тесте получаем число, которое является числом, выходящим на намного за пределы того, что числя,
529: Что считает для себя в 8 смол интеджер, а это говорит о том, что у нас происходит процесс, когда мы сначала считаем, у нас происходит оптимизация для small интеджер, а потом, как только мы выходим за пределы.
530: Этого small интеджер у нас происходит деоптимизации и оптимизация теперь для подсчёта чисел, которые не являются смол интеджер, как бы мы можно
531: ***, как бы мы могли увидеть эту историю, эту историю мы могли бы увидеть, добавив соответствующие флаги к выполнению нашего скрипта для того, чтобы увидеть
532: Opt трейс де опт. И там мы увидим сразу оптимизация деоптимизации, оптимизация деоптимизации. Это нас сразу же должно начинать пугать. A2, если мы боимся, пока этих флагов не ориентируемся.
533: В них, чтобы мы могли сделать для нашего теста. Ведь наш тест в нашем тесте. Для нас сейчас самое важное это не процесс складывания чисел, а процесс оценки затрат, которые связаны с циклом for или
534: Процесс оценки затрат, связанных с reduce.
535: Каким образом мы можем нивелировать любую проблему, связанную с оптимизацией выходом за пределы этого числа? И тут я напоминаю предыдущую вещь мы можем каждую следующую сумму.
536: Образом ограничивать на верхний предел. Здесь я выполняю логическую операцию, которая связывает, которая полученную сумму обнуляет все star.
537: Биты больше, чем биты для 65535 ф. Ф ф ф ф ф и наша сумма теперь в рамках этого нашего теста никогда не выйдет за пределы какой-либо.
538: Цифры, которые связаны с теми самыми оптимизациями, с этими смол интеджер ми фиг его знает, какими интеджер ми и вообще не integer. И вот теперь, когда мы провели, добавили 1 очень про
539: Простой элемент для того, чтобы гарантированно сохранить накопитель наш в пределах того числа, которое гарантированно оптимизируется в 8 как small интеджер.
540: Мы можем повторить теперь наш этот самый тест, это я для for сделал, для for сделал, да.
541: И увидеть, как 7 25 сократилось до 4 73 2 момента поки ты тесте перше, мы принципово останни, часом не говорим про.
542: Не знаю, чего-то к нему, да, к нему мы вернёмся, потому что, друг, трансляция так просто для статистики. Ага, вот 3 раз я пихтою.
543: А можно ещё 1 уважение? Давай, конечно, будем у сумматор. Мы могли робиты у, промежу мину, а сумматор поставить на выше.
544: Тут ты маешь навозе, ну, сумматор поставить на ривень выше for подожди линку, неразумие, ось у нас сумматор, ось нас 2 for ось нас.
545: Наш сумматор шо шо с твоей думки треба было зробиты. Сумматор вот c оо выделены переименовать на.
546: Поперше Дёмина была бы заявлена в comme des
547: Сумматор.
548: Ну, выше на ривен, выше на river star. Тут называй номер строки. Давид, не так скажи в якому цикле джичи и.
549: Диктуй мне, шо писать, бачишь номер строки, говори у такой стричься, пишит инше.
550: Говори, куды мне курсор поставить.
551: Усть тут Дае створити.
552: Мину промежно, яку за допомогою чего?
553: Ну, у нас выходит, что тут 100000 раз помножить на довжину массиву.
554: Операции бывается. А там, где редьюс нас выходит, лише 100000 сумеет ни редьюс вывается. Самые, те самые. Редьюс не выходит за межи интеджер. А тут чему?
555: 1 выходить зараз у выпадку редьюс навпаки видбувается история Колы. Вот вот так вот, вот таким чином код абсолютно идентичный.
556: Reduce вось наш зовнешний цикл вот c наш фор, який мы тестем а c заместь фор наш редьюсер.
557: Ну, сумматор мы додаем меньше.
558: Оттуда у функции редьюсер здесь нутрах её функции редьюс видбувается сумма, сумматор там кино, вин працюе вот наш п так, сумматор сама.
559: Nina до Дае стае, дуже великою выпадку фор, а тут она не стае великою.
560: А можно разуми стоп, стоп, стоп, я зразумив про що демо я зразумив проще Демова, щоб ты дисно 1 и ту самую логику так c дисно моя.
561: Ce ne yo причиною, алё це дуже, верно, зауваження. Че до того, чтоб тест был максимально корректным. Речь идёт про що про те що?
562: У выпадку продюсера то-то ещё справа ведь, бывает, происходит ситуация, при которой у нас есть сумматор, который, поведение которого можно было бы описать следующим.
563: Образом, что-то посчитала, какую-то сумму и прибавила к сумматору в случае же цикла for о чем и говорил. Господи, мне неправильно говорить человек, я ж просто не вижу ни ников, не знаю как. Извини, пожалуйста, что я тебя называю. Человек какой же
564: Ты человек, ты чудовище, ты животное. Да, в этом же случае у нас происходит немножко другое. В этом случае у нас в случае цикло фор логика иная, у нас сумматор происходит после
565: Последовательно накапливается, накапливается, накапливается в том случае, когда здесь у нас происходит прибавление 1 большим числом, в то же время как здесь у нас происходит последовательное накопление, то есть для того, чтобы сделать
566: Идентичную логику вот этой то нам следовало бы иметь какой-то
567: War там я не знаю так пром.
568: Ой, ой, ой, ой, ой, вернись, я все прошу промежуточный сумматор.
569: Который равняется нулю. Правильно? Правильно? Этот как раз промежуточный сумматор. Вот здесь. Так, а как теперь правильно эту логику переписать? Дай-ка мы вместе подумаем, значит,
570: Этот сумматор, когда посчитался, тогда вот здесь вот как раз вот здесь
571: Даже правильнее было бы сделать. Так вот это промежуточный сумматор, правильно?
572: А вот здесь мы пишем сумматор плюс равно.
573: Промежуточный сумматор, а на следующей итерации, вот здесь как раз вот так должно быть промежуточный сумматор 0. Выполняется набор этих итераций по нашему циклу, где вычис
574: Появляется та самая сумма, а потом наш сумматор, который является внешним идентификатором, связывается с этим сумматором. Про это ты говоришь, мы записываем назначения про через плюс Дорин.
575: Там про сумматор плюс r доречи плюс Дорин максимально оптимизер висим вот ещё мы напишем вот ось таким чином всем також ориентует.
576: Так само як и плюс до ривне, а якщо у нас будет тут дуже, дуже складный вырос, то мы отр деяки, варианты, топто у нашему поточном.
577: Выпадку оо оци запис и оци запис.
578: Само поточному выпадку пикесли.
579: Будет абсолютно идентично тому, буде идентично саме тому, що вырос просты и вырос просты всем достаточно Разумный для того,
580: Об оце и оце до 1 1 одни такой самой последовности байт коду, щоб выкон логику яку мы тут описали. Алё якщо.
581: Бы у нас вот у цему выпадку было щось дуже, складне, мы ж можем зробыты, великий вырос, то тоди выникает варианты топто про чему я про c сейчас так долго говорю, щоб не склалося враж.
582: Нибы, то вот такое и вот такое завжды буде вытрачено кому килькисть ресурсив не завжды у нашему простому выпадку це так у инших
583: А выпадка оо вырос, кевин, буде дуже складный. Части може буты могут, может, бути. Инши варианты вразумило?
584: Линия 16 в пром сумматор тут да хай буде, ничё, ничего страшного не будет. Я вот как раз 3 части Колы, я зроблю трансляцию таким чином, чтоб мы бачи.
585: Само на Десятых Частина секунды я и поясню чему декларування таким чином, Бо таким чином мае.
586: На t сами десяты, а зараз мы говорим про секунды як такови топто я бы мог, сумматор наш, вот так вот зробиты вось таким вот чином.
587: Вот тут убрать цивар, и c было дебиля тих самых секунд, про яки мы говорим.
588: Ничего всерьёз не изменилось. 10, 10 Бо там 2/10 секунды мы орали, Бо выиграли.
589: Так вот это можно. Вопрос, конечно.
590: Мне вот стало интересно, вот проигрывал сначала фор из за того, что происходили деоптимизации там с сохранением чисел, да?
591: Если да, то что было бы, если бы мы сейчас пытались суммировать биг инт?
592: Во первых, 1, мы ещё не пришли к этому выводу, а мы сейчас остановились на том, что 1 из участников нашей нашей текущей трансляции попросил переписать общий цикл теста максимально.
593: Корректно по отношению к нашему продюсеру.
594: Это правильное заявление, потому что, с точки зрения редьюсер, у нас есть некоторое внешнее апи, которое что-то считает. А потом мы это, это посчитанное прибавляем к сумматору. Мы только подходили к тому выводу, о котором ты сейчас говоришь сейчас.
595: Перепроверим по времени логику, в которую мы добавили несколько дополнительных Шагов, связанную с тем, что теперь наш цикл for высчитывает именно промежуточную сумму, которую мы потом
596: Добавляем к сумматору.
597: И вернёмся к твоему вопросу, мурыч. Там на редюсере, тогда тоже надо поставить сумматор. Плюс равно. Я же говорю, что на нашей простой операции, на нашем простом выражении это не принципиально. Я могу
598: Могу изменить здесь на plus, равно это сейчас будет незначительное улучшение. Итак, что у нас тут с нашим циклом for?
599: Время 5 13. Ещё раз повторяем, чтобы увидеть, что мы не сильно пляшем.
600: Вообще, конечно, сильно пляшем 2/10, но посмотрим, что нам выдаст редюсер 5.
601: Ну, где-то приблизительно порядок мы оценили, сейчас посмотрим, что нам наш даст редьюсер.
602: 5 64 мы улетели в какие-то дальние дали.
603: 5 73 for нас, нас, нас. Наш начал резко всех выигрывать.
604: По факту мы вырешили проблему с. Произошло то же самое решение, что и предлагал с самого начала, к которому я хотел всех подвести.
605: Переописание этой функции более корректным способом, на который обратил внимание наш 1 из наших товарищей, привело к той же самой ситуации, при которой я предлагал ввести внешние ограничения.
606: Где бы наш сумматор, который я использовал с самого начала, Ровно точно так же не прыгал бы, как он бы прыгал бы здесь, то есть, написав более корректный тест. С точки зрения логики, мы
607: Бежали необходимости введения дополнительной процедуры, связанной с ограничением по верхней, по нижней, по нижней планке, по нижней планке. Того нет, не по, по верхней, по верхней стороне того.
608: Таким образом, у нас накапливается тот самый наш сумматор, в 8 сориентировался и теперь настолько хорошо оптимизировал наш цикл for.
609: Да что теперь у нас наш фор выполняется за 4 94, где-то за 5.
610: Приблизительно в сравнении с нашим редьюсеров, который перед этим, безусловно, выигрывал, выполняется за 5 и 5.
611: Прекрасно, прекрасно.
612: Прекрасно, прекрасно, что у нас тут в продюсере ничего не напутано.
613: Не, ничего не напутал. Ну вот, для, для красоты можно, чтобы увидеть.
614: Добавить только plus равно.
615: Существенных изменений быть не должно. Ооо не должно полсекунды, добавила как так-то?
616: Не нравятся мне эти скачки, потому что такие большие изменения в цифрах между 1 и следующим это, конечно, вообще никуда не годится.
617: Кстати, любопытно, а что будет, если мы вернём то, что было?
618: Вот и все, что было. Вот и все, что было, ты как хочешь, это назови слишком большие прыжки между цифрами. Эти, эти цифры нельзя принимать за
619: Те, на которые можно опираться.
620: Тут можно только опираться на секунды туда сюда, туда сюда.
621: А на 10 секунды операция нельзя. Вы видите, что у меня между 5 и 6 и 6 0 9 0,4 секунды при общей цифре в 0 6 это погрешность запредельная, нельзя так считать.
622: Нельзя.
623: Тогда я, знаете что бессмысленно продолжать всю эту богодельню без точных измерений. Ну, потому что, ну, не эти цифры нельзя принимать, как те цифры, на которые мы можем опираться, у меня начинается
624: У меня погрешность между 1 и тем же измерением при выполнении 1 и того же скрипта составляет сколько? 25%. Это вообще никуда не годится. Это нужно по другому организовывать всю эту трансляцию для того, чтобы точно измерять все эти
625: Цифры. Факир был пьян, и фокус не удался. Тогда давайте сделаем следующим образом. Признаю, я признаю, что текущая трансляция во 2 её части
626: Является провальной. Я продумаю как по другому. В следующий раз просто вынесу все эти вычисления на другую машину, не на ту машину, в которой у меня идёт захват на какую-либо другую. И повторим все это тоже.
627: Тоже самое на той машине, которая будет разгружена, чтобы быть более объективным, потому что, ну вот сейчас, ну это никуда не годится.
628: Ну как можно 5 66 считать? И 6 0 9 0,4 секунды. Разница это вообще никуда будет. Разбираешься сам для того, чтоб, да нет, я разберусь сам. У меня есть и внешний.
629: Server очень мощный и другой ноутбук я просто посижу, потестирую на том, на 2, на 3, на 5.
630: Чтобы понять, как это было лучше всего, че я раньше до этого не додумывался, я не понимаю.
631: Поэтому простите, пожалуйста, что я занял ваше время, по крайней мере для 2 части оно совершенно нет. Во все, по крайней мере, был очень большой положительный момент, связанный с тем, что мы переписали.
632: Часть вот этого цикла, связанного с for более корректным образом, и он помог изменить, резко изменить цифру, которая происходила в 1 случае, во 2 это очень интересно в следующий раз для 3
633: Части этой же трансляции я обязательно это упомяну и обязательно это мы это повторим.
634: 1 часть трансляции была нормальная. 2 часть трансляции была полнейшим ужасом. Ну что поделаешь, нет мозгов. Считай, калека, если у кого-то есть какие-то вопросы по поводу текущего, всего происходящего, давай.
635: Сейчас их вместе как-то обсудим. Да, я подумаю, как это в 12 1 за Киевом регаются 24. Это ещё полтора часа до этого не проце. Просто шо ты будешь?
636: На сервера. Не не не c будет не сегодня завтра, завтра я планую 5 частину её до курсу, после 5 частыны до курсу я.
637: Планую зробити, но-таки тю трансляцию алле корректную уже.
638: Ты про c говоришь я. Я хотел сказать то будешь буду трансляцию. Так так так, я разума, шоб тебе я, зразумив, дякую.
639: У кого есть питания, что-то питания лилось с for each чему такие цифры велики были секунда, согласно плану моей трансляции, которую я сейчас пока.
640: Оказывал. Мы должны были от шага идти шаг за шагом, переходя от 1 части к другой части оптимизации, прийти в конечном итоге к равным цифрам и к очень небольшой разнице, связанной с for each самое главное для меня.
641: Апофеозом всего этого было подтверждение изначальной гипотезы, связанной с vs с передачей this туда внутрь, но это все нужно следить именно отсматривать именно на конкретных примерах.
642: 1 за 1, как я это думал, а из за того, что так как это у меня сейчас происходит с цифрами, как у меня пляшет, все это теряет смысл. Поэтому мы это переносим на 3 часть. И вопрос, соответственно, твой переносим на 3.
643: Часть в любом случае for each при всех.
644: При всех, при всех, как это при всех деталях, которые в конечном итоге мне удалось учесть, в любом случае всегда проигрывает, не проигрывает, как обычно, редьюсы производные от редьюсер или проигрывает, но не больше.
645: Там 5%, но это все нужно смотреть на примерах и очень интересно это смотреть на примерах, когда мы сами эволюционируем. То есть, как я планировал с самого начала эту трансляцию, что мы берём оригинальный фор, который был и шаг за шагом делаем
646: Определённого рода гипотезы. Проставляем там вары и так далее, и так далее. Исследуем 1 за 1, делаем предположения, смотрим за логами и приходим к эффективно самому эффективному представлению с точки зрения фор и самому эффективному представлению с точки зрени,
647: Не реюс и смотрим на сравниваем это с for each я только до конца сейчас не понял, почему меня здесь for each в десятки раз стал медленнее. Ну, может быть, по тем же самым причинам это нужно будет перепроверить, иными словами.
648: И давая ответ на твой вопрос, давайте дождёмся тогда 3 части этой же самой трансляции от этой трансляции последний кусок можно отрезать, оставить только 1 часть, а последний кусок я должен был бы придумать, как его правильно делать. Я его придумал.
649: Мы его сделаем послезавтра ещё маленькие питания. А шо ты по циклу скина до початку будет значении ни данному выпадку, ни.
650: Будут не интов, а стринги. И а яким чином мы будем их выкорел у нашем алгоритме. Ну, может, принтом выводить не, ни в коем разе по перше.
651: C операция взаимоди с яким внешним точением, Бо сам джаваскрипт нема нияких можностей кино на south, это у нас уже же буде за.
652: Онешним апи, а зовнешний апи особливо апи я к вам с input Бо аутпут це зовсим инше цифры. Топто вы?
653: Стрингов, що мы могли бы робити це ты пробу конкатенации, Бо не знаю, пошук якись, Бо нас у нас у данному выпадку в першу, чергу, хвылю.
654: Не стильки сама работа с элементами массива скильки поразумительно тому якка её ризниця у выпадку Колы мы цю работу творим завдяки циклу for Бо сори, завдяки, колбэк.
655: У for each Бо редьюс.
656: Ось що важливо, будь яка инша задача це вже не буде не про те, про що мы хотели бы поговорить, якщо я верно вразумив питание, зразумив питание.
657: Шейки седые.
658: Днём резюме перша Частина струму стрима была хороша, друга Частина 2, 2 половина трансляции была очень плохой. Ну, это прекрасный опыт.
659: Этот опыт позволит мне сформировать протокол на будущее, каким образом можно делать тоже самое или делать изначально предзапись всех этих Тестов, но это совершенно неинтересно.
660: Совершенно непонятно, правда это или неправда. Интересно всегда, когда вживую, как решить эту задачу. В общем то, абсолютно понятно. Нужно на той машине, на которой я транслирую эти тесты, не проводить, а проводить на любой другой удалённой машине. Причём это даже
661: Лучше можно иметь 2 и больше машин, там например ai 3 процессор или там ксенон ксион, который у меня там на сервере стоит и посмотреть порядок цифр, как они будут отличаться это даже интересней со стороны.
662: Вот такие дела.
663: Завтра вечером теоретически планируется, ну, судя всему, судя по всему, она и будет трансляция 5 части нашего недалёкого курса, правильно, 5 же там 1 hello.
664: Вот 2, 3, 4 часть, завтра 4 часть 5, потом следующая.
665: Все, тогда, если ни у кого никаких вопросов нет, предложений нет, ну кто не может или поругать за что-нибудь желания нет, то тогда давайте заканчивать, скажи.
666: Скажи, саш, скажи.
667: Это в теории, так, чисто в теории. Может быть, это на следующей трансляции будем оговаривать. Тем не менее, забавность вот у нас есть for each. Предположим, в 8 его пытается превратить в цикл, ну,
668: Все равно это самая логичная форма. А если мы случайно добавим в этот for each требование добавлять новые элементы в этот же массив, все оптимизации, все рухнут, да?
669: Громаднейшее количество, громаднейшее количество пограничных факторов, которые определяют, срабатывает ли какая-либо оптимизация или не срабатывает, как раз касается подобного рода поведения, то что-то то, каким образом я планировал.
670: Трансляцию с самого начала и как мы к ней постепенно переходили от кода к коду, была, было как раз 1 из способов демонстрации всего этого, когда с самого начала, если вы вспомните код выглядел.
671: Вот таким вот образом. И вот здесь были эти самые вары. Это приводило к тому, что создание оптимизации вот в таком вот контексте с в отличие от такого контекста
672: Меняла код, меняла код, который генерировал оптимизирующий компилятор. Меняла его настолько, что, ну, мы это в 3 части трансляции посмотрим. Меняла настолько, что мы проигры выигрывали в цикле for 2/10 секунды.
673: Иными словами, большое количество вот таких небольших маленьких деталей, деталей, подобной той, которую ты сейчас озвучил, могут приводить к истории, когда мы вдруг либо проигрываем, либо резко выигрываем большое
674: Количество секунд.
675: Общее правило самое простое общее правило, на которое можно опираться для того, чтобы выбирать, не делая серьёзные замеры.
676: Оценка, какие конструкции писать для того, чтобы не просесть по производительности, заключается в том, что чем меньше мы создаём дополнительного джаваскрипт кода, тем эффективнее этот код, скорее всего, является. Вот
677: Здесь мы.
678: Заранее создали 2 идентификатора, которые инициализировались значением 0, а потом используем эти идентификаторы уже внутри другого фор стейтмент, где происходит опять инициализация, связанная с нулём и
679: Непонятно, что происходило с этими идентификаторами выше в то же время, когда мы здесь эти идентификаторы не используем, а непосредственно внутри for statement декларируем, в данном случае не декларируем ну?
680: Пусть будет слово декларируем. Мы показываем в 8, что это те самые идентификаторы, которые нам были важны только для работы тех тела, того самого цикла, в результате чего он применяет более агрессивные оптимизации. Это просто как
681: Пример, который мы увидим там в 3 трансляции, когда будет более точные цифры.
682: Такие дела, кстати говоря, кстати, реально, у нас же war можно применять это несколько раз. По 1 и тому же идентификатору можно любопытный вопрос, упреждая твой вопрос.
683: Любопытное посмотреть, влияет ли это прямо на применяемые оптимизации. Прям интересно, что будет, если вот здесь мы напишем правильно war это я посмотрю прям сегодня после трансляции и оставим здесь war появится.
684: Эти 2 дополнительные, эти Десятых секунды.
685: И надо будет потом посмотреть непосредственно в код оптимизатора. 8. Ну ты же об этом сейчас пытался сказать. Офкорс. Ну вот, да, я это подчёркиваю тоже в том числе будет интересно посмотреть. Гляну.
686: Как он на это прореагирует? Если опираться исключительно на поведение, которое описывает спецификация, то разницы нет никакой, но между между поведением, которое описывает спецификация, и поведением, которое
687: Реализуется внутри в 8 бывает очень большая разница.
688: И вот последнее ещё, вот только сейчас задумался. Просто древний был для меня вопрос никак не нашёл никаких доказательств. Вот эти 2 и 3 часть вот этого определения цикла for это
689: Можно считать как тело цикла тоже его части составные, ты имеешь в виду? Или это другая? Ты имеешь ввиду, что вот, вот это, это условия и это вот эти части, вот
690: Эти 2 части, вот эти, да, это и есть составные части цикла фор. Если мы посмотрим в машинный код, генерируемый относительно этого, то де факто вот эта строка это всего лишь навсего что-то типа макросса или мнемонической.
691: Записи, при которой при входе в алгоритм определяются идентификаторы. В начале этого алгоритма эти идентификаторы выполняются вот такие-то вот подобного рода условия при выходе, выполняя
692: Сложение. В этом смысле ты абсолютно прав. То есть вот эта строка де факто при генерации кода машинно исполняемого или байт кода приводится к тому, что у нас есть 2 дополнительные части, которые вы
693: Выполняется перед и после.
694: А это всего лишь навсего такая особая форма записи того же самого.
695: То выходит, то стоит 100000 раз и считаты из контексту, що, значит, торты, и ну, war и 100000 раз выходит ни.
696: Не выходить вар це Варей стейтмен, яки выконуть лише на початку выкон коду функции c друга стадия выкон джаваскрипт коду колымы.
697: Коли мы доходим у выпадку нашего рантайм до выкая оо инструкции, то его Вара для неё же не.
698: Тут треба распровести про то, яким чином вонуется джаваскрипт код дисно выкуется джаваскрипт код, гидно спецификации Колы мы выкликаем функцию Мурич мейн фор перше що робе?
699: Будь, будь, яка, имплементация джаваскрипт коду гидно спецификации до, будь яко команды Вона проходить по кожной стрич та.
700: Неи иденти такие ключевые слова jack вар лет, конст фанкшн топ тощее.
701: И ведо них необидный алгоритм Коли мы доходим до наприклад оо пёршей строки Колы у нас починает рантайм, то war же нияким.
702: Не вплывая на виконання коду, вин вже зробив все ще мик, йод же из уже уже иснуе у нашему отточен и выконуть Лёше повязаны йод за результатом.
703: Литерала, яки в данном выпадку интерпрет як намбер нал. Намбер 0 number 0.
704: Я верно, вразуми питание Яше, неверно зразумив питание снов его задавайте перефразу, давайте разбираться, во чем билет я про war той, шо в for war, и там те самое Ровно.
705: Тоже самое в цикле и
706: Ну, на context выше цикл яки 100000 раз икону давай перепишем наш код таким чином.
707: Чтобы.
708: О, прикольно. Это что ж я грохнул браузер свой основной.
709: Нет, он где-то работает лёнко. А где он работает?
710: Его тут нет и тут нет.
711: Так.
712: Забираем.
713: Забираем, забираем, забираем це. Все, нам непотребно, непотребно. Непотриб. Так, этот наш про сумматор нам не нужен. Сумматор не нужен. Вот.
714: Это нам все не нужно, правильно, правильно? Вот это нам все тоже не нужно для твоего пытания. Так?
715: И вот это уже нам тоже все не нужно. Так.
716: Итак, твоё пытание, твой вопрос заключается в следующем. Наш идентификатор ии, ты предполагаешь, что из за 100000 итераций каждый раз пересоздаётся? Так? Да? Так.
717: На самом деле это не так. Идентификатор и благодаря вариейбл стейтмент, согласно спецификации, создаётся ещё до начала выполнения всего этого кода.
718: Существует внутри окружения. Вот если ты видел начало того нашей трансляции, текущей, когда я показывал окружение, там в самом начале уже существует идентификатор и который связан с undefined в тот
719: Момент, когда он у нас приходит к нашему фор вар уже никак не влияет ни на что, никак не выполняется. Вар это вариейбл стейтмент, который определяется только на 2 стадии. Испол.
720: Исполнение нашего кода, который идёт перед перед рантайм исполнением нашего кода. То есть когда у нас происходит выполнение всей вот этой нашей логики, ты должен себе представить, как будто бы никаких var вообще не существует.
721: А тоди чего оно вплывает? Ишо мы робим, и оно вплывает, оно вплывает на алгоритм оптимизации в 8, когда оптимизирующий алгоритм смотрит на формирование вот этого.
722: Кода, и оно видит, что ему дают подсказку вар. И то есть он предполагает, что это и существует только для вот этого блока кода. Мы его специально определили для нашего фор. Мы ему дали как будто бы подсказку
723: То тогда он применяет более агрессивные оптимизации, в отличие от ситуации, когда бы наш var и
724: Был бы написан вот здесь, например, вот так war и равно нулю здесь и равно нулю в этом случае в 8, когда подходит к этой части кода, он видит и и не видит слева вар и предполагает
725: Что это наша и которое мы здесь используем внутри for каким-либо образом, теоретически может использоваться выше. А если это так, то тогда уже у него нет никакой абсолютной уверенности, что внутри мы можем
726: Использовать точно такие же агрессивные оптимизации, потому что сам по себе идентификатор и который связывается с нулём, совсем не обязательно является тем самым идентификатором, который теперь связан с нулём и может быть чем угодно. Мы можем его переопреде,
727: Делить. Он у нас может менять несколько раз типы данных, от чего поведение кода внутри блока фор чрезвычайно сильно может меняться с точки зрения оптимизации в то же время, когда мы написали здесь вар и
728: А вот здесь этого нет, то в это время, в 8, когда подходит к выполнению этой строки, он для себя делает вывод. Ага, это означает, что внутри цикла for мы используем, используем и которая выше и ниже.
729: Никак не использовалось. А значит, я точно уверен, что это и который является счётчиком. Мы арай эн. Это является не просто счётчиком, а счётчиком по элементам массива и плюс плюс.
730: Мы двигаемся по 1 конкретной итерации это типичный распространённый паттерн переобхода массива, который я могу оптимизировать заранее специальным подготовленным.
731: Образом, как обычно рассуждает в 8 вообще, строго говоря, большинство оптимизаций, которые, которые может применять в 8, опираются на то, какие подсказки ему даёт программист, как он пишет код, каким образом он
732: Ему подсказывает, что будет происходить дальше или, наоборот, каким образом он ему мешает понять, что будет происходить дальше.
733: В текущем варианте в текущей моменте времени, в котором мы находимся для типичного программиста на языке javascript, самое важное не уметь писать код, чтобы он максимально был оптимизирован, сколько уметь.
734: Писать код таким образом, чтобы не мешать этой оптимизации.
735: Тото, с точки зору мовы, программования, ризници ниякой. Угу. На ватики при оптимизации. И само так абсолютно точно.
736: Ясно, дякую 1 в 1. Якше мы говорим про спецификацию на яким, но она имплементит. У тории нема ниякой. Зовсим взагали, а?
737: Мы говорим про в и про вот его реализации, то мы стыкаемся историями Колы вин. Намагаються паттерны, якие выкороти программист, программист и
738: Выковывая ли подготовленные оптимизации схемы для конкретно для кожного, с тех паттернов, яки яки вин распознал?
739: У выпадку фор це 1 из пёрших Частин мовы джаваскрипт, яка висим была оптимизована до мозга Костей, до мозга Костей не знаю, это руссизм как украинской мовы, правильно сказать то есть.
740: До состояния, где программисты, которые занимались оптимизациями, они старались просто все возможные вариации предусмотреть, как оптимизировать фор. И, кстати, по поводу того, как сегодня должна была бы развиваться
741: Лекция относительно не лекция, а трансляция относительно того, что происходит, мы должны были бы прийти в процессе исследования к тому, что существование внешнего цикла в качестве родительского по отношению
742: К внутреннему приводит в 8 в замешательство и мешает ему производить серьёзные оптимизации и перенесение перенос родительского цикла, например, вот во внешнее окружение и создание функции.
743: Внутри которой существует только 1 цикл, а потом внутри, мы внутри этих 100000 вызываем функцию, внутри которой происходит этот самый цикл оказывается намного более выгодная с точки зрения производительности ко
744: Которую генерирует в 8, чем организация 2 вложенных циклов?
745: И это опять говорит не о том, как устроен язык программирования javascript опять говорит не о том, как устроена спецификация экма, а говорит о том, как в 8 может оценивать состояние кода и как его может оптимизировать.
746: К этому этому случаю вернёмся в 3 части трансляции про это же самое.
747: Я правильно понимаю, что цикл, while он теперь мертворождённый вайл мертворождённый? Нет, вообще не мертворождённый. У него просто меньшее количество паттернов, которые оценивает в 8, но, в общем, в общем, в общем случае,
748: Он справляется с оптимизацией тела внутри while, приблизительно точно так же, как и с циклом for просто к four применяется большее количество шаблонов, которые он пытается найти, как используют программисты. Ну вот если подумать, повспоминать свою практику.
749: Использование цикла for what остановитесь на секунду и задумайтесь, как я использую цикл for то обычно это перебираются там массивы, какие-то циклические структуры данных и так далее и так далее. Таких паттернов найдётся не очень много в случае же
750: С while семантика использования, while немножко же другая фор семантика фор это у нас есть детерминированное количество итераций семантика вайл это у нас есть
751: Количество итераций, которые могут изменяться в зависимости от выполнения условия на на этапе входа в этот цикл. От этого и меняются условия оптимизации. А так
752: While do while for это 3 by дефаут конструкции, которым раньше обучали программированию там в девяностых годах для того, чтобы выстраивать логику.
753: При цикличном выполнении одних и тех же операций, потом возникли другие интересные вариации, решения тех же самых задач. Кстати, вот интересный вам вопрос. Вот смотрите, когда-то у нас появились компу,
754: Компьютеры, программирование этих компьютеров, когда они только только появились, сводилось к тому, что громаднейшее количество людей проволочками связывали некоторые контакты. Потом это все эволюционировало. У нас появились терминалы.
755: Появились языки программирования, появилась операционная система, появились чуть более сложные языки программирования, а потом следующим этапом эволюции над ними заработали интерпретируемые языки программирования, подобные языку javascript, который ещё сильно упро.
756: Стиле, процесс самого по себе программирования. А сейчас у нас появляются вот эти самые ллм модели, которые позволяют нам использовать естественный язык для человека, для описания того, что он хочет от программы, и оно
757: Даже в каких-то случаях справляется с этой задачей. Так вот, вопрос какое фундаментальное отличие в процессе этой эволюции между современным появление современным механизмом?
758: Лм. Моделей, которые генерируют код, и, например, языком javascript, который появился, тоже как большой кусок абстракции, упрощающей программирование как таковое, в чем существенная разница.
759: Между языком программирования javascript с высоким уровнем абстракции и современным программированием, где описывается код на естественном языке линь поко, линь линь.
760: Ещё лень поколений российскую. Не, не, не, ну лень это лень, это лень, это двигатель, лень, это двигатель прогресса. Вопрос вот, вот тебе и приклад. Н, появилась прогрессу.
761: Я думаю, что не есть фундаментальная техническая, именно технический акцент отличающих.
762: Отличающий это решение, это, этот эволюционный процесс от всех предыдущих эволюционных процессов. Прям фундаментально отличаются они 1 от другого спецификации нету. О, ты очень
763: Близок к тому, что ты говоришь, да, если если перефразировать то, что ты говоришь, оно заключается в следующем даже у языка джаваскрипт даже язык джаваскрипт является детерминированным языком, когда ты смотришь на какую-то команду и описываешь программу.
764: То ты точно знаешь, что будет происходить с этой программой, в отличие от того, что происходит сейчас, когда формирование задач на естественном языке совершенно неясно, к какому коду это приведёт, и главное, что даже меня
765: Модели. В рамках 1 и той g1 и того же механизма мы можем получать при 1 и том же промте то, что называется промтом разный код. Мы теряем детерминированность до этого увеличе.
766: Уровня абстракции сохраняло детерминированность, стопроцентную предсказуемость того, что будет происходить. А сейчас получается новый, совершенно новый инструмент, стоящий над всем этим, который и потерял детерминированность. Он
767: Вроде бы сам сказал, что конкретно не, ну, спецификация.
768: Имплементации в процессе его иснования было и решении проблем то и вот то, что ты ешь.
769: Jack раз и e jack наследо данному конкретно не не но но но но но я говорю совсем про инше сучастний кинет код воны.
770: Сейчас зараз на статистично кики информации написано на данном выпадку, так яка не е детерминан.
771: Я red Выбач скажи мне передачи яку неможливо передачит навить люди, яки программую и модели модели не можуть за сказать.
772: Приведе результат результат модели. Так я разумею, я просто кажу, шо статистично информации-ка была за период, шо модель может
773: Не может. Ты хотел, ну просто так, наголовные её тёще, она ще, мы не можем заранее предсказать то.
774: Какой результат она будет будет сгенерирован, и в этом есть существенное отличие генерирования программ при помощи описаний к этой модели тех самых Промтов сейчас или написание скриптов под тот же самый javascript.
775: Который был высшим уровнем абстракции. Когда-то в этом есть существенная разница. А самое главное, наиглавнейшая проблема заключается в том, что даже в рамках 1 модели выборка на более глубокое погружение менее
776: Глубокое погружение может генерировать совершенно разный код, непрогнозируемо разный код.
777: Интересно, к чему это все приведёт?
778: Кто не знает, будем бачить, так оно будет переписано через 3 дня, Бо через и ну хотя тому що вид шо писать 3 месяц.
779: Хотя тому, що вид особливости работы цего коду залежить життя будь яко Людин, Бо 1 дело Яковенко там якись кулинарных рецептив.
780: А coca там nat контролю за идельность там, да и яким чином оо выпадку её до кулинарных.
781: А у выпадку Колы там, не знаю, закладу же сине.
782: Яким чином вы будете? Они те код, який оно было, який, який оно, оно генерал треба оо Цей код буте реверс инженером для того, чтобы реконструи реконструи.
783: Ют. Логику того, що оно заробило и зробиты высновок че можно c.
784: Выкрестов у выпадка яки вид яких залежить наприклад, челове життя чи не можно и треба все c переписывать вот такие, така вот такие вот диво.
785: И она ещё раз, ты не завы, можешь знать, яки будет твоя программа в для
786: Дельности. Поясню. Тоби, напишите нам, да, программу Вырова, там, среднестатистич, там объект, может, на поле, а там выбира, а может
787: Криминальная видповидальнисть там группы людей, да и ты не знаешь, ты пишешь просто математично модель, математично модель а jack она будет имплемента чего запикана никто не знает, так что на сегодняшний.
788: Проблема тоже, Колы ты знаешь, и пишешь, и контролишь, а и то, что дают на галерах и кажут твоё дело нам треба. Результат то и проходи тесты, а?
789: Ну, мабуть, не знаю, мне сдаётся що, хотя, не, не знаю, не могу сказать, не могу сейчас рассуждать на эту тему. Надо подумать. Так.
790: Уже означает, что 500. Так, так, это у меня приезжали друзья, у них был такие.
791: Touch такие пистолет, пистолет, там были загружены купюры такие, типа сувенирные по 500 гривен, а оказалось, что они сделаны из такой классной бумаги, что из них просто само
792: Это чудо делать оригами вот такие дела.
793: Бумага просто шик так, народ маме питание до панна пускаем. Могу ли я чем-нибудь вам? Могу ли я вам ещё как-нибудь потратить? Бесполезно ваше время.
794: Как сегодня, если вы знаете, как мне стыдно.
795: Хоть 1 часть слегка сгладила происходящее, ты ещё справишься, не грызи себе дурное, я не грызу, это я так напрашиваюсь на комплимент.
796: Все так получилось. И красивая оригами, не, не оригами, то красивая, то все дали было такие поганые. Я же заранее готовил себе план, у меня тут написан был, эти примеры готовил и
797: В коем то веке попытался заранее подготовиться, а не учёл тот факт того, что в момент трансляции, когда будет работать то-то, то-то и то, то нагрузка будет настолько сильная, что все эти цифры настолько прыгать начнут, что
798: Не будут ничего стоить.
799: Такие дела.
800: Добрый всем добранич. Так давай вам будем. Дякую вам. Спасибо вам всем, что сидели и терпели, и выслушивали.
801: Моё бэканье это мэканье, все нормально, да, если не пробовать и не учиться, то никогда этому не научишься.
802: Так, будем завешивать. Всем большое спасибо. Пока.
803: Всем спасибо, все свободны. Я 1 среди вас.