tgoop.com/hft_dev/8
Last Update:
Если хочется поисследовать что компилятор делает с кодом, то у нас есть один божественный инструмент - Godbolt.
Я периодически им пользуюсь, и для упрощения работы есть несколько идей:
1. Можно навести на assembly команду и получить короткую справку. В контекстном меню можно нажать "View assembly documentation" и там получить более детальную документацию и ссылку на полные спеки.
2. Не обязательно писать main, т.к. компилятор собирает object file, а не финальный бинарник. Хотя собрать бинарник и запустить тоже можно (и даже прописать stdin для него).
3. Можно подключить библиотеки из некого ограниченного набора. Например, есть libfmt, boost, pybind, simdjson, qt. Отдельно упомяну, что можно инклудить single file header-only по http url'у (пример), но лично я не нашел этой фиче применения.
4. Для запоминания конфигурации окон есть Templates в верхнем меню. Например, я сохранил и использую шаблон для компиляции сразу в clang и в gcc с типовыми аргументами -O3 -DNDEBUG -std=c++20
.
5. В Obsidian держу наготове snippet:
// __attribute__((noinline)) // [[gnu::noinline]]
template <class Tp>
inline __attribute__((always_inline)) void noopt(Tp const& value) {
asm volatile("" : : "r,m"(value) : "memory");
}
Можно также сохранить в "Brower local storage" прямо в compiler explorer.
Если ты батя, которому это всё понятно и очевидно, то буду благодарен твоим персональным tips&tricks в комментах.
А вообще, удивительно, насколько широко он развился. Сейчас поддерживается несколько десятков языков (47 на конец 2022 года), и почти две тысячи компиляторов/интерпретаторов. Из понятных мне есть Go, Python, C#, Java, Javascript, Rust, Zig, Assembly, а из интересного, есть компиляция в CUDA бинарник.
Репозиторий проекта: https://github.com/compiler-explorer/compiler-explorer
Grafana для любопытных: https://ce.grafana.net/public-dashboards/326d9aa2606b4efea25f4458a4c3f065?orgId=0&refresh=1m
BY Один микросек - C++, low latency, concurrency, HFT
Share with your friend now:
tgoop.com/hft_dev/8