КЭШИРОВАНИЕ ГЕНЕРИРУЕМОГО ВО ВРЕМЯ ВЫПОЛНЕНИЯ КОДА

1. Система (100), которая кэширует генерируемый во время выполнения код, содержащая:
компонент (120), выполняющийся в среде управляемого кода на компьютере, при этом компонент кэширует объект (116, 111) в первом кэше (109, 108) или во втором кэше (109, 118), при этом кэшируемый объект (116, 111) содержит генерируемый во время выполнения код, при этом генерируемый во время выполнения код генерируется динамически генерирующим код объектом, причем динамически генерирующий код объект не изменяет глобальное состояние, в которой кэшируемый объект (116, 111) извлекается из первого кэша (109, 118) или второго кэша (109, 118) при последующих выполнениях кэшированного объекта (116, 111), пропуская, по меньшей мере, одну фазу генерации кода, при этом пропущенная, по меньшей мере, одна фаза генерации кода содержит генерацию промежуточного байт-кода или генерацию собственного двоичного кода.
2. Система по п.1, в которой первый кэш содержит кэш, который хранит промежуточный байт-код, представляющий генерируемый во время выполнения код, и в которой, по меньшей мере, одна пропускаемая фаза генерации кода содержит генерацию промежуточного байт-кода для генерируемого во время выполнения кода.
3. Система по п.1, в которой второй кэш содержит кэш, который хранит собственный двоичный код, и в которой, по меньшей мере, одна пропущенная фаза генерации кода содержит генерацию собственного двоичного кода для генерируемого во время выполнения кода.
4. Система по п.1, в которой первый кэш является кэшем исходной сборки и в которой, по меньшей мере, одна пропущенная фаза генерации содержит генерацию промежуточного байт-кода для генерируемого во время выполнения кода, или генерацию собственного двоичного кода для генерируемого во время выполнения кода.
5. Система по п.1, в которой промежуточный байт-код для генерируемого во время выполнения кода извлекается по идентификатору, состоящему из имени, ассоциированному с динамически генерирующим код объектом, по меньшей мере, одного аргумента, передаваемого к динамически генерирующему код объекту, и указателя версий для динамически генерирующего код объекта.
6. Способ кэширования генерируемого во время выполнения кода, содержащий этапы на которых:
вычисляют идентификатор (304) для объекта, содержащего генерируемый во время выполнения код, сгенерированный чисто функциональным генерирующим во время выполнения код объектом, при этом объект сгенерированного во время выполнения кода содержит промежуточный байт-код, созданный механизмом порожденного отражения, при этом вычисленный идентификатор содержит зависящие от контекста выполнения характеристики генерируемого во время выполнения кода;
сохраняют объект в первом кэше, снабженным ключом на основании вычисленного идентификатора, при первом выполнении объекта (320);
возвращают (322) сохраненный объект в ответ на второе выполнение сохраненного объекта, в котором генерацию промежуточного байт-кода для сохраненного объекта пропускают для второго выполнения сохраненного объекта.
7. Способ по п.6, дополнительно содержащий этапы на которых:
генерируют собственный двоичный код для генерируемого во время выполнения кода из промежуточного байт-кода для сохраненного объекта.
8. Способ по п.7, дополнительно содержащий этапы на которых:
кэшируют сгенерированный собственный двоичный код в кэше собственного двоичного кода, содержащий второй кэш.
9. Способ по п.6, в котором первый кэш или второй кэш является исходной сборкой, содержащей сохраненный объект.
10. Способ по п.6, в котором вычисленный идентификатор содержит идентификатор, состоящий из: имени, ассоциированного с чисто функциональным генерирующим код во время выполнения объектом, по меньшей мере, одного аргумента, переданного к чисто функциональному генерирующему во время выполнения код объекту, и указателя версии для чисто функционального генерирующего во время выполнения код объекта.
11. Машиночитаемый запоминающий носитель, содержащий машиноисполняемые инструкции, которые, когда выполняются, побуждают управляемую вычислительную среду:
кэшировать объект в первом кэше или во втором кэше, при этом объект содержит генерируемый во время выполнения код, генерируемый генерирующим код во время выполнения объектом, который не изменяет глобальное состояние, причем кэшированный объект извлекается при последующем выполнении объекта, пропуская, по меньшей мере, одну фазу генерации кода в последующих выполнениях.
12. Машиночитаемый запоминающий носитель по п.11, содержащий дополнительные машиновыполняемые инструкции, которые когда выполняются, побуждают вычислительную среду:
пропускать генерацию промежуточного байт-кода для генерируемого во время выполнения кода для последующих выполнений кэшированного объекта.
13. Машиночитаемый запоминающий носитель по п.11, содержащий дополнительные машиновыполняемые инструкции, которые, когда выполняются, побуждают вычислительную среду:
пропускать генерацию собственного двоичного кода из промежуточного байт-кода для кода, генерируемого во время выполнения, для последующих выполнений кэшированного объекта.
14. Машиночитаемый запоминающий носитель по п.13, содержащий дополнительные машиновыполняемые инструкции, которые когда выполняются, побуждают вычислительную среду:
кэшировать собственный двоичный код или промежуточный байт-код в исходной сборке кэшированного объекта.
15. Машиночитаемый запоминающий носитель по п.13, содержащий дополнительные машинновыполняемые инструкции, которые когда выполняются, побуждают вычислительную среду:
предоставлять объект с конкретной идентификацией, использующей зависящие от выполнения характеристики кэшируемого объекта; и
извлекать кэшированный объект из первого кэша или второго кэша, снабженного ключом по конкретной идентификации.