#28 Почему ассемблер остается актуальным в 2025 году? | Дмитрий Коваленко

Привет друзья с вами Кирилл макевнин ведущий подкаста организованное программирование тема сегодняшнего подкаста внезапно аем то есть мы будем говорить про довольно низкоуровневые штуки с моим гостем Дмитрием Коваленко Дим привет Приветствую у Дима интересно послужной список помимо там своей работы он ещё расскажет всякие интересные вещи потому что Дима один из ко разработчиков как минимум в Mat UI и кор контрибьютор давайте так правильно скажем да контрибьютор в cyprus и контрибьютор в FP каждый раз очень сложно произнести это название Я всё правильно сказал да то есть как бы кор контрибьютор не знаю это сказать сложно Ну я деньги с донатов получал на материал я как бы жил годик я работал прям с донатов на мате Да да я красил кнопки Да я признаю я красил кнопки но я peer сделал с нуля Который прям прям популярный очень многие его используют вот в сайс тоже я работал это прям компания вот а я так сечас но я был у них на ежегодном собрании разработчиков поэтому можно сказать что я наверно разработчик Ну как-то так да люблю Open Короче говоря нравятся мне Звёздочки на гитхабе кстати довольно знаешь Забавно Я думаю у людей сейчас такой в голове шарики за ролики зашли потому что я таки сегодня говорим про Ам и я называю все вещи которые связаны с фнм с вёрст кой там с м и чуть-чуть мы в какой-то чучуть проект который не так уж просто на контрибьютор

целая целое Дело это не знаю я име с точки зрения того как я тебя представил То есть это выглядит так что как будто ты Да как будто ты JS разработчик Давай перед тем как погрузиться в тему поскольку у тебя реально очень интересный послужной список мы некоторое время потратим на то что ты про это расскажешь и я тебе по какие-то вопросы Расскажи в хронологическом порядке будет интересно узнать как ты до этой жизни дошёл Ну было дело ну короче был было дело был я очень мне нравился реакт в своё время я делал много чего с реактор в далёкие там я не знаю какие пятнадцатые шестнадцатые года и даже наверное чуть позже семнадцатые восемнадцатый и собственно говоря как-то так оказалось что мне нужно было что-то делать В материал UI потому что материал UI там был v0 потом был V1 и мне нужно было что-то туда добавить конкретно дет пикеры я взял просто добавил дет пиры сделал Ну как бы пакет на ме который решал мою проб мне насыпали звёздочек мне это очень сильно понравилось Я его метел и потом со временем мне пришло предложение как бы пойти к ним работать потому что я очень много сделал мы ВМР это всё в один большой репозиторий я поработал над ними жутко Мне надоело работать с компонентами на дв скрипте китами вообще Кирилл со мной хотел поговорить про Киты и я такой блин Боже мой нет пожалуйста не надо я тебя прошу Давай про ладно вот ну как-то так получилось Потом мне было очень интересно тестирование пока мы делали UI мне было огромное количество проблем с тестированием Я пошёл в тестирование я начал изучать варианты я начал контрибьютор

я понял что мне не хватает скорости я начал работать над Ну конкретно вот там Visual regression тестирование Ну когда скриншотит я написал свою библиотечку для сравнивая скриншотом потом переписал её практически полностью на си и вот собственно когда я как-то так вошёл в этот сиш мир начал что-то делать там на разных языках программирования на Расте и так далее и вот сейчас там работаю на Расте фултайм разработчиком что-то делаю на всяких там амрах под под а в основном на iOS на всякие такие вещи для скорости и начал собственно говоря работать с видео Вот и ушёл как-то Так у тебя какое образование пи да компьютер Science четыре курса Ну потому что я имею в виду люди без специальной подготовки вот так вот на Джеси Дже писал пошёл в более низкий уровень без подготовки Ну возможно но просто чуть посложнее это будет А почему почему так считаешь Ну у тебя просто очевидно например банально Ты про операционки ничего не знаешь Ну то есть тебе это придётся самому учить А так у тебя есть хорошая база которая тебе сильно помогает Ну то есть просто есть некий объём знаний которые тебе если ты Нормально учился тебе дают они тебе помогают Ну я помню что нам Ну что вот конкретно про операционные системы там нам никто не помню не рассказывал про там все сколы к примеру что это такое Какие они бывают то есть там то что как бы про Ну понятное дело что есть какая-то база там всякая в отношении а процессов трендов и так далее но это довольно важно не современный разработчик об этом очень плохо знает есть Ну представь если ты какой-нибудь прикладних там на жесе на любом таком прикладном фреймворки там знаний операционных А это я тебе кстати могу сказать есть такой интересный вообще м феномен А знаешь кто больше всего отрицает какие-то вещи те кто больше всего в них разбирается То есть например люди которые говорят что алгоритмы не нужны если вот мас статистически посмотреть больше всего говорят те люди которые больше всего потратили на них время и то же самое про паттерны То есть у тебя получается довольно забавная ситуация что просто когда когда это уходит у тебя на уровень подсознания То есть ты этим пользуешься и даже не можешь оценить себя Если бы ты без них это знал людям начинает казаться что вообще-то всё это было бесполезно Я просто как человек который учу людей с этим феноменом постоянно сталкиваюсь и я не говорю что это так или не так просто это Забавно то что люди не могут отделить они такие Да это не нужно мне вроде не пригождается но естественно где-то на фоне оно Ну вероятно помогает просто конечно навер наверное проще проще спуститься но опять же я честно говоря не вижу я я не вижу ничего сложного в том чтобы там писать код например на си то есть вот там люди говорят си - это безумно сложно язык и Я всегда говорю Да Почему он сложный ребята Ну почему Ну у вас там нет даже хэш мапы То есть у вас вот нет объекта То есть вам не нужно об этом думать там концепций в принципе меньше то есть чтобы писать на си понятное дело если тебе нужно хш мапу ты тебе нужно её где-то достать или самому написать но если ты там разобраться в коде на си гораздо проще чем разобраться в коде там на жава скрипте потому что жава скрипта есть миллион вот этих концепций прототипов и так далее это как бы всё это просто там просто больше ИО Ну мне так кажется не знаю а ты как скорее для тебя это как для человека наверное Который больше библиотеки писал потому что всё-таки в прикладном коде до определённого уровня Ты же думаешь всё-таки о Бизнес задачи в первый очере это прик рабо это пра да то есть решать проблемы Versus писать код именно да Да да да согласен Возможно Возможно я с точки зрения именно я вот больше как бы мне больше по по кайфу работать именно с там с железом вот мне нравится вот это вот всё там Да вот не просто решить проблему а вот именно сделать так чтобы это было максимально эффективно с точки зрения ресурсов и так далее это бывает очень полезно Ну да смотри а у меня наоборот То есть это довольно забавная вещь мне про неё хочется сказать потому что она меня всю с мою жизнь преследует я всю свою жизнь поскольку я Я учился на прикладной математике но не закончил Я всю свою жизнь никогда довольно глубоко не копал То есть я копал до ассемблера у меня был там в универе я там про персон много читал Ну вообще пытался Но знаешь вот чтоб вот сравнивать себя с такими людьми которые там типа я сел в нося там что-то Нафига там и в драйверах разбираюсь вообще всё это хорошо понимаю я такой даже если я где-то и читал про это у меня нету практического опыта и у меня всё такое немножко чувство самозванца что я не настоящий программист Но поскольку уже столько лет прошло я знаешь всегда на это смотрю и воспринимаю Ну ну ты не можешь быть там во всём разбираться во всём быть хорошим типа я себе признался я с собой что я прикладной программист я могу писать я знаю как делать архитектуру больших штук Я знаю как сложную поддерживаемую систему взаимодействия делать но вот банально когда я сижу пишу код вот представь ты испытываешь ощущение А я сейчас тут пооп а я такой пишу компонент какой-нибудь на реакте очередной и думаю Блин вот это то что должно было в ките Я не должен был этим заниматься То есть я вместо того чтобы решать бизнес задачу сижу и ковыряю какую-то хрень честно говоря это кстати не говорит о том что я не люблю писать либо и какой-то прикладные вещи Но грубо говоря я не люблю когда Мне нужно решить бизнес задачу ковыряться с низкоуровневые вещами А вот когда я с ними ковыряюсь Мне тоже прикольно Вот такая вот интересная вещь да я согласен с тобой я же работаю в стартап сейчас и естественно там ну сидеть там решать какие-то низкоуровневые задачи это не нужно но всё-таки я не знаю мне ну мне например нравится что там у нас все наши сервера они запускаются там да с довольно много кода У нас два с разработчиков то есть на ресурсах меньше чем там в телефоне у меня к примеру да то есть мне нужен телефон чтобы там весь наш прок держать там 10.000 Да И вот это всё работает и не жрёт там ну то есть мне не нужно там нет стотысячных лов на aw Хотя я согласен Это в принципе не сильно важно не сильно важно наверное с точки зрения бизнеса зарабатывания денег но денег у меня нет поэтому я тут не ну то что в стартапах люди конечно часто скажем так позволяют себя поиграть с технологиями но так жизнь устроена Хотя честно говоря если бы это был мой стартап Я бы конечно ну всё-таки занимался в первую очередь теми вещами которые для бизнеса нужны ну у нас специфический стартап у нас стартап на Расте то есть на Расте писать код веб большинство куда на вебе это конечно да это весело то есть там бил таймы такие что ты прям ну то есть тебе то есть ты Ты сплетешь на сервисы свои Я знаю что ты не очень любишь с микросервисы но у меня есть хороший аргумент у меня просто памяти не хватит в компьютере чтобы сбил весь наш проект как Монолит потому что у ра такие длинные бил таймы то есть там прям да Но зато весело кстати вот тоже по поводу любви Это не это не отсутствие любви Ты знаешь вот есть такое как бы на любое действие рождается противодействие То есть когда я вижу что как чем-то начинают злоупотреблять Я чуть больше начинаю как бы в обратную сторону хотя на самом деле в обычной жизни я нейтрально к этому отношусь просто нужно показывать другую сторону потому что иначе все такие а побежали куда-то это касается всего что угодно вот например у нас в курсах многие замечают что у нас какой-то есть э в начале мы чуть больше даём упора на функциональщики какие-то подходы и меня очень часто спрашивали типа Кирилл А что это у тебя за перекос такой что это я говорю ребят Смотрите дело в том что весь мир почти императивный и вы без меня все будете писать в императивно стиле капец но вот заставить себя писать функционально это нужно себя Ну как бы заставить и поэтому я здесь немножко эту работу проделал чтобы потом вы как бы Когда ушли полностью в императив Ну вы могли быть более сбалансированным инженером Потому что если бы я вас тащил в императив Ну а потом ещё и весь мир вас будет тащить в императив это нужно быть супе осознанным чтобы решить для себя типа О а мне интересно функциональное программирование Ну это смотря смотря С кем ты общаешься потому что Вот я например наблюдаю что в Европе очень многие ВУЗы учат То есть к примеру на Акам да то есть мне тоже очень нравится амл как язык программирования мой проекти вот этот вот нам написан в основном они кстати наоборот у них Проблема в том что они не очень разбираются как вот там Собственно как императивно как компьютер Ну не то что как компьютер работает а как вот в принципе там Да почему Там ну есть на хаске человек писал 8 лет к примеру и ничего другого не смотрел почему там мутировать массив это быстрее Да он там картинки чтобы поменять он будет его клонировать на каждый на каждый мап и так далее ну то есть это опять же наверное это может быть Ну всё равно это редкий кейс Согласись 8 лет на хасле больше ничего не видел типа вымирающий вид это там единицы не знаю может быть кстати не знаю может быть может быть но я много знаю как минимум студентов которые выпускаются из университетов и они основную часть кода писали на вот функциональных языках Ну не прямо очень не прямо все ну достаточное количество вот в Европе очень много особенно там во Франции вот очень университета и Германии очень много тоже Ну ты берёшь профессиональный Универа Да тут я согласен но это прям сильно другая среда потому что в основном всё-таки ты знаешь все самоучки если про курсы конечно туба больше если если вот брать статистику то людей которые вошли через YouTube и через самообучение их Конечно статистически больше и там конечно этого ничего нет и поскольку такая аудитория она вот Большая то конечно Я в основном на неё работаю а не на тех кто и так всё знает ите ребята и сами всё придут всё расскажу Да но кстати это тоже классно потому что это тоже в тему мы долго с тобой разгоняемся идём к амбру но мне нравится потому что мы с тобой сейчас по пути очень много таких нюансов мы общаемся Да да да очень много всяких интересных нюансов то есть вот по поводу си Понятно давай вот про собственно ассемблер потому что я подозреваю ребята Напишите об этом в комментариях если так когда-нибудь был бы у вас вообще хоть какой-то опыт с амбро представляете Вы или нет потому что по моим ощущения всё-таки люди у которых не было специального образования они всё-таки знают очень сильно понаслышке и не совсем понимают вообще что это такое Ну да и я бы хотел вот это с тобой разобрать Да изначально вот если даже нету ничего что у нас есть у нас есть процессор да да ка и у него есть некие инструкции знаешь что тебе что самое смешное Я вот тут должен прямо добавить всю свою жизнь как бы Слушая про это до тех пор пока я не открыл правильные книжки Не почитал я не очень понимал Смотри вот процессор То есть я сейчас уже понял но я как бы с себя этот старого вот есть процессор Да это физическое устройство Да и мы говорим а вот есть инструкции и вот всегда про это так говорят это вот как знаешь про космос когда ты слушаешь сурдина там и ребят ты как бы вроде понимаешь а вместе часто не соединяется потому что как будто клея какого-то не хватает И вот у меня всегда было это ощущение когда я книжки в детстве читал Я не понимал вот инструкция и процессор всё-таки А как они соединяются То есть как вдруг инструкция оказывается чем движением в процессоре потому что это физическое устройство и только Прочитав Великую книгу я сейчас делаю интеграцию небольшую офигенную книгу которая называется код Тайный язык информатики кто-нибудь читал это лучшая книга по вот вообще устройству компьютеру и ассемблера в самой базе чтобы понять что это такое Чарльз столь который один из создателей экселя гениальный книга где прямо начиная с фонариков он постепенно строит компьютер там из реле и в конечном итоге в конце доходит до своего компьютера с ассемблера если Дим не читал просто это книга через которую надо вводить всех кто вот не в теме потому что она очень классно и вот только там Я это понял потому что по сути инструкция грубо говоря Вот скажи прав я или не прав да у тебя у процессора много ножек и каждая инструкция - это по сути Просто набор ножек на которых нужно подать напряжение там типа там три вот этих четыре вот этих пять вот этих начнём с того что инструкция - это просто то что в памяти записано правильно то есть во-первых во-первых такой такой момент важный который тоже я думаю что многим откроет Ну не то что Откроет глаза как бы мне так говорить смес типа не хочу Дело в том что программа по факту Это же просто как бы код который запускается То есть ты уложишь прямо в да то есть в твою память Вот и потом твоя то есть по сути что что дальше происходит у тебя есть какой-то Ну допустим ты пишешь операционную систему она за тебя всё это делает она просто отправляет эти инструкции То есть она говорит сейчас Выполни эту инструкцию там к примеру самая простая это там да сумма или Р Да иксор - это просто по факту если Мы спустимся в вот эту булеву алгебру да то есть это же просто по сути манипуляция единичка Да и ликами соответственно у тебя просто электрические сигналы соответственно Да на ножки подаются и у тебя на выходе получается то есть у тебя просто как бы ну две лампочки загораются третья гаснет к примеру да то есть два электрических сигнала они друг друга перебили результат нужно как-то считать и забавно что это происходит Ну с какой-то безумной скоростью То есть если сейчас подумать о том что вот частота процессора Да мы там говорим 3000 гц а 3000 гц - это по-моему То есть это по-моему свет пройдёт сколько если 300.000 м в секун свет там Фотон пролетит 9 м за за время пока одна инструкция исполнится это просто безумная скорость и вот это кстати одна из самых больших проблем Почему почему у нас всё такое медленное потому что такие компьютеры быстрые что мы уже просто столько всего тут пиха что просто невозможно ладно это я уже ну деть пошёл просто чтобы такая вот картинка вообще сложилась как это примерно выглядит грубо говоря наша программа - это такое Как это такие Просто

сигнальную когда вот загорается так пум-пум-пум и на процессор это подаётся соответственно он соединяется там с другими частями дальше понятно там всякие прерывания АО работает у тебя память всё это вместе в общем связано ши Да там уже становится хитро Вот но в целом м наверное ещё тоже что хотелось бы сказать то что вот то что мы пишем в коде оно в процессоре превращается по сути в аппаратную часть да то есть у нас вот это вот калькулятор по сути который там работает Это же хитро сложной схема из транзисторов да то есть мы на палочки подали оно как-то там вот так вот это Лабиринт прошло и на выходе у тебя соответственно что-то получилось просто чтобы было понятно что в процессоре в принципе больше ничего нет Да процессор - это ну как бы довольно простая штука если если вот взять посмотреть примерно как работают вот эти старые большие процессоры на лампочках это же ну по факту просто Ну действительно калькуляторы Просто у них было очень много этих лампочек потом просто научились лампочки делать маленькие и поэтому теперь это какая-то магия Да там у тебя 3 нанометра Боже мой 3 НМ вот эти Новые процессоры это же как вообще жесть Да да да Ну и всё и дальше просто всё остальное это объём инструкций который нам все эти нули единички превращает и так далее но а помнишь эту книжку в детстве которую по-моему все читали про профессора где там код что ли у него там был там как раз они там про нули про единички вообще про основы информатики она собственно в меня влюбила как и многих в тех ребят в вообще в компьютер и во всё что с этим связано Хотя программистом Я тогда не стал Позже это произошло и там как раз был прикол что вот типа 001 да И когда мы говорим про инструкции то инструкция на самом деле вот эти палочки в смысле ножки процессора Да это можно записывать как раз в виде нуле едини с точки зрения того как мы их туда подаём Но это супер неудобно потому что у тебя тогда получается вся программа состоит из просто нулей единичен в этот момент и появляется ассемблер типа А давайте всю эту мишанину Запишем в виде понятных текстов да именно так ну то есть до этого же перфокарты на перфокартах как-то было не очень удобно соответственно если ты абстрагируйся вот Ну тебе нужен какой-то репрезентация того что ты хочешь исполнить на процессоре чтобы человек мог это написать и это действительно было Ну то есть как бы если мы берём x86 это вообще очень очень такая то есть она сколько 70 лет этой архитектуре она там они постоянно в неё добавляли добавляли всё но если мы возьмём современные там например архитектур А ну да или там риск пятую к примеру то это вполне себе читабельно вообще ну то есть ты Понятное дело что если ты не знаешь что вот эти сокращения обозначают ты не понимаешь этого но в принципе ЕС когда ты там основную количество вот этих вот там ldr или там Add mov понимаешь что они делают иты читаешь любой ассемблер и прекрасно понимаешь как он работает то есть тебе даже в принципе не нужно знать там каких-то зако выриным деталей архитектуры У тебя есть просто набор стандартных команд вот тут вот важный момент ты говоришь про архитектуру Давай тоже это раскроем Что значит архитектура как АМР с этим связан потому что это это сильно отличает его от высоко уровневых языков вот да то есть прикол Я я в Твиттере очень много вот этого пишу типа всякие дела типа я там переписал на на на на assem react или так далее ну то есть понятное дело всё делаю для для просмотров для хайпа это весело но то есть я я вижу что некоторые люди мне пишут о всё типа я мы свернули не туда АМБ мы типа типа не должны были вообще описать Ни чём кроме ассемблера тако думаю Ну понятное дело что человек что-то явно не понимает потому что ам - это специфичная под архитектуру программа то есть вот у меня Macbook Да идеальный пример у него они перешли сла на ARM если у тебя программа написана на интеле э то есть тебе нужно каким-то образом тебе нужно её переписать на а потому что у них абсолютно разный набор инструкций какие-то инструкции похожи Ну типа mov Но в основном все остальные инструкции другие То есть там вообще другие инструкции А И тебе нужно понимать что да как к примеру то что Apple сделали Розетта Что такое Розетта Да это вот их автоматическая перегонка что оно делает оно по сути берёт и просто берёт ассемблер программы Да и по инструкции просто переводят его в в Армос в Армос инструкции То есть у тебя получается Такой типа нативный интерпретатор ну то есть он один раз при запуске его там кэширует этот весь код и потом просто выполняет его уже с новыми инструкциями потому что всё что можно сделать на x86 всё то же самое можно сделать на на на арми транслятор ты имеешь что они написали из Ну тут вот хочется Вот эту вот мысль до развить То есть когда мы говорим про архитектуру чтобы людям не казалось что это некая там свыше там боги там спустились там что-то сделали Есть конкретные компании которые делают свои собственные там телефоны и адаптеры Да там разъёмы вот это по сути оно есть да то есть архитектура - это умное это такое красивое слово для того что мы конкретная компания Intel наши инженеры придумали разъём вот такого входа а то что там в другой компании придумали это вообще положить Мы хотим победить и соответственно появляется Проблема в том что архитектур много их не может быть мало не существует регуляции стандартов но придумывают насколько я знаю по-моему риск Да как раз он называется п да это орная архитектура как раз таки это не компания это вот Вот расскажи да то есть какая проблема появилась почему вдруг её сделали потому что это интересно ну потому что соответственно вендер Локи естественно то есть у тебя архитектура Ар она ей владеет естественно одноимённая компания А архитектура 86 и владеет соответственно Intel то есть есть разные там есть nas есть ям то есть разные вариации которые позволяют тебе писать Например x86 код под разный то есть там есть ещё под как бы такие подразделения архитектуры это всё естественно усложняется со временем когда у тебя что-то начинает использоваться всеми подряд у тебя начинается очень сильно усложнение то есть там x86 отдельно

интелонет ненужными инструкциями то есть там я не знаю грубо говоря у тебя там сделают специальную инструкцию там для например расчёта Я не знаю квадратного корня из числа потому что там инкремент даже банально там инкремент какие-нибудь хотя это по-моему так были да инкремент есть конечно но то есть тут именно такие такие даже супер специфичные вещи я сейчас к сожалению из головы не назову Ну например компания IBM в сво в свою очередь Да в там в Восьмидесятых годах когда они были на кану Они часто очень ходили к Илу И говорили вот мы там часто вот у нас там буквально говоря Don't repeat Yourself Да у нас вот этот вот кусочек кусочек мы его типа постоянно репите мне нам это не нравится Возьмите запихнуть его в вашу прямо в процессор как отдельный маленький такой чипсет и соответственно Вот это всё так оброс вот этими Вот такими вот наростами естественно архитектура процессора она не может быть там не может быть Брейн ченд Ну это этого невозможно то есть это как браузер да то есть и то в браузере ещё Ладно в процессоре у тебя просто если у тебя будет поменяется архитектура у тебя просто ну там ну ничего работать не будет то есть И вот это вот всё Оно просто не могло развиваться дальше и для энергоэффективных устройств в которых Ну просто им не надо вот это всё то есть и у них просто ну то есть им не надо большинство большинство инструкций которые там вот в этих вот больших там серверных IBM машинах суперкомпьютера придумали соответственно архитектуру ARM которая более энергоэффективная то есть Ар но это тоже reduced instruction Set То есть это тоже риск то есть есть как бы циск архитектуры Есть риск архитектуры риск - это То есть у тебя укороченный набор возможных поддерживаемых инструкций для процессора их всё равно много их хватает там ну ты ты можешь всё посчитать всё что тебе нужно и так как у тебя современные языки программирования на Сверху над ассемблера они

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

Заимка Да у тебя там будет три инструкции вместо вместо одной Ну и что Зато у тебя сам камешек гораздо меньше У тебя меньшая энергоэффективность потому что тебе не нужно запитывать вот это вот всё а оно меньше выделяет тепла тебе меньше нужно охлаждения и соответственно оно работает быстрее сегодня везде То есть сегодня даже там сервера в принципе все ну не все наверное Ну многие все уже многие попередили там на а github actions к примеру вот я беру у меня github actions на армии он просто на 25% быстрее Билд гоняет чем на x86 Ну это типичная проблема просто что накопившийся leg да Оно просто мешать начинает потому что понятное дело никто заранее не знал и не представлял типа А что такое правильная архитектура А как должно быть классно они такие о давайте добавим эту операцию Да добавим Эту я просто помню ты точно это знаешь Были времена это вот как раз конец девяностых девяностые там двухтысячные когда Ну может быть и раньше это было но это именно Моё детство я застал когда у тебя выходил новый процессор Pentium и у тебя набор инструкций каких-то то есть Представь это обычные люди которые ничего не понимают Естественно да но у тебя набор инструкций выносится в рекламу что с поддержкой инструкцией и я уже даже название забыл что-то 3D там бла-бла-бла или там пер трейн помоему Да это уже немножко другое но смысл в том что инструкции выносили как некое преимущество и понятно что они так хаотично развивались и сейчас как бы видимо с накопленным опытом уже все более-менее представляют Ну типа что нам в целом нужно вряд ли сейчас что-то супер прям новае появляется Да что надо вот прям в корячится но мне кажется уже просто опыта Уже довольно много в индустрии чтобы сделать что-то вменяемое так вполне себе ну то есть сегодня ну к примеру сейчас появляется очень много всего связа си то есть Single instruction multiple Data это вообще очень забавная вещь которую немногие используют сейчас то есть если там вот к примеру погуглить то я не знаю какой процент апше в Open Source комьюнити но в чём прикол этих инструкций я объясню То есть у тебя есть обычно как работает чтобы у тебя сейчас одну инструкцию выполнить тебе каждый раз нужно по сути загонять в процессор как бы целую команду что не очень удобно особенно если у тебя там ну репти данные к примеру самый самый простой пример - это какой-нибудь процессинг картинок у тебя там 17 Ну у тебя пикселей Да соответственно они все одинаковые по по своей строни если тебе нужно что-то сделать с каждым пикселем тебе нужно тебе в идеале это нужно распараллелить и соответственно Что делает simd Он позволяет тебе загрузить прямо Вектор данных То есть это то по по факту то же са тот же самый подход Что делает GPU Но у тебя там ограничен вот этот вот сторедж данных в блоке 7D то есть там 64 КБ к примеру или 128 ты загружаешь туда количество своих данных и потом одной инструкцией просишь сразу все соответственно это очень сильно Ну то есть это по факту параллелизм потому что у тебя сразу получается Ну вот вместо того чтобы несколько раз подавать и считывать то что мы говорили да электричество на ножке Да у тебя по сути один раз подаётся электричество один раз считывается и у тебя сразу всё доступно ну по факту то же самое что GPU вот вот это кстати очень сильно развивается сейчас а добавляются новые инструкции новые возможности там например к ну к примеру там с флотами работать Да вот векторах и так далее Это очень большая популярная тема как бы ты обычно это не трогаешь это там модно сейчас там всякие языки программирования типа Zig S3 всякие ну льные штуки которые имеют там Вектор вот этот вот SD Вектор как базовый тип данных но то есть обычно ты этого не трогаешь Ты обычно пишешь Это странно да как бы не параллельный код на процессоре это как бы даже странно звучит Ну да ладно скажем так слушай ну это не то что странно вообще это очень понятно Вектор движения для тех кто в это смотрел Что у тебя всегда была попытка Да думали там типа как параллели там ядра то всё пятое десятое и в итоге получается что сейчас основное развитие идёт не в рамках Да вот этой последовательны потому что там все команды более-менее видимо стабилизировалась там особо не добавишь А вот типа А давайте дальше и и чем Чёрт не шутит лет через 50 у тебя по сути полноценный язык с базовыми всеми конструкциями будет реализован внутри То есть у тебя тот же самый зик Ну так гипотетически можно представить будет просто фактически ассемблера нового поколения Я так не думаю ну не до такой степени конечно но двигается по крайней мере Ну да То есть сегодня языки программирования - это что-то вообще там то есть Раньше я вот недавно был прикол такой ты уже где-то видел что типа давайте что вы должны писать код наси в какой-то там восьмидесятого года книжечка абзац трактат что вы должны писать код на си но вы не должны писать код на си Вы должны Как бы понимать Какое Але Вы пишите То есть ты должен по сути думать об ассемблере но писать код на си Тем самым у тебя там кро кросса архитектура компиляция во все архитектуры названия именованные переменных но ты всегда должен думать про ассемблер сейчас соответственно это не так сейчас мы думаем там про бизнес логику про то как код написать Сначала мы там пишем какой-то референс на СМП Ну то есть если ты пишешь assembler сегодня а есть люди которые пишут ассемблер сегодня и получает за это деньги это тоже важный момент Ты сначала пишешь какую-то референсную имплементации на си к примеру или там на расти на чём угодно и потом уже сверху док аем который делает Тоже самое Почему Потому что тебе нужно поддерживать несколько архитектур и тебе нужен хотя бы что-то с чем сравнивать то есть тебе нужна какая-то имплементация ты потом написал Але протестировал Что у тебя исходные код одинаковый проверил оно быстрее или не быстрее и собственно тогда уты уже используешь аем Ну плюс-минус понимаешь что это там быстрее это имеет смысл Вот то есть Это пример так делае Иви к примеру в ЧМ прикол Вот когда говорят У тебя тко есть ру есть PHP есть то п деся про если ты Ну не в теме то это странно звучит Да ну типа есть а как будто существует некий язык assem но в реальности языка амбра не существует Да у нас существует А как Давай так можем это сказать что это семейство языков как лип Да просто здесь языки привязаны не к создателю а к конкретно архитектуре про и он тоже называется стати философский вопрос Можно ли назвать языком программирования философский вопрос я не знаю ответа на него по факту ты же что-то можешь Ну то есть ты компилирует но по факту это assem - Это не язык программирования потому что там логику ты не указываешь ты указываешь что тебе нужно сделать по сути это просто набор условно говоря язык программирования Ну давай философ пофилософствовать чайник да если чайник не включён Нажми на кнопку включить чайник Подожди там 5 минут и так далее это вот как бы язык программирования который программирует алгоритм включения ассемблер для такой штуки у тебя будет там подойти ну кстати не знаю да то есть у тебя всё равно есть бранч ветвления естественно построить фабрику для создания чайников да Ну ну да не совсем так всё-таки наверное да можно назвать это языком программирования я тут в это в этой в этой теории я наверное не я имел немножко другое нет то что ты говоришь Это скорее близко к высокому низкому не я имел в виду с другой точки зрения смотри речь именно вот о чём что есть вот прямо конкретный язык Python вот прямо вот есть создатель с некой идеей э идея связано с архитектурой никакой это просто вот он такой язык придумал как-то оно там внутри под капотом магически превращается Я просто имел в виду что нет такого что ты такой Я просто даже помню много лет назад ещё когда только начинал учить программирование я такой хочу изучить ассемблер и ты не можешь найти сайт ассемблера у тебя нет книжек по ассемблеру у тебя ассемблер - это просто некое название что это давай так это типа некое описание языка низкоуровневого программирования который фактически описывает инструкции под конкретную архитектуру Вот то есть нет одного ассемблера Ну да Ну тут можно поспорить опять же есть ассемблер амов ский да то есть есть ARM assembly у него есть сайт у него есть документация где ты можешь зайти и даже я думаю что есть Вполне себе конкретный Автор который сказал что там вот это будет называться cbv или там вот эта инструкция будет называться CS increment то есть вот он не называется Python он не называется шман Я имею в виду что а у него нет названия у него просто ассемблер - это некая типа это низкоуровневая фигня для Арма Вот это низкоуровневая фигня для сказать Естественно да да Ну да это это важно потому что люди которые с этим не сталкивались у них всё равно понимаешь когда ты слышишь такой язык Ну нет это именно Да это инструкции но они всегда очень конкретны под архитектуру Поэтому если вы решили учить аем а я когда-то решил я реально завис на несколько дней на попытке понять о ЧМ Мне вообще-то учить потому что если бы я взял Python Я бы учил Python если Ну понимаешь там frontend там GS Да а вот например вот предположим человек давай вот сразу Раз уж Мы зашли на эту территорию ответим на вопрос вот человек говорит ребят хочу посмотреть попробовать Вот что мне сейчас делать На какой сайт мне заходить находить себе то то есть смотреть какой у тебя компьютер То есть ты прямо открываешь компьютер и смотришь что у тебя за компьютер у тебя там например у меня MacBook Pro там 2000 какого-то там года на архитектуре Ар ты говоришь О'кей возьму-ка я напишу код и посмотрю что там происходит внутри То есть ты пишешь код на своём любимом языке программирование не берём интерпретированы языки программирования естественно берёшь там например ну я не знаю если ты конечно с крипта говори хочу а начинать не знаю как начинать наверное Надо сначала посмотреть всё-таки на более низкоуровневые языки типа C а потом уже пое например компилируется в ass Берёшь execut берёшь какой-нибудь к примеру радар 2 берёшь это очень прикольная ту зона я её очень часто использую для всяких просмотров чего же там у меня языков программирование сгенерировал открываешь и смотри говориш R2 DD это как бы analiz binary потом говоришь F название функции Которая у тебя в коде есть ты говоришь там у тебя функция в коде есть там я не знаю что-то ты написал Оно тебе выдаёт это семплер ты его копируешь вставляешь CH gpt и говоришь Расскажи мне что здесь происходит каждую инструкцию опиши что происходит Chat gpt с этим прекрасно справляется то есть вот с тем чтобы написать что здесь происходит поиск информации ну оно бывает правда глючит Он думает иногда неправильную архитектуру говоришь это типа ARM assembly там на macs потому что это тоже важно на на МАСИ другой ам чем там то что ты будешь запускать там на Linux Ами вот там у тебя другие инструкции и говоришь что здесь происходит и смотришь там вот это вот там cmp это там проверяет потом у тебет b. соотвественно ты он тебе пишет Это бренч если негативный результат в сравнени и ты там прыгаешь там туда-то О'кей смотришь там ну вот можно вот так покопаться просто посмотреть что происходит у тебя под капотом с твоего в твоём языке программирования это бы о интересно Забавно вот ну какую-нибудь простую функцию которая там не знаю суммирует числа Да тут Важно ещ выключить оптимизации потому что в современных Гошка кстати не очень хорошо в оптимизация Но если ты там сиш функцию простую напишешь у тебя ничего не будет у тебя её не будет ты такой сбил в код наси Потому что ты там написал in там сум а а потом написал in там типа вот Print F1 он тебя просто за принтут сразу три потому что это оптимизация языка программирования самого компилятора вот поэтому нужно выключить оптимизации либо там добавить какой-то н то есть типа Рандомные числа сгенерировать и уже смотреть что происходит вот Ну как-то так ты ещё добавил тоже важную вещь вот мы сказали что assem - это некое название общее Да вот разных наборов инструкций в виде текста записываемых да под каждую архитектуру но сейчас ты добавил да Там же ещё помимо самой платформы самой Господи у меня все слова путаться начали там x86 а и так далее У тебя есть ещё операционка операционка здесь тоже играет роль вот можешь чуть раскрыть это подробнее Да я так понимаю что это во многом связано с прерывания например там я не знаю с системными вызовами да как это работает Это же системными вызовами да то есть ну у тебя естественно Ну соответственно у тебя в основном с чем это связано Это с тем э это вообще тяжёлый тяжёлый вопрос то есть з вот у тебя операционная система что по сути такое операционная система по сути Ну вот если там когда-то кто-то там бало с ардуин ками к примеру да на на на на мере то вы знаете что что это просто луп да по факту то что у тебя Bootloader запускает твой binary executable там внутри просто луп который бесконечно лупит твой executable если он когда-то заканчивается то всё Dead Вот и у тебя что-то выполняется внутри операционная система - это по сути такой же луб который просто каким-то образом даёт тебе в твои программы какой-то прокиды внешний API То есть ты когда ты говоришь хочу например открыть порт Да вот я на реакте на реакте пишу и хочу себе Local Host там 4.000 открыть Ты не идёшь и говоришь какой-то там Достань сот что-нибудь там я не знаю за создай какой-то соке что-то там сделай прям с нуля прямо на процессоре Нет это всё делает за тебя операционная система у которой есть какие-то вот API для взаимодействия с Нетворк да то есть с твоим вот этим вот с твоей сетью сетевым твоим адаптером и какой-то API для того чтобы программы могли стучаться к этому сетевому адаптеру поэтому к примеру на Mac ты говоришь Вызови мне cisc номер там 16 или там Вызови мне сил номер там 4 Вот то есть всё что тебе нужно для того чтобы создать по сути сот открыть и что-то записать Ну то есть создать HTTP сервер то есть ну tcp по факту тебе нужно просто там сказать операционная система Я хочу я хочу себе сот на таком-то адресе Я хочу сот на таком-то парте я там возьми этот сот Окей У меня есть теперь сот Получи коннекшн на него получил коннекшн на него Прочитай с него то что в него пришло потом в него то что в него пришло и это всё по факту это просто системные вызовы То есть ты это не пишешь с нуля ты пользуешься системными вызовами Но для таких вещей гораздо проще использовать язык программирования потому что язык программирования уже всё это как бы в себя то есть там Довольно простой код но то есть вот эти вот все вещи которые ты на ассемблере взаимодействуют с системой в основном это всё ты делаешь через язык программирования Ну в реальной жизни Если балуешься то конечно можно для себя поиграться это весело то есть там можно на 200 строчек кода написать HTTP сервер а какой-нибудь нодов ский HTTP сервер будет там один package gson будет там 20.000 строк кода package Log вот ну то есть там на самом деле кода практически нет и соответственно можно посмотреть как это работает с точки зрения системы с точки зрения именно выполнения кода То есть если вот у меня ARM на macas и ARM там к примеру у меня какой-то микроконтроллер на Арме с точки зрения какой-то функции которую я буду писать которая просто принимает какие-то данные по конвенциям это будет точно такая же функция всё что связано с внешними какими-то там да адаптерами временем там я не знаю треда и так далее Вот это всё уже будет специфичных систем Ну кстати тут ещё интересно по большому счёту ведь э операционки может и не быть но тебе придётся самому часть вещей написать и собственно она Ну грубо говоря когда всё это представляется себе да типа операционка же тоже программа которая работает взаимодействует с твоей программой в принципе если бы её не было можно было бы и самому написать все эти вещи у тебя бы не было системных вызовов ты бы сам напрямую работал со всеми системами которые там есть Да у тебя там прерывание всё да Ну то есть к примеру берём микроконтроллеры любые как они сейчас делаются У тебя есть у тебя же нет там операционной системы у тебя конечно может быть операционная система но это не весело а потому что операционная система нужна чтобы разные задачи запускать у тебя микроконтроллер он в основном всегда выполняет одну систему одну как бы одну задачу которую тебе нужно сделать прямо сейчас соответственно Как это работает у тебя есть некий Файлик который лежит в операционной системе который твой було Это программа которую за тебя уже написали умные люди берёт и говорит там типа О'кей вот этот вот Файлик возьми его Загрузи в память и начни выполнять инструкции сверху вниз и всё И больше ничего и соответственно ты выполняешь эти инструкции там Ты уже пишешь Сам ты говоришь если мне надо там э к примеру Я хочу там я не знаю считать данные с там с порта вот на ардуина все пишут никто не жалуется gpio Да General purpose Input output Да возьми Считай мне там gpio 17 и 18 посмотри это High или Low То есть у тебя есть напряжение или нет напряжения на конкретном на конкретно уровня Да там И всё И как бы потом уже собственно говоря с этим всем работаешь но опять же То есть у тея всё не так уж всё сложно это очень очень трудозатратно потому что у тебя к примеру там да ты хочешь wi-fi подключить к твоему адаптеру тебе нужно не вызвать функцию wi-fi Connect Password и там пард и си да а тебе нужно сказать возьми считай возьми там Запиши на конкретный GP конкретные там последовательность вот этих вот во и Ну короче да это бывает слишком камен слишком трудозатратно Я же хочу к примеру такой эксперимент провести у себя я хочу сделать на ассемблере на риск пятом э программу для микроконтроллера который будет то есть у меня короче проблема есть Извини сейчас расскажу историю У меня проблема есть Я сейчас в офисе нахожусь здесь Забавно здесь мне никто не мешает И когда я дома У меня есть проблема в том что ээ не видно что я на созвоне сижу и у меня жена начинает там что ты где Ты что ты трусы здесь раскидал и так далее ну утрированно нет такого не происходит это меня она побьёт вот что я хочу сделать Я хочу себе повесить прямо вот так вот на рабочем месте потому что оно мене так огражден но не полностью закрытая комната микроконтроллер который будет Вот там с дисплей ком писать типа до созвона 5 минут или я на созвоне типа тишина и так далее вот и что я хочу сделать Я хочу такой эксперимент провести с графическим интерфейсом написать это всё на ассемблере с нуля на риск с пятом не знаю сколько времени это у меня займёт Но вот это было бы очень Забавно такой эксперимент провести посмотреть в принци принципе сколько кода тебе нужно для того чтобы вот прям вообще без ничего вот вообще просто с нуля без никаких там без Лепсе бе без операционных систем просто написать это всё на том что тебе дали вот с завода там дорогие китайские производители чипсетов в этом плане я тебе расскажу как я такую проблему пытаюсь решать Она нерешаемая когда у тебя дома помимо меня четыре человека да и Каждый думает что только он к папе подходит да там по каждую минуту подходит И ты в итоге вообще сосредоточить не можешь Я по-другому хотел решить эту проблему я хоте просто флаг себе купить который я ставлю когда я занят и который я снимаю когда я не занят Ну да это это тоже работает это чуть проще как ты Пони это чуть проще Да чем чем потратить 2 месяца на то чтобы на ассемблере программе Ну понимаешь то есть у тебя оценка 2 месяца да такой штуки Э ну да я думаю что 2 месяца плюс-минус у меня уйдёт Ну именно в выходных то есть прямо вот прям посидеть и там да это классная история для того чтобы осознать насколько Мы стоим на плечах гигантов вот это все все слои абстракции которые существуют даю можность сфокусироваться смотри получается что вот куча ассемблера Под каждый под каждые штуки И даже если у тебя там программа исполняется давай так м мы сейчас поговорим где они используются Единственное только вот немножко про исполнение да то есть assem супер специфичный вот под такую область и получается что когда вот высокоуровневые языки мы пишем да Ну например Давай копируем е предположим у тебя м существуют разные модели того как сделать так чтобы это работало в разных местах Кстати тут тоже стоит сказать Я насколько я помню так всегда было возможно сейчас это поменялось Но ам по сути это просто человеческий способ записать машинные команды Да инструкции и инструкции то есть там трансляция просто тупейшая там нет никаких абстрактных синтаксических деревьев там вообще ничего такого нет там просто конкретно замена не пассива макрос есть Ну окей но в любом случае там максимально тупая замена как бы чтобы превратить Это непосредственно вот в Полотно которое уже не читается и которое просто видно поэтому получается что это смысле это просто такой синтаксический сахарок не более того А вот когда мы программируем там уже совершенно другая история и вот тут вот тоже провал типа А когда для того чтобы всё это исполниться ну во-первых тебе не нужно чтобы программа внутри превращалась в ассемблер потому что понятно дело мы это не для людей делаем Это мы делаем для машины поэтому фактически когда мы говорим про ассемблер просто чтобы у людей тоже понимало вот это понимание было Да это не просто это низкоуровневый язык программирования способ записи получается что фактически компилятор в простейшем случае он просто переводит это тупо в машинный Код да который на самом деле можно просто сказать А покажи мне это в виде ассемблера потому что там прямая обратная трансляция же работает одинаково да хо Ну естественно да то есть вот это disassemble - Это Ничего иного Как взять то что у тебя на на компьютере лежит да операционной системе у тебя лежит Файлик который программы который ты выполняешь ты говоришь возьми и Переведи мне вот этот машинный код в assem потому что там вот эти все мовы и так далее уже то что можно Ну единички нули как бы тут Конечно надо быть прям да тяжеловато будет дабы это Хотя наверно кто-то кто-то такой дрянью балы да да Ну самое главное То что у тебя в конечном итоге всё превращается Вот в это при этом любую абсолютну программу любой абсолютно код который пишется на любом языке программирования в конечном итоге это инструкции и его можно превратить в ассемблер который не факт что вы поймёте Особенно если это там динамика или ещё что-то потому что там скорее всего так много вокруг происходит церемони особенно если там если там нет дебаг символов То есть как бы когда ты там для себя учишь Ты же тебе говоришь там Оставь мне все функции А обычно это всё Заман То есть у тебя там обычно никаких лейблов ничего нет У тебя есть то есть в итоге что ну то есть Что можно сделать интересное то есть то есть у ассемблера всегда есть как бы текстовая секция сначала идёт где-то указываешь все свои статические переменные ну там к примеру строчки свои Да И вот из любой к примеру программы можно вытащить набор строчек которые она использует То есть к примеру ты та говоришь возьми там Достань мне Я хочу посмотреть любые лейбл которые есть в этой программе и ты уже плюс-минус более-менее поймёшь что там происходит потому что ты видишь весь текст который там написан вот а дальше уже то есть там ну как бы в принципе есть люди которые реверс инжинирия там старейшие вещи там разбираются как они работают То есть это не Ну да можно это сделать в принципе если уче заходить Ну да И вот собственно Следующий вопрос то есть вот получается А у нас есть компиляторы интерпретаторы всякие там виртуальные Машины много всяких страшных слов и в конечном итоге мы хотим писать высокоуровневый код Да который соответственно на разных платформах работает и мы не особо задумываемся у нас кроссплатформенность в динамических языках Это что такое Это ставить слш прямой или обратный Да у тебя в одном случае работает в другом не

работает Забавно Ой да Не ну это серьёзно то есть ты знаешь что если ты ставишь вивы они у тебя нали просто не заработают окей рос платность Да это вот уровень кроп У меня даже стая на эту тему есть я тебе честно скажу я как раз про такие фише динамических языков что там надо использовать и вот просто в двух словах скажи современные вообще подходы за счёт чего это достигается то есть в ло Ну у тебя обычно то есть ну есть два варианта Первый вариант - это lvm То есть это вот это Low Language Virtual Machine Это когда-то был такой язык программирования который они хотели сделать типа левена абстракция над любыми архитектура Но типа иметь это всё в виде в виде ассемблера и как бы читать пи человеком скажем так вот но потом это ВС превратилось в некую такую базу для компилятора то есть что они делают У тебя есть вот этот вот то есть внутренняя репрезентация и компилятор универсаль машины Я просто хотел уточнить то есть по сути это как раз типа попытка сделать универсальный адаптер под все архитектуры который потом можно транслировать за счёт собственно адаптеров под конкретно архите Да ну то есть они из своего вот этого репрезентации уже умеют под люхи транслировать код Потому что почему это самый простой способ потому что эта вещь используется синго То есть сикн - это компилятор C например на M C Вот они используют Apple cang и соответственно у тебя уже готова трансляция там на любые архитектуры которую ты хочешь сделать и твой компилятор то есть там например растов ский код он у тебя сначала компилируется вот в это вот IR а потом вот этот вот вот этот lvm Он уже все оптимизации дела На вот этом уровне То есть тебе даже не нужно все вот эти оптимизации делать самому это очень важно потому что это очень сильно упрощает работу с компиляции кода есть второй вариант Ну го или возьмём к примеру они что делают у них свой код они не используют lvm они сами написали свой компилятор который у тебя на диск уже складывает инструкции Но если покопаться вот в двух этих языках то ты там найдёшь ну к примеру я ВМ очень много копался в своё время то есть там оче очень нормальный момент у тебя например какое-то выражение ты говоришь а ра а + 8 а потом ты говоришь а ра А + B то есть вместо того чтобы сказать там А = B + 8 Ты просто у тебя например две инструкции выполняются вместо одной и это вот Вполне себе очень частая тема Это самый простой вариант но часто бывает такое что у тебя просто там дублируются инструкции И в частности чтобы это починить Ну то есть почему так происходит потому что твой язык программирования по сути берёт то что у него там где-то написано там у него написано а +8 а потом у него в следующей функции это а возвращается и у него уже написано А + B он компилятор этого языка он просто не знает что это две инструкции которые будут выполняться вот тут вот вместе рядышком у тебя вот эта функция за инлайт и тебе не нужно вот эту дупликация делать а он у тебя просто вот ну допускает неэффективный код вот эта внутренняя репрезентация lvm она фиксит это потому что у тебя уже есть готовый по сути мблер типа того и оно уже оптимизирует на этом уровне всё соответственно у тебя получается очень эффективный в итоговый ассемблер то есть там всякие там оптимизации типа очень ну к примеру в арми з очень прикольная инструкция Мне нравится инструкция называется CS increment Что она делает это очень Забавно Она говорит если у тебя условия выполняется то за инкремент другую другой регистр это очень полезная вещь когда тебе нужно к примеру э с массивами Работать это очень популярная тема когда у тебя что-то выполняется то тебе нужно

То есть у тебя говори Ну конечно перейти к следующему элементу Да перейти к следующему элементу и в арми конкретно для этого есть одна целая инструкция и которая делает вот эти две операции как бы на за одну инструкцию прямо на процессоре Хотя это reduced instruction Set Вот и естественно такие вот оптимизации они практически невозможны во второй группе языков которые сами сами Вот про продюс от код потому что у них просто нет столько времени чтобы вот эти всю внутреннюю репрезентацию как бы Файн тюнить Как говорится Да правильно я понимаю что Гошка всё-таки у неё есть тоже фактически свой собственный внутренний свой лвм когда они транслируют в общей а потом они же Крос компиляцию делают под всё или они прям тупо под всё сразу фига нет Ну конечно конечно какой-то свой собственный есть репрезентацию я не я Я с Go не знаю вообще как го конкретно работает я знаю как работает ал к пример у амла есть свой собственный то есть они сначала делают As свой собирают потом они делают чекинг на уровне этого As потом они делают свою внутреннюю репрезентацию и естественно дальше уже каждый конкретный компилятор в Акам это Забавно у них форке компиляторов по факту работает там нет нормальной кроссплатформенность но по факту это тоже самое то есть у тебя просто конкретный компилятор берёт Вот эту вот внутреннюю рею и уже её транслирует в Маши Ну в машинный код в инструкции Да ты сказал форки компиляторов да форки компиляторов то есть дака очень забавная очень забавная кроссплатформенность это подозреваю просто историческое Наследие когда ещ всё это только формировалось да Ну да Да довольно относительно новые он ровесник жава скрипта то есть ну просто такой Забавно е вы никогда наверное не думали о том что надо вот эти вещи делать поэтому сейчас это конечно попаболь давай так если я правильно понимаю значит фактически компилятор под язык должен у тебя сгенерировать м код Дальше он уже не сам а используя какую-то либу там под себя например сиш ную либу Да которая говорит а ну-ка теперь вот изза того что я сделал гери мне да это и есть эта штука это сиш ли ты говоришь если в го вообще этот путь он вообще имеет смысл При таком подходе Мне кажется что ну зачем выполнять эту работу которую у тебя уже есть готовое универсальное решение эффективнее ты хрен напишешь честно говоря просто ресурсов не хватит согласен ну к примеру там разные разные подходы есть то есть Некоторым не нравится это всё потому что ну к примеру у тебя хочется новую архитектуру за саппортить свой язык программирования там я не знаю что-то что-нибудь там куда-нибудь написать его пока ты в поддержку не засунешь У тебя же не будет этой поддержки соответственно новой архитектуры какой-то естественно Ну то есть я вот кстати не очень помню зик Они ушли из лма к примеру у них были была аргументация на это то есть они у них типа у нас простой типа компилятор мы типа делаем все оптимизации Сами мы сделаем лучше чем lvm О'кей типа ну почему нет как это называется competitiveness конкуренция Ну это мне кажется это как раз это с одной из стороны с точки зрения бизнеса это конечно хренова Но это по-любому делают упоротые ребята вот похожи на тебя в плане того что я сам сяду и напишу Да ну кто будет копаться копаться в в ассемблера кроме там упоротых ребят Ну естественно это за это не за это деньги платят То есть как бы если Ну как бы если ты знаешь если ты умеешь разбираться ты можешь как бы ээ есть там те области в которых капец как нужно разбираться в перформансе потому что ну там ты сэкономишь безумное количество денег если ты если ты любишь в этом копаться но это очень занудные такие моменты наверное не для всех Ну опять же не для всех кто я такой чтобы говорить что для всех А что не для всех интересно вот по поводу для всех не за всех за за нуно стоит ремарку небольшую сделать ведь действительно когда ты занимаешься таки настолько низкоуровневые вещами да то реальный объём работы который ты делаешь даже за приличный срок он просто микроскопический То есть ты можешь там оптимизировать просто не знаю там ну просто какой-то очень маленький кусок действительно Большой бизнес операции или большой программы правильно ведь да то есть ты 2 месяца потратил а на самом деле вот Если сравнивать с программистами на высоко уровневых языках объём который ты сделал по реальной работе он маленький просто тебе приходится копаться и далеко не всем это в кайф потому что они такие Блин я ничего не сделал у мне просто знакомый был дибек который вот тоже занимался понятно что он не программированием но смысл в том что он тоже вот копается оптимизирует и он представляешь его в какой-то момент это начал настолько торка он говорит вот тут рядом сидят ребята значит меняют мир интерфейс и всё такое А я сижу значит оптимизируют кстати плюнул и ушёл кафешку свою открывать Ну опять же да Опять же опять же ну как бы понимаешь это разный абсолютно такой как бы подход идея В чём идея в том что действительно ты можешь просто ничего не не сделать обычно задачи которые вот в ассемблере они сводятся к тому что надо попробовать вот эту штуку написать быстрее и это всё уже как бы конкретно Ну как бы то насколько сильно у тебя получится пример fmp как они работают у них есть куча ассемблер Наго кода под все платформы под разные что они делают у них есть некая такая референс на Point Да референсная имплементация Вноси и что они делают они говорят вот там конкретно эту функцию надо переписать быстрее чтобы было И что я знаю точно что к примеру некоторые люди Они получают деньги за это то есть О ни как бы прямо вот то есть у них есть консультации те кор контрибьютор в ffp есть такая компания ffp labs к ним приходит к примеру там какая-то компания говорит я мы вот делаем там такой-то там чипсет для чего-нибудь там YouTube к примеру вот у нас к примеру Проблема в том что во время кодека у нас там памяти используется больше мы хотим это оптимизировать они приходят и говорят хотим это оптимизировать оптимизируйте мне пожалуйста и за это как бы люди получают деньги и там спонсор Ship юба и так далее Вот то есть ээ опять же но это всегда что-то такое копае и там есть такие моменты где по сравнению там с референсной имплементации на они делают 90 то есть вот есть имплементация хорошими программистами на си написанная и есть имплементация написана на амре в 90 раз быстрее потому что компилятор не может ну он просто не может вот эти все все под конкретную платформу то есть такой код сделать который будет Вот настолько быстрый настолько эффективный Ну по сути мы приходим гла главно вопросу тем вообще почему нужен ассемблер да то есть вот мы с тобой немножко проговорили про весь этот путь про исполнение и правильно ли я понимаю что у нас главная в конечном итоге проблема в тех местах где это супер мега критично Вот обработка видео Да там это невероятно критично потому что там операции ти повторяются какой-то безумное количество раз одни и те же и м Сам ты пишешь у тебя уровень оптимизации давай так если мы пишем вс-таки на Высоков языке си или даже ну это Высоков по сравнени с аром то код который они выдают в определённых участках Может быть как ты говорил сейчас по скорости на порядке медленнее чем мог бы быть может да может может быть это не Ну как бы да это нужно это всё естественно нужно тестировать потому что это всё очень очень очень относительно Ну да да области и кейсы где это очевидно и где вот прям люди знают вот здесь нам придётся это делать Я просто понимаю что в орцин ках например там же есть ещё история Что на ассемблере тебе просто надо писать для того чтобы какие-то очень низкоуровневые вещи делать то есть там вопрос не оптимизации А вопрос взаимодействия с железом Ну опять же нужно везде это по факту то есть как бы так сказать Зачем нам нужен ассемблер это всё очень очень тяжело ну как бы он нам нужен всегда потому что мы в любом случае его используем нам Ну как бы так сказать что там вот нам ассемблерные программисты никогда Ну всё не нужны там типа нет естественно это всё ну как бы это база да Это дурацкая фраза но опять же если не будет никого в мире кто разбирается как это технология работает ну как бы ну такого быть не может кто-то там полезет кто-то разберётся А поэтому и естественно Ну как бы разные кейсы есть Есть люди которые там это ну к примеру там криптографией занимаются с на процессоре То есть это тоже такая вещь которая очень сильно то есть там очень много соотвественно арифметики и если ты очень сильно шаришь там в том как можно именно конкретное арифметическое там выражение заору с помощью булевой алгебры к примеру то ты на процессоре можешь делать это всё на амре сильно быстрее есть какие-то тонкости и особенности архитектур соответственно там тоже всё можешь сделать быстрее Дело в том что у тебя Ну вот видео Да в FF в частности есть Ну если ты смотришь YouTube к примеру у тебя Android или iPhone у меня iPhone у кого-то 100% из зрителей есть Android если вы смотрите YouTube на Андроиде то вы используете ам код написанный на ассемблере потому что YouTube он перешёл на av1 то есть это очень эффективный энкодер Точнее ну кодек для видео и adoption сейчас на 2025 год adoption av1 хардверного декодера то есть опять же очень часто для того чтобы видео декоди у тебя в компьютере есть отдельный проце Unit потому что это очень тяжёлая операция Но adoption вот этого кодека он настолько маленький что в основном во всех Андроидах используется софтвер най декодер Вот это кстати почему почему Android хуже чем iPhone потому что ну к примеру на ютубчик у тебя будет батарейка сильнее садится это факт потому что у тебя нет просто Ну скорее всего у тебя нет отдельного отдельного Сета под decoding ev1 Вио и вот этот вот декодинг он имплементировать на уровне CPU и он использует Асем то есть там у этого проекта у этого декодера Э 2.000 нет 260.000 строчек кода на ассемблере написано капец а как это с точки зрения

высокоуровневые что вот ты например запускаешь видео он у тебя внутри такой проверяет О у меня есть такой чипсет запускаю вот эту функцию которая на самом деле написана на ассемблере и она запустит именно тот самый код который воспользуется этим набором инструкций обычны чипсеты они уже собственно говоря это по сути готовый инструмент то есть Ну вот к примеру там э если там к примеру вот кто-то в на Маке видео там кодирует ну к примеру вы хотите там я не знаю из там с какого-то из мова в MP4 перевести или там я не знаю что h264 в 265 у вас уже встроенный в Маке есть видео Toolbox это специальный такой то есть это прям прямо на плате есть отдельный про GPU но только отдельный под конкретную задачу которому процессор даёт говорит Вот тебе видео Дай мне что-то назад и уже сама система с ним сама работает вы этим можете воспользоваться если с F пего вы работаете вы просто говорите вместо encoder lip x265 вы говорите hek нижнее подчёркивание Video Toolbox и соответственно ffm уже сам внутри себя он это всё сделает через вот этот Hardware acceleration и это будет быстрее естественно Если вы используете NVIDIA на линуксе Вы то же самое можете сделать nVidia на GPU Может с помощью куды делать энкодинг но если Ничего из этого нету соответственно естественно у тебя выбор остаётся либо сказать пук-пук-пук всё видео ты не посмотришь сегодня либо уже всё это делать на процессоре А на процессоре у тебя нет такой во-первых параллели зации естественно как я уже говорил есть 7D который очень много используется в том Проекте в частности Но в основном у тебя всё просто пишется вот по Ну вот у тебя гораздо меньше эффективности и гораздо больше батаре ти энергоэффективность медленнее и так далее но этот проект показывает что на ассемблере можно написать очень быстрый код то есть никто не жалуется там на Андроиде что YouTube там лагает Господи может жалуется не знаю Ну да Ну тут я правильно понимаю это как бы проблема такая классическая То есть у тебя всё-таки процессор его задача быть универсальным Поэтому он такой эти штуки они специфические они мало что могут делать но зато они могут это параллели настолько насколько вообще теоретический предел там есть Фит по полной программе да Опять же в чик то есть когда ты выбираешь Кодак кодек по сути с твоей точки зрения как разработчика - это пишка какая-то которую ты дёргаешь как да функции или я неправильно себе представляю как взаимодействие происходит дахо кодеки в основном - это какая-то пишка которую ты устанавливаешь То есть фпе - это по факту просто абстракция над разными кодеками которые существуют вот ну собственно в мире то есть у тебя кодек вообще Это вообще очень интересная вещь то есть мы со своими реакта там со своими вот этими вот вещами в каких-то облаках витаем что такое кодек - это вообще забавная вещь Это 826 или что-то там больше 800 страниц PDF ПДФ которая просто говорит Как работает декодер То есть энкодер ты должен сам придумать как работает Если ты хочешь сам написать энкодер свой Ты должен вот просчитать 800 строчек ПДФ У тебя есть референсный декодер и ты должен написать свой собственный энкодер который будет как бы ну с опекой сопоставим Вот и есть люди которые этим занимаются там фултайм они пишут разные то есть есть там я общался вот с людьми которые просто просто вот сидят там два инженера и просто они там вот весь год просто пишут тебе энкодер 265 чтобы он был типа быстрее чем то что есть для там каких-то облачных там тран тузов которые в Облаке видео транскодирование

тебе что-то накрутить сверху Ну то есть принять Какое количество угодно этих видео каким-то образом их ском соответственно

положить в файлик итога это бесконечная гонка причём это ещё же бесконечно сложно Я вот когда представляю комбинаторику Да у тебя надо писать это на ассемблере соответственно это значит что ты пишешь Это под конкретную архитектуру операционки разные телефоны апдейты Я не понимаю как они это всё в голове своей умещаются и с этим живут А самое главное как потом всё это дебажить А там же ошибки то наверное не то что такие типа Exception и всё классно да да естественно Ну как а как а как по-другому надо быстро надо быстро делать то есть опять же бегу Сколько лет 25 я не знаю много лет э 20 наверное 2004 года чи какого не знаю неважно Ну то же дело не только в его архитектуру сама просто комбинаторика рождает такую проблему естествено комбинаторика да ну да но опять же есть люди которым очень важно Это они как бы есть компании которым это очень важно то есть есть компании большие которых есть люди Ну то есть которые там занимаются видео это их прямая прямая проблема соотвественно если у них что-то там крашится в их продакшене Ну ты ну как бы ты либо обанкротили ты возьмёшь своего инженера и пойдёшь в кобь другого у тебя Выхода нет там незнаю Мета к примеру тоже самое ну там вот Мета использует у себя в в для транскодирование

кода наверное суммарные вообще объём вложенных часов такой Что что Вот только сбоку за платочки накладывать можно и всё Да я знаешь хотел ещё понятна проблема понятна задача то есть для меня например вообще кристально чисто стало я для себя как бы это уложил ребят в комментариях пожалуйста напишите для вас стало ли понятней и насколько вообще Кстати мы ушли в кишки не в кишки потому что Тема интересная но она сложна то есть абстрактно я понимаю что человек который вообще не представляет как работает аем регистр вот это вот перекладывание туда-сюда наверно ему может быть супер будет сложно не знаю просто я когда-то вс-таки с этим разобрался слава Богу хотя Хочешь прикол Я когда учился в Значит на прикладной математики у меня была цифровая схемотехника я полностью провалил этот предмет чтобы ты понимал мне на выпускном Ну там не экзамен был просто зачёт да он мне то есть он понимал что мы все тупые что нам это не интересно он мне просто показывает транзистор и говорит вот э вот палочка Что обозначает вот тако у меня тако вот у меня бы значит проверка но при этом у нас были задания на ассемблере и вот чтобы ты понимал Представь нету вообще у меня в голове вот этой вот картинки там что какие-то регистры программирование для меня это просто выглядело как набор каких-то ячеек в которых я что-то пишу и я просто методом тыка это делал думая что может быть у меня что-то прокатит вот да вот такой вот у меня уровень понимания был и объяснения честно говоря никакого толком не было То есть всё-таки у меня есть претензия к преподавателю Я просто к чему ктому что я после этого разобрался за счёт этой книжки которую я тебе в начале сказал я представляю Вот люди которые не разобрались Интересно как они себя воспринимают от программирование и вот тут я хотел в двух словах всё-таки про сам ассемблер поговорить да Как именно непосредственно штуку как она вообще работает а давай вот просто типа что какие сущности там есть я сразу кстати в кину а люди когда думают про динамические языки часто говорят вот там типа типов там Что там с типами там ничего типов нет и хочется сказать А вот есть ассемблер в котором вот реально типов нет то есть у тебя просто нет типов у тебя нет строк у тебя нет ну строки У тебя есть естественно Ну опять же да виде того как это уже работает да то есть это не совсем так как люди Ну ты можеш пря есть строчку можешь написать сказать Ну вотр примеру написал строчку в текстовом этом сказал что это То есть она заканчивается на или там хочешь нид Вот и просто положил её себе и потом к ней обращаешься но естественно когда ты к ней обращаешься у тебя уже нет как бы понятия тип строчка У тебя есть понятие по То есть как бы у тебя есть понятие аре адрес в памяти то есть тебя в регистре жи не знаю сказать плюс один Ну начнём с того что такое регистры может быть даже это будет проще Да Короче все сущности регистры память там операции Ну регистры короче что такое регистры это э уже как бы данные которые у тебя лежат на процессоре то есть они у тебя уже вот как бы в процессоре в памяти а регистры - это числа Нет там ну к примеру там строчек не может быть на регистре у тебя всегда там какое-то число а число - это соответственно у тебя вот там регистр например X Да X2 Да X3 X4 соответственно у тебя есть какой-то набор регистров там ну я не знаю 20 40 я не знаю сколько угодно Ну там 20 к примеру возьмём ом 28 А этих регистров выбивают разные виды то есть есть X есть W есть D Что это значит Это значит что просто разные типы данных там лежат То есть это один регистр регистров у тебя всего 28 но когда ты говоришь там Положи что-то там в X к примеру X8 ты говоришь Положи мне сюда и в X8 2 ты ложишь туда как бы 64 байта они уже лежат у тебя на на твоём процессоре ты можешь потом сказать Достань мне оттуда репрезентацию Ну то есть восемь байт То есть это ты просто возьмёшь восемь последних байт и считаешь себе куда-то в другое место ты можешь сказать возьми последние восемь байтов это будет регистр w8 но опять же Это один и тот же регистр это одна и та же память физическая которой ты обращаешься но ты можешь как бы смотреть на неё Под разными углами то есть по сути вот ну то есть если так взять подумать что вот эти вот м конверсии примитивных типов ну к примеру ты говоришь там у тебя есть 8 в си да Или у тебя есть там int то int - это всегда будет Вот этот нативный регистр который твою архитектуру есть четырёх битная архитектура у тебя будет 64 вместимость этого регистра соответственно у тебя и вместимость пора уже будет больше это уже такой момент вот и потом ты уже с вот этими вот значениями которые у тебя есть на регистрах ты можешь уже собственно говоря что-нибудь делать Ты можешь сказать возьми пойди Там положи пожалуйста возьми операционная вот память есть в системе Ram да то есть оперативная память Извините ты можешь сказать пожалуйста возьми из регистра X8 Да положи это значение в такую-то ячейку памяти по поинте там такому-то плюс там 12 к примеру и вот это так работает в принципе всё больше там ничего и нет то есть ты просто ручками раскладывает у тебя прямо в голове все ячейки у тебя в голове все цифры Все размеры и ты понимаешь там с такого-то с такого-то позиции по такую-то ты там кладёшь дальше с такой-то оче г пере чу-чу перешло перекрытие А с точки зрения имен процессора системы он чем не работает кроме чисел поэтому там проверок в принципе ну наверное практически никаких не существует то есть совершенно что-то базовое Я бы тут хотел добавить вот вообще про принцип этой работы Типа люди когда думают смотрят Почему вообще регистр А почему вообще так там жеп же по этой ни лас рассказывается это следствие некое того что факти намдо атно железок соединяя их придумать систему которая способна работать как калькулятор но не логическое устройство А вот прямо оно вот прямо у тебя сигнал там т и что-то получилось вот и это довольно сложная система которая собственно ограничена физически определённым способом организации и по факту Этот способ организации привёл к тому что типа О'кей нам нужно просто несколько ячеек памяти у нас есть способ Туда что-то положить и оттуда положить в память уже за пределами процессора да и просто есть Ну так если грубо могу я сказать что по сути есть просто набор команд который теперь позволяет вот играть с этими ячейками если то то то Положи Сложи переложи Достань Загрузи всё Ну да по факту Так оно и есть то есть даже вот эти кэши Да L2 L3 ты как бы с ними не работаешь по факту что это такое Это очень тоже такой важный момент может для для просто для понимания как это должно работать а по идее у тебя просто его не было вот этой концепции Шей не было до какого-то момента вообще потом поняли что ходить в в оперативную память это очень долго то есть у тебя вот каждый тебе там например нужно 700.000 раз обратиться там к какому-то какой-то кусочку памяти и просто это каждый раз большой дилей что придумали на процессоре они придумали дополнительную память которая лежит вот на процессоре уже сейчас и когда тебе нужно обратиться то есть ну когда ты говоришь обратись к ячейке номер там 1.700 там что что-нибудь а он сначала смотрит есть в кэше Там в первом уровне во втором в третьем и потом только идёт в в оперативную память со чем больше у тебя тея кша тем больше у тебя кэш хит соответственно тем больше у тебя тем меньше у тебя леев для операционной для для памяти но с твоей точки зрения как для человека который пишет Асем Ты просто говоришь там вот у меня пожалуйста вот у меня есть буфер к примеру какой-нибудь Я не знаю я его достал там я не знаю из операционной системы я молок нул его опять же такой момент ты можешь ты Вполне себе можешь использовать А из си то есть lip c - это такой часть ошки Ты можешь её просто взять и сказать любую сиш ную функцию взять вызвать из ассемблера это не проблема потому что ты уже ну как бы какая разница если у тебя она доступна есть ты можешь её вызвать она тебе к примеру даст буфер что такое буфер с точки зрения ассемблера это просто Потер то есть по сути адрес памяти с которого буфер начинается Да и потом у тебя есть соответственно какая-то длинна но ты её как бы ну это абстрактно ты сам её себе записал чтобы знать как с ней работать Сколько у тебя там длины есть если длина неправильно Извини пожалуйста у тебя будет какие-то там символы не те либо будет фолт к примеру разные проблемы могут быть Вот Но токи зрения Да ты просто берёшь манипулирует Ну либо собственно говоря числами проформа это называется алгоритмически логическое устройство да алу Это очень классное такое понятие которое абстрактно как машина очень прикольно её разбирать более того существует же онлайн да большое количество виртуальных машин которые позволяют со всем этим поиграться Вот именно в этом режиме Когда у вас есть простая система Я на гитхабе видел несколько прикольных имплементации Можно пописать программы вот ты говоришь устанавливать даже ничего устанавливать не надо там x86 например Какие ещё простейшие имплементации самые базовые где основные инструкции пошёл почекати память показали короче набо тоже так можно сделать дадада да это прикольно здесь кстати вот ты по поводу кэше сказал они действительно очень сильно ускоряют Там просто люди может быть опять же кто с этим не работал они слышали Что там у каких-то там программистов спрашивают знания про эти кэши там ускорение какой-то Ну сумасшедшее насколько порядков именно связано тем что сходить в память это просто физический длинный процесс у вас там процессор и куда-то там в плату в другую надо передать данные это очень долго прямо очень и Ну а даже у тебя память может быть распаять на на на арми Но всё равно То есть это целая проблема Почему Потому что э тебе нужно во-первых физически достать ээ ну как бы это естественно у тебя оно всегда запитан оперативная память но то есть опять же оперативная память быстрая по сравнению там с Хард драйвом Да но когда тебе нужно это сделать не один раз а миллиард раз в секунду да то есть у тебя там каждый как ну там какой-то задержка на од нано секунду когда у тебя данные вот здесь нужны А их нет надо сходить и вот это Каждый каждый раз это ну X2 X3 X4 может быть раз дольше Да я просто хотел сказать что именно по этой причине вот эти кэши они во-первых прозрачно для человека именно потому что они аппаратно реализованы Потому что если бы это было не аппаратно тогда это так бы было медленно потому что это тип тоже надо было ручками это всё делать а там это идёт по некоторым прямым путям которые автоматически работают по линиям знаешь что я ещё хотел добавить Вот кстати я всегда оче рекомендую читать книжки про операционки Да я вот помню меня очень сильно это впечатлило когда я давным-давно читал одну из таких книжек по Ну не танен Баума но кого-то похожего да и он там объяснял про принцип по-моему Принцип локальность называется Да что если у тебя есть запрос какого-то участка памяти у тебя с очень высокой вероятностью будут запрошены данные из соседнего участка и поэтому м там не очень сложная логика загрузки этих кэше да то есть это знаешь вот как сейчас пытаются фетч делать на страничках да э когда человек по браузеру ходит и пишут что есть системы автоматические которые там предсказывают это с очень высокой точностью и всё такое сложно ещё говорить Я не сильно в это копал но некоторые видимо заморачиваюсь и Сильно активно это используют видимо крупные корпорации Да но вот на процессоре там легко То есть если у тебя просит какой-то участок памяти Я не знаю там плюс 100 байт ещё Ну это я та очень упрощённое да и просто погрузил да это так работает там разные оптимизации соответственно есть на разных операционных системах но опять же там это кэша то есть Если так подумать там что-то 64 КБ да1 кэша сейчас популярно бывает это очень много 64 КБ это сколько это же это же очень много данных то есть мы привыкли 64 КБ что это такое то есть это же это огромное количество именно Ну чисел которые ты можешь получить То есть это То есть это несколько строчек туда можно засунуть и соответственно Эти строчки у тебя там прямо лежат на процессоре То есть ты можешь сказать там хочу строчку перебрать там ну там я не знаю реверс строчки сделать соответственно тебе не нужно каждый раз ходить в память За каждым символом она у тебя уже вот тут вот уже лежит и ты уже каждую эту строчку уже перекидывает ещё гораздо лучше после этого начинаешь понимать Почему копирование строк - это зло и к чему это прит да вот это кстати да забавная вещь очень многие не понимают в чём прикол вообще ну то есть Вот например Почему копировать Почему строчку скопировать это это тяжело то есть когда ты начнешь работать со строчками на каком-нибудь там даже на си в принципе то есть ты вот на си например начинаешь А у тебя Бат у тебя нет конкатенации бам тебе нужно новую память выделить тебе нужно взять пойти посимвольно переложить то есть м CPU сделать И ты такой а

по и причём и Да и ты начинаешь думать А что ж так-то Ну или например там хэш мапы да то есть моя любимая тема Вот это я люблю когда хэш мапы хэш сеты везде суют подряд а ты физически Я вот недавно тоже в Твиттере написал просто логарифмическую сортировку которая не не добавляет новую память ничего не лоцируется и она просто рвёт эту вот шс Ну там алгоритм поиска самой длинной входящей строки порядковой Просто просто в в труху рвёт потому что просто быстрее физически сделать больше операций алгоритмически чем там новую память аллоцировать Да это уже история для ребят которые серьёзно В этом копают и здесь Довольно интересно раз уж ты про алгоритмы сказал добавить то что когда алгоритм есть оценка теоретической сложности Да это очень часто не бьётся с тем как это на практике происходит потому что у тебя есть задержки там любые там по проводам по оптимизация каким-то операциям и в итоге размеру чисел например банально даже да у тебя получается что сложно предсказать Даже если ты знаешь теоретическую сложность например решения алгоритма своего Да сложно предсказать Что будет на практике правильно ведь может быть очень неожиданные результаты из всегда нужно бенчмарки запускать всегда всегда всё очень сильно зависит от машины от архитектуры от всего то есть ши которые вклю ши Ну кши обычно это всегда всё всё всё всё предсказуемо работает то есть именно зависит от твоего от компилятора от того что у тебя в итоге получится ну я имел в виду скорее ши знаешь в каком смысле то есть когда человек на очень высоком уровне Он же не знает про существование всего что там есть Вполне возможно что там просто есть какие-то вещи которые ты не догадывался Да хорошо А давай проле в двух словах с точки зрения девелопе экспириенс смотри ну подсветка кода Я подозреваю есть но вообще что в принципе может дать редактор и Тулин то есть какой там вообще Тулин вот для меня это вот это Забавно Я как раз я как раз недавно снимал видео на свой канал извини прорекламировать

полезно то есть в плане того что ну как бы обычно автокот Ну по символам да то есть Ладно У тебя есть свои лейбл это у тебя редактор может то есть во-первых Очень важно понять что на ассемблере не пишут большие продукты с нуля на ассемблере пишут имплементации функций То есть я там балуюсь пишу там прямо 200 строчек кода там что-то маленькое приложение но то как пишут А сейчас в основном Это маленькие функции у которых есть френ имплементация на C это может быть очень даже вот там 260.000 строчек кода но так и написано то есть у тебя есть как бы очень изолированный кусочек кода на assem Соответственно в этом случае у тебя Ну он может быть за энлайн у тебя в язык программирования это тоже очень часто происходит там лай assembly в C или там вра или где угодно поэтому даже синтакс хайлайн у тебя очень часто нет но если у тебя отдельный точка S файл то конечно у тебя есть и соответственно дальше ты уже как бы Ну дальше уже сугубо редактирует текст потому что Ну автокомплект ну какой смысл автокомплект когда у тебя все инструкции - это три буквы Ну какой Какой бенефит у тебя это

автокомплектация ци всё Слушай ну а перекрытия по памяти что-нибудь Ну какие-то вот помощь подсказки Возможно или это всё слишком есть керы да то есть Есть Ну как бы есть много тузове которые позволяют тебе дебажить разные ворота мемори Лики но опять же в ассемблере это не так популярно То есть когда ты в амре пишешь ты как бы подразумевал что ты уже понимаешь плюс-минус что ты делаешь Как это всё работает с точки зрения именно там например есть очень много разных тун которые позволяют тебе практически писать сей код и быть уверенным даже есть формальна верифицированный компилятор носи Ну да ладно это такое дело то есть основная идея в том что когда ты на семре ты уже как бы подразумевается что ты понимаешь как ты должен имплементировать эту конкретную функцию Ну по крайней мере в основном это то как я работал со плем уже у тебя есть понимание как это должно работать и ты просто ищешь пути Как сделать это быстрее Как это там запараллелить как это там оптимизировать Как обойтись без лишних инструкций Как там переиспользовать буфер лишний раз и так далее Довольно интересно получается то есть у тебя инструментарий более простой в целом ты пишешь более изолированные штуки Да а объём суммарный и сложность э большой за счёт огромной комбинаторики Просто я так знаешь вот думаю если бы всё это свело к тому что ну гипотетически существует ровно одна архитектура как будто бы вообще сама магия вот этого программирования под assem была бы гораздо более простой да то есть большая часть сложности бы тупо ушла коне но опять же да Ну смотри Ты уже упоминал Что также сложно очень именно держать в памяти вот эти вот ну то есть То есть у тебя нет виновных там переменных аргументов у тебя нет вот этих структур да то есть у тебя ты хочешь там несколько данных в буфер положить Ты должен понимать что где какой офсет то есть обычно там наноси у тебя эти оффсеты всё контролирует компилятор Ты должен в башке это держать у себя это может быть очень большим источником оптимизации Потому что ты знаешь там О у меня тут офсет такой-то а вот тут я знаю что у меня такой-то офсет Поэтому я считаю здесь это чтобы там вот так вот хоп и я там сэкономил там лишнее обращение к памяти это может быть полезно но опять же это очень редко штука если ты говоришь с точки зрения фана писать это вот когда ты там какой-то такой вот ну балуешься буквально говоря то есть там Я хочу там на на семре написать там я не знаю что-нибудь там реак компоненты О'кей ты такой написал Оно у тебя Что там такое маленькое изолированное То есть в принципе ты так в голове это всё держишь оно работает там какой-нибудь там я не знаю заре роли кого-то в этом в коде такой О классно весело Ну а практически если ты оптимизирует код то там уже это всё с точки зрения именно инструментарии конечно страдает Да прикольно Дим тебе большое спасибо что пришёл Спасибо тебе что позвал мне Мне кажется мы хорошо поговорили мне будет интересно посмотреть ребят на говорю вашу реакцию потому что Тема была сложная здесь Прямо даже знаешь пока мы разговаривали я увидел что по пути там можно столько ответвлений ещё взять чтобы это пообсуждали

это видео Это может быть ВКонтакте это может быть YouTube может быть где-то ещё и подписывайтесь на мой Telegram канал в котором я рассказываю про эффективную разработку и там много чего интересного происходит

[музыка]

Creators and Guests

Дмитрий Коваленко
Guest
Дмитрий Коваленко
Опенсорс контрибьютор в проекты как ffmpeg/cypress/material-ui. Разработчик фулл-тайм на раст. Пишу код на ассемблере. Работаю с медиа.
#28 Почему ассемблер остается актуальным в 2025 году?  | Дмитрий Коваленко
Broadcast by