Мемы и личные размышления про управление, код, ml и здравый смысл. Сейчас руковожу командой OCR in VLM в Яндексе. Автор: @toshiksvg
О важности инструментов
В своей жизни я слушал несколько раз курсы по одним и тем же языкам программирования 🤪. Это были C++, Python, SQL
, и т.д. И если в первый раз я посещал пары для того, чтобы понять какие-то основы и хитрости этих инструментов, то в следующие разы для меня важно было ознакомиться с инфраструктурой вокруг языка: инструменты для анализа, кодогенераторы, различные профилировщики и т.п. Я всё еще так скажем в начале этого пути (как мне кажется) 🤓, но сейчас о другом.
На днях я читал интересный пост в котором автор ставит перед собой задачу добавить runtime
контекста для указателей на функции.
Для простоты я всегда представляю указатель на функцию как номер телефона мастера (например, сантехника): вы звоните ему, говорите что сделать, он делает. Runtime
контекст — это когда я не просто даю вам номерок мастера, а еще предупреждаю мастера о каких-то работах, потому что вам по каким-то причинам сложно ему про эти работы рассказать.
В современном С++
понятно (о чем и пишет автор) как сделать, а вот для C
или смеси двух этих языков — не всегда очевидно. И в целом как это делать — это предмет поста автора, а мне вот что было интересно: в конце статьи указывается, что один из способов растит размер программы очень сильно. Мне сходу понятно, в чем проблема: я уже видел много такого. А что делать новичку? И что я вообще делаю в таких случаях, даже если уверен, что происходит? 🤔
Я посещаю инструменты, о которых мне рассказали на одном из курсов по C++
. Считаю, это просто must have инструменты для любого C++
разработчика. Это godbolt.org
и cppinsights.io
. Первый позволяет смотреть на дизассемблер кода, второй — позволяет поглядеть на код, после того, как компилятор сделает с ним множество магических штук 🙃.
Одной из магий С++
компилятора является инстациация шаблонов, т.е. в некотором роде подстановка типов. Мы пишем шаблон, который должен работать для определенного набора типов (базово — для всех). После того, как мы используем шаблон в коде, шаблон должен превратиться в код (по аналогии: есть шаблон договора, а есть договор).
Собственно если зайти и посмотреть, как происходит магия компилятора для предложенного автором кода, то даже новичок, который недавно узнал, что такое шаблоны в С++
поймет, в чем же там дело ☺️. А проблема в том, что автор сделал кодогенерацию настолько большой, что она может расти неимоверно сильно.
Без инструмента нужно всё равно подумать, даже если опыт есть. А инструмент тебе приносит готовый результат очень быстро: тем самым можно потратить время на что-то другое, не менее полезное 🔼.