Постоянное запоминание кода в компиляторах и средах выполнения - PullRequest
4 голосов
/ 24 сентября 2011

Я считаю, что концепция кеша кода (например, ccache ) должна быть расширена до более мелкозернистой памятки как промежуточного кода (IC), так и целевого кода ( TC) в компиляторах, таких как GCC или LLVM + Clang.

Это может быть использовано для целого ряда новаторских умов, приносящих пользу как программисту производительности , так и производительности во время компиляции, выполнения и оперативной памяти.

Более конкретно, этот репозиторий (или база данных) должен автоматически кэшировать IC и TC функций. Затем их можно найти и повторно использовать в различных наборах сборок (скомпилированных только один раз, чтобы связать множество) в разных наборах программ и библиотек, а не только через границы объектов во время компоновки (LTO).

Это будет особенно полезно для C ++ STL контейнер-алгоритм-реализации. Например, сколько раз алгоритмы, такие как std::sort, примененные к std::vector<T>, не создавались, не оптимизировались и не компилировались в разных программах с использованием одного и того же типа T, обычно int, float и double?

В реализации IC-модули должны индексироваться ключами, построенными из хэш-цепочки (должно быть достаточно SHA-1) конфигурации компилятора и IC-кода дерева (включая код поддерева) -хэши функций, которые он вызывает) и хранятся, например, в std::unordered_map, обеспечивающем дешевых поисков . Чтобы еще больше способствовать повторному использованию кода, IC-репозиторий может быть переведен онлайн как сетевой сервис .

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

Этот проект уже доказал полезность этой идеи применительно к языку Python. Я считаю, что Haskell (GHC) может быть идеальным языком для экспериментов с этими идеями из-за своей чистоты функций по умолчанию и гибкого контроля побочных эффектов функций.

...