blog_toxa | Unsorted

Telegram-канал blog_toxa - Дратути Антон

4308

Мемы и личные размышления про управление, код, ml и здравый смысл. Сейчас руковожу командой OCR in VLM в Яндексе. Автор: @toshiksvg

Subscribe to a channel

Дратути Антон

О важности инструментов

В своей жизни я слушал несколько раз курсы по одним и тем же языкам программирования 🤪. Это были C++, Python, SQL, и т.д. И если в первый раз я посещал пары для того, чтобы понять какие-то основы и хитрости этих инструментов, то в следующие разы для меня важно было ознакомиться с инфраструктурой вокруг языка: инструменты для анализа, кодогенераторы, различные профилировщики и т.п. Я всё еще так скажем в начале этого пути (как мне кажется) 🤓, но сейчас о другом.

На днях я читал интересный пост в котором автор ставит перед собой задачу добавить runtime контекста для указателей на функции.
Для простоты я всегда представляю указатель на функцию как номер телефона мастера (например, сантехника): вы звоните ему, говорите что сделать, он делает. Runtime контекст — это когда я не просто даю вам номерок мастера, а еще предупреждаю мастера о каких-то работах, потому что вам по каким-то причинам сложно ему про эти работы рассказать.

В современном С++ понятно (о чем и пишет автор) как сделать, а вот для C или смеси двух этих языков — не всегда очевидно. И в целом как это делать — это предмет поста автора, а мне вот что было интересно: в конце статьи указывается, что один из способов растит размер программы очень сильно. Мне сходу понятно, в чем проблема: я уже видел много такого. А что делать новичку? И что я вообще делаю в таких случаях, даже если уверен, что происходит? 🤔

Я посещаю инструменты, о которых мне рассказали на одном из курсов по C++. Считаю, это просто must have инструменты для любого C++ разработчика. Это godbolt.org и cppinsights.io. Первый позволяет смотреть на дизассемблер кода, второй — позволяет поглядеть на код, после того, как компилятор сделает с ним множество магических штук 🙃.

Одной из магий С++ компилятора является инстациация шаблонов, т.е. в некотором роде подстановка типов. Мы пишем шаблон, который должен работать для определенного набора типов (базово — для всех). После того, как мы используем шаблон в коде, шаблон должен превратиться в код (по аналогии: есть шаблон договора, а есть договор).

Собственно если зайти и посмотреть, как происходит магия компилятора для предложенного автором кода, то даже новичок, который недавно узнал, что такое шаблоны в С++ поймет, в чем же там дело ☺️. А проблема в том, что автор сделал кодогенерацию настолько большой, что она может расти неимоверно сильно.

Без инструмента нужно всё равно подумать, даже если опыт есть. А инструмент тебе приносит готовый результат очень быстро: тем самым можно потратить время на что-то другое, не менее полезное 🔼.

Читать полностью…
Subscribe to a channel