RU2646329C2 - Генерирование и кэширование кода программного обеспечения - Google Patents

Генерирование и кэширование кода программного обеспечения Download PDF

Info

Publication number
RU2646329C2
RU2646329C2 RU2014133160A RU2014133160A RU2646329C2 RU 2646329 C2 RU2646329 C2 RU 2646329C2 RU 2014133160 A RU2014133160 A RU 2014133160A RU 2014133160 A RU2014133160 A RU 2014133160A RU 2646329 C2 RU2646329 C2 RU 2646329C2
Authority
RU
Russia
Prior art keywords
code
source code
source
execution
compiled
Prior art date
Application number
RU2014133160A
Other languages
English (en)
Other versions
RU2014133160A (ru
Inventor
Джомо ФИШЕР
Майкл Вэйн ДЖЕКСОН
Юнус КИЛИК
Стивен Эдвард ЛУККО
Джесс Д. МАКГЭТА
Еджей З. МЯДОВИЧ
Стивен Дж. СТЕЙНЕР
Original Assignee
МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи filed Critical МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи
Publication of RU2014133160A publication Critical patent/RU2014133160A/ru
Application granted granted Critical
Publication of RU2646329C2 publication Critical patent/RU2646329C2/ru

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Изобретение относится к способу генерирования кода программного обеспечения. Технический результат заключается в обеспечении генерирования и кэширования кода программного обеспечения, которое может включать в себя исходный код, который не был скомпилирован, так что это программное обеспечение может быть скомпилировано и исполнено без задержки. Принимают запрос на исполнение программного обеспечения, которое включает в себя исходный код, при этом исходный код представляет собой файл сценария для страницы веб-сайта, для которой явная ссылка на этот файл сценария не была получена. В ответ на этот запрос определение, был ли второй код сгенерирован из исходного кода и сохранен в энергонезависимой памяти, при этом это определение, был ли второй код сгенерирован из исходного кода и сохранен в энергонезависимой памяти, содержит проверку на предмет второго кода в некотором известном местоположении энергонезависимой памяти, причем это известное местоположение выводится из ссылки, которая идентифицирует исходное местоположение исходного кода, причем исходное местоположение доступно по сети. 3 н. и 10 з.п. ф-лы, 6 ил.

Description

УРОВЕНЬ ТЕХНИКИ
[0001] Языки сценариев можно обнаружить в различных средах. Например, многие Интернет браузеры имеют язык сценариев, который позволяет web-страницам настраивать свое поведение на основании ввода пользователя и прочих данных. Языки сценариев также можно обнаружить в средах за пределами Интернет браузеров. Одна проблема с языками сценариев состоит в том, что они могут быть медленными - в особенности при запуске и возможно при каждом исполнении - в сравнении с обычными программами, которые были скомпилированы.
[0002] Заявленный в данном документе предмет изобретения не ограничивается вариантами осуществления, которые решают любые недостатки или которые функционируют лишь в средах, таких как те, что описаны выше. Наоборот, данные предпосылки создания изобретения предоставлены только для иллюстрации одной примерной области технологии, в которой могут быть реализованы на практике некоторые описываемые в данном документе варианты осуществления.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0003] Вкратце, аспекты описываемого в данном документе предмета изобретения относятся к генерированию и кэшированию кода программного обеспечения. В аспектах, целевое устройство может принимать программное обеспечение для установки. Программное обеспечение может включать в себя исходный код, который не был скомпилирован. Целевое устройство может устанавливать программное обеспечение и указывать, что исходный код пакета должен быть скомпилирован в промежуточный или исполняемый код, который сохраняется постоянно. Если целевое устройство принимает запрос на исполнение программного обеспечения до того, как оно скомпилировано, то целевое устройство может скомпилировать и исполнить программное обеспечение без задержки. Если целевое устройство принимает запрос на исполнение программного обеспечения после того, как оно скомпилировано, то целевое устройство может получить и исполнить скомпилированный код. Вышеприведенное поведение также может быть применено к коду сценариев, полученному от сервера, удаленного по отношению к целевому устройству.
[0004] Данная Сущность Изобретения предоставлена для краткой идентификации некоторых аспектов предмета изобретения, которые дополнительно описываются ниже в Подробном Описании. Данная Сущность Изобретения как не предназначена идентифицировать ключевые или неотъемлемые признаки заявленного предмета изобретения, так и не предназначена использоваться для ограничения объема заявленного предмета изобретения.
[0005] Фраза «описываемый в данном документе предмет изобретения» относится к предмету изобретения, который описывается в Подробном Описании, до тех пор, пока контекст явно не указывает обратное. Понятие «аспекты» следует читать как «по меньшей мере, один аспект». Идентификация аспектов предмета изобретения, описываемого в Подробном Описании, не предназначена идентифицировать ключевые или неотъемлемые признаки заявленного предмета изобретения.
[0006] Описанные выше аспекты и прочие аспекты описываемого в данном документе предмета изобретения иллюстрируются в качестве примера и не ограничиваются сопроводительными фигурами, на которых подобные цифровые обозначения указывают аналогичные элементы, и на которых:
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0007] Фиг. 1 является структурной схемой, представляющей собой примерную общего назначения вычислительную среду, в которую могут быть включены аспекты описываемого в данном документе предмета изобретения;
[0008] Фиг. 2 является структурной схемой, представляющей собой примерную компоновку компонентов системы, в которой могут функционировать аспекты описываемого в данном документе предмета изобретения;
[0009] Фиг. 3 иллюстрирует примерную структуру данных, которая может быть использована в соответствии с аспектами описываемого в данном документе предмета изобретения;
[0010] Фиг. 4 является структурной схемой, представляющей примерную компоновку компонентов среды, в которой могут функционировать аспекты описываемого в данном документе предмета изобретения; и
[0010] Фиг. 5-6 являются блок-схемами, которые в целом представляют примерные действия, которые могут происходить в соответствии с аспектами описываемого в данном документе предмета изобретения.
ПОДРОБНОЕ ОПИСАНИЕ
ОПРЕДЕЛЕНИЯ
[0012] Используемое в данном документе понятие «включает в себя» и его варианты следует читать как неограниченные понятия, которые означают «включает в себя, но не ограничивается». Понятие «или» следует читать как «и/или» до тех пор, пока контекст явно не диктует обратное. Понятие «основан на» следует читать как «основан, по меньшей мере, частично на». Понятия «один вариант осуществления» и «вариант осуществления» следует читать как «по меньшей мере, один вариант осуществления». Понятие «другой вариант осуществления» следует читать как «по меньшей мере, один другой вариант осуществления».
[0013] Используемые в данном документе формы единственного числа являются включающими в себя один или более из указанного элемента или действия. В частности, в формуле изобретения ссылка на элемент в целом означает, что присутствует, по меньшей мере, один такой элемент, а ссылка на действие означает, что выполняется, по меньшей мере, один экземпляр действия.
[0014] Иногда в данном документе могут использоваться понятия «первый», «второй», «третий» и т.д. Без дополнительного контекста, использование этих понятий в формуле изобретения не предназначено предполагать очередность, а наоборот используется в целях идентификации. Например, фразы «первая версия» и «вторая версия» не обязательно означают, что первая версия является самой первой версией или была создана до второй версии или даже что первая версия запрашивается или функционирует перед второй версией. Наоборот, эти фразы используются для идентификации разных версий.
[0015] Заголовки служат лишь для удобства; информация в отношении заданной темы может быть обнаружена вне раздела, чей заголовок указывает данную тему.
[0016] Прочие определения, явные или не явные, могут быть включены ниже.
ПРИМЕРНАЯ СРЕДА ФУНКЦИОНИРОВАНИЯ
[0017] Фиг. 1 иллюстрирует пример подходящей среды 100 вычислительной системы, в которой могут быть реализованы аспекты описываемого в данном документе предмета изобретения. Среда 100 вычислительной системы является лишь одним примером подходящей вычислительной среды и не предназначена предложить каких-либо ограничений на объем использования или функциональность аспектов описываемого в данном документе предмета изобретения. Так же не следует интерпретировать вычислительную среду 100 как обладающую любой зависимостью или требованием в отношении любого одного или сочетания компонентов, проиллюстрированных в примерной среде 100 функционирования.
[0018] Аспекты описываемого в данном документе предмета изобретения функционируют с многочисленными другими общего назначения или специализированными средами вычислительной системы или конфигурациями. Примеры хорошо известных вычислительных систем, сред, или конфигураций, которые могут быть подходящими для использования с аспектами описываемого в данном документе предмета изобретения содержат персональные компьютеры, серверные компьютеры, переносные устройства или устройства класса лэптоп, многопроцессорные системы, основанные на микроконтроллере системы, абонентские телевизионные приставки, программируемую потребительскую электронику, сетевые PC, миникомпьютеры, компьютеры класса мэйнфрейм, персональные цифровые помощники (PDA), игровые устройства, принтеры, приборы, включая подключаемые, мультимедийный центр, или другие приборы, встроенные или прикрепленные к автомобилю вычислительные устройства, прочие мобильные устройства, распределенные вычислительные среды, которые включают в себя любые из вышеприведенных систем или устройств, и подобное.
[0019] Аспекты описываемого в данном документе предмета изобретения могут быть описаны в общем контексте исполняемых компьютером инструкций, таких как программные модули, исполняемые компьютером. В целом, программные модули включают в себя подпрограммы, программы, объекты, компоненты, структуры данных, и т.д., которые выполняют конкретные задачи или реализуют конкретные абстрактные типы данных. Аспекты описываемого в данном документе предмета изобретения также могут быть реализованы на практике в распределенных вычислительных средах, в которых задачи выполняются удаленными устройствами обработки, которые связаны посредством сети связи. В распределенной вычислительной среде, программные модули могут быть расположены как на локальных, так и удаленных компьютерных носителях данных, включающих в себя запоминающие устройства памяти.
[0020] Со ссылкой на Фиг. 1, примерная система для реализации аспектов описываемого в данном документе предмета изобретения включает в себя вычислительное устройство общего назначения в виде компьютера 110. Компьютер может включать в себя любое электронное устройство, которое выполнено с возможностью исполнения инструкций. Компоненты компьютера 110 могут включать в себя блок 120 обработки, системную память 130, и системную шину 121, которая связывает различные компоненты системы, включая системную память, с блоком 120 обработки. Системная шина 121 может быть любой из нескольких типов структур шины, включая шину памяти или контроллер памяти, периферийную шину, и локальную шину, используя любую из многообразия архитектур шины. В качестве примера, а не ограничения, такие архитектуры включают в себя: шину Архитектуры Промышленного Стандарта (ISA), шину Архитектуры Микро Канала (MCA), шину Усовершенствованного ISA (EISA), локальную шину Ассоциации по Стандартам в Области Видеоэлектроники (VESA), шину Межсоединения Периферийных Компонентов (PCI) также известную как шина расширения, шина Межсоединения Периферийных Компонентов Расширенная (PCI-X), Усовершенствованный Графический Порт (AGP), и экспресс PCI (PCIe).
[0021] Блок 120 обработки может быть соединен с устройством 122 безопасности аппаратного обеспечения. Устройство 122 безопасности может хранить и способно генерировать криптографические ключи, которые могут быть использованы для обеспечения безопасности для различных аспектов компьютера 110. В одном варианте осуществления, устройство 122 безопасности может быть выполнено в виде чипа Доверенного Платформенного Модуля (TPM), Устройства Безопасности TPM, или подобного.
[0022] Компьютер 110, как правило, включает в себя многообразие считываемых компьютером носителей. Считываемые компьютером носители могут быть любыми доступными носителями, доступ к которым может быть получен посредством компьютера 110, и включают в себя как энергозависимые, так и энергонезависимые носители, и съемные и несъемные носители. В качестве примера, а не ограничения, считываемые компьютером носители могут быть выполнены в виде компьютерных носителей данных и средств связи.
[0023] Компьютерные носители данных включают в себя как энергозависимые, так и энергонезависимые, как съемные, так и несъемные носители, реализованные любым способом или по любой технологии для хранения информации, такой как считываемые компьютером инструкции, структуры данных, программные модули, или прочие данные. Компьютерные носители данных включают в себя RAM, ROM, EEPROM, твердотельное средство хранения, флэш-память или другие технологии памяти, CD-ROM, цифровые универсальные диски (DVD), или иные оптические дисковые средства хранения, магнитные кассеты, магнитную ленту, средство хранения на магнитном диске или иные магнитные дисковые средства хранения, или любой другой носитель, который может быть использован для хранения требуемой информации, и доступ к которому может быть получен посредством компьютера 110.
[0024] Средства связи, как правило, воплощают считываемые компьютером инструкции, структуры данных, программные модули, и прочие данные в модулированном сигнале данных, таком как несущая волна или иной механизм транспортировки, и включают в себя любые средства доставки информации. Понятие «модулированный сигнал данных» означает сигнал, который обладает одной или более из его характеристик, которые установлены или изменены таким образом, что кодируют информацию в сигнале. В качестве примера, а не ограничения, средства связи включают в себя проводные средства, такие как проводная сеть или непосредственное проводное соединение, и беспроводные средства, такие как акустические, RF, инфракрасные, и прочие беспроводные средства. Сочетания любых из вышеприведенных средств также должно включаться в объем понятия считываемые компьютером носители.
[0025] Системная память 130 включает в себя компьютерные носители данных в виде энергозависимой и/или энергонезависимой памяти, такой как постоянное запоминающее устройство 131 (ROM) и запоминающее устройство 132 с произвольной выборкой (RAM). Базовая система 133 ввода/вывода (BIOS), содержащая основные подпрограммы, которые помогают осуществлять перенос информации между элементами внутри компьютера 110, как например, во время запуска, как правило, хранится в ROM 131. RAM 132, как правило, содержит данные и/или программные модули, которые сразу же доступны и/или в настоящий момент обрабатываются блоком 120 обработки. В качестве примера, а не ограничения, Фигура 1 иллюстрирует операционную систему 134, прикладные программы 135, прочие программные модули 136, и данные 137 программы.
[0026] Компьютер 110 также может включать в себя прочие съемные/несъемные, энергозависимые/энергонезависимые компьютерные носители данных. Лишь в качестве примера, Фиг. 1 иллюстрирует накопитель 141 на жестком диске, который осуществляет считывание с или запись на несъемный, энергонезависимый магнитный носитель, накопитель 151 на магнитном диске, который осуществляет считывание с или запись на съемный, энергонезависимый магнитный диск 152, и накопитель 155 на оптическом диске, который осуществляет считывание с или запись на съемный, энергонезависимый оптический диск 156, такой как CD ROM или иной оптический носитель. Прочие съемные/несъемные, энергозависимые/энергонезависимые компьютерные носители данных, которые могут быть использованы в примерной среде функционирования, включают в себя кассеты с магнитной лентой, карты флэш-памяти, и прочие твердотельные средства хранения, цифровые универсальные диски, прочие оптические диски, цифровые видеоленты, твердотельное RAM, твердотельное ROM, и подобное. Накопитель 141 на жестком диске может быть соединен с системной шиной 121 посредством интерфейса 140, а накопитель 151 на магнитном диске и накопитель 155 на оптическом диске могут быть соединены с системной шиной 121 посредством интерфейса для съемной энергонезависимой памяти, такого как интерфейс 150.
[0027] Накопители и связанные с ними компьютерные носители данных, рассмотренные выше и проиллюстрированные на Фиг. 1, обеспечивают средство хранения считываемых компьютером инструкций, структур данных, программных модулей, и прочих данных для компьютера 110. На Фиг. 1, например, накопитель 141 на жестком диске иллюстрируется как хранящий операционную систему 144, прикладные программы 145, прочие программные модули 146, и данные 147 программы. Следует отметить, что эти компоненты могут либо быть точно такими же как или отличаться от операционной системы 134, прикладных программ 135, прочих программных модулей 136, и данных 137 программы. В данном документе операционной системе 144, прикладным программам 145, прочим программным модулям 146, и данным 147 программы даны отличные номера для иллюстрации того, что, минимум, они являются другими копиями.
[0028] Пользователь может вводить команды и информацию в компьютер 110 посредством устройств ввода, таких как клавиатура 162 и указывающее устройство 161, как правило, именуемое как мышь, шаровой манипулятор, или сенсорная панель. Прочие устройства ввода (не показаны) могут включать в себя микрофон, игровой манипулятор, игровую панель, спутниковую антенну, сканер, сенсорный экран, планшет рукописного ввода, устройство захвата жестов, или подобное. Эти и прочие устройства ввода часто соединены с блоком 120 обработки посредством интерфейса 160 ввода пользователя, который соединен с системной шиной, но могут быть соединены посредством другого интерфейса и структур шины, таких как параллельный порт, игровой порт или универсальная последовательная шина (USB).
[0029] Монитор 191 или другой тип дисплейного устройства также соединен с системной шиной 121 через интерфейс, такой как видеоинтерфейс 190. В дополнение к монитору, компьютер также может включать в себя прочие периферийные устройства вывода, такие как громкоговорители 197 и принтер 196, которые могут быть соединены посредством выходного периферийного интерфейса 195.
[0030] Компьютер 110 может функционировать в сетевой среде, используя логические соединения с одним или более удаленными компьютерами, таким как удаленный компьютер 180. Удаленный компьютер 180 может быть персональным компьютером, сервером, маршрутизатором, сетевым PC, одноранговым устройством или другим общим сетевым узлом, и, как правило, включает в себя много или все из элементов, описанных выше в отношении компьютера 110, несмотря на то, что на Фиг. 1 иллюстрируется только запоминающее устройство 181 памяти. Логические соединения, изображенные на Фиг. 1, включают в себя локальную сеть 171 (LAN) и глобальную сеть 173 (WAN), однако также могут включать в себя другие сети. Такие сетевые среды имеют место в офисах, компьютерных сетях масштаба предприятия, интрасетях, и Интернет.
[0031] При использовании в сетевой среде LAN, компьютер 110 соединен с LAN 171 посредством сетевого интерфейса или адаптера 170. При использовании в сетевой среде WAN, компьютер 110 может включать в себя модем 172 или иное средство для установления связи через WAN 173, такую как Интернет. Модем 172, который может быть внутренним или внешним, может быть соединен с системной шиной 121 через интерфейс 160 ввода пользователя или другой соответствующий механизм. В сетевой среде, программные модули, изображенные как относящиеся к компьютеру 100, или их части, могут храниться на удаленном запоминающем устройстве памяти. В качестве примера, а не ограничения, Фигура 1 иллюстрирует удаленные прикладные программы 185 как размещенные на устройстве 181 памяти. Следует иметь в виду, что показанные сетевые соединения являются примерными и могут использоваться прочие средства создания линии связи между компьютерами.
ГЕНЕРИРОВАНИЕ И КЭШИРОВАНИЕ КОДА
[0032] Как упомянуто ранее, в сравнении с обычными программами, которые были скомпилированы, язык сценариев может казаться медленным для пользователя, в особенности при первоначальном запуске.
[0033] Фиг. 2 является структурной схемой, представляющей собой примерную компоновку компонентов системы, в которой могут функционировать аспекты описываемого в данном документе предмета изобретения. Компоненты, иллюстрируемые на Фиг. 2, являются примерными, и это не означает, что они являются всеми включенными компонентами, которые могут потребоваться или могут быть включены. В других вариантах осуществления, компоненты и/или функции, описанные в связи с Фиг. 2, могут быть включены в другие компоненты (показанные или не показанные) или помещены в субкомпоненты, не отступая от сущности и объема аспектов описываемого в данном документе предмета изобретения. В некоторых вариантах осуществления, компоненты и/или функции, описанные в связи с Фиг. 2, могут быть распределены между несколькими устройствами.
[0034] Обращаясь к Фиг. 2, система 205 может включать в себя компоненты 210 сценариев, хранилище 220, механизм 225 связи, и прочие компоненты (не показаны). Система 205 может содержать одно или более вычислительные устройства. Такие устройства могут включать в себя, например, персональные компьютеры, серверные компьютеры, переносные устройства или устройства класса лэптоп, многопроцессорные системы, основанные на микроконтроллере системы, абонентские телевизионные приставки, программируемую потребительскую электронику, сетевые PC, миникомпьютеры, компьютеры класса мэйнфрейм, сотовые телефоны, персональные цифровые помощники (PDA), игровые устройства, принтеры, приборы, включая подключаемые, мультимедийный центр, или другие приборы, встроенные или прикрепленные к автомобилю вычислительные устройства, прочие мобильные устройства, распределенные вычислительные среды, которые включают в себя любые из вышеприведенных систем или устройств, и подобное.
[0035] Там, где система 205 содержит одно устройство, примерное устройство, которое может быть выполнено с возможностью работы в качестве системы 205, выполнено в виде компьютера 110 с Фиг. 1. Там, где система 205 содержит несколько устройств, каждое из нескольких устройств может быть выполнено в виде аналогично или по-другому сконфигурированного компьютера 110 с Фиг. 1.
[0036] Компоненты 210 сценариев могут включать в себя установщик 215, генератор 216 кода, диспетчер 217 кэша, диспетчер 218 исполнения, и прочие компоненты (не показаны). Используемое в данном документе понятие компонент следует читать как включающий в себя все или часть из: устройства, совокупности из одного или более модулей программного обеспечения или ее частей, некоторого сочетания одного или более модулей программного обеспечения или их частей и одного или более устройств или их частей, и подобное.
[0037] Механизм 225 связи позволяет системе 205 осуществлять связь с прочими объектами. Например, механизм 225 связи может позволять системе 205 осуществлять связь с другими объектами для получения пакетов и/или кода сценариев, которые могут кэшироваться в системе 205. Механизм 255 связи может быть сетевым интерфейсом или адаптером 170, модемом 172, или любым другим механизмом для установления связи, как описано в связи с Фиг. 1.
[0038] Хранилище 220 является любым носителем данных, выполненным с возможностью предоставления доступа к данным. Используемый в данном документе доступ может включать в себя считывание данных, запись данных, удаление данных, обновление данных, сочетание, включающее в себя два или более из вышеперечисленных действий, и подобное. Хранилище может включать в себя энергозависимую память (например, RAM, кэш в памяти, или подобное) и энергонезависимую память (например, постоянное средство хранения).
[0039] Понятие данные следует читать в широком смысле, как включающее в себя все, что может быть представлено посредством одного или более элементов компьютерного средства хранения. Логически, данные могут быть представлены в качестве ряда 1 и 0 в энергозависимой и энергонезависимой памяти. В компьютерах с не бинарным носителем данных, данные могут быть представлены в соответствии с возможностями носителя данных. Данные могут быть организованы в разные типы структур данных, включающих в себя простые типы данных, такие как числа, буквы, и подобное, иерархические, связанные, или другие соответствующие типы данных, структуры данных, которые включают в себя несколько других структур данных или простых типов данных, и подобное. Некоторые примеры данных включают в себя информацию, программный код, состояние программы, данные программы, прочие данные, и подобное.
[0040] Хранилище 220 может быть выполнено в виде средства хранения на жестком диске, другого энергонезависимого средства хранения, временной памяти, такой как RAM, другого средства хранения, некоторого сочетания вышеприведенного, и подобного, и может быть распределено между несколькими устройствами. Хранилище 220 может быть внешним, внутренним, или включать в себя компоненты, которые являются как внутренними, так и внешними по отношению к системе 205.
[0041] Для уменьшения времени запуска и исполнения, сокращения объема памяти, обеспечения защиты от вмешательства, и по другим причинам, генератор 216 кода может компилировать исходный код в байт-код или некоторый другой промежуточный код или исполняемый код. Код включает в себя инструкции, которые указывают действия, которые должен предпринять компьютер. Код также может включать в себя данные, ресурсы, переменные, определения, зависимости, ассоциации, и подобное, что включает в себя информацию, отличную от действий, которые должен предпринять компьютер. Например, код может включать в себя изображения, web-страницы, HTML, XML, иной контент, и подобное. В варианте осуществления, код может быть включен в проект программного обеспечения. Программное обеспечение может включать в себя или ссылаться на одну или более части кода, данные, ресурсы, переменные, определения, зависимости, ассоциации, и подобное, что включает в себя информацию, отличную от действий, которые должен предпринять компьютер, информацию конфигурации, и подобное.
[0042] Действия, указываемые кодом, могут быть закодированы на языке исходного кода, включая языки сценариев и не сценариев, промежуточные языки, язык ассемблера, бинарный код, другой язык, некоторое сочетание вышеперечисленного, и подобное.
[0043] Установщик 215 может устанавливать пакеты в систему 205. Пакет может включать в себя одно или более приложений программного обеспечения. Установщик 215 может включать в себя обработчик расширения применения, который обеспечивает возможность выполнения настраиваемых действий на основании: установленного пакета; целевой машины, на которой установлен пакет; критерия, основанного на том, включает ли пакет код сценариев; или других критериев.
[0044] В одной реализации, когда установщик 215 сталкивается с пакетом, в котором находится код сценариев, установщик 215 может добавлять элементы, соответствующие компонентам пакета в очередь или другую структуру данных для предварительного компилирования кода пакета.
[0045] Генератор 216 кода может брать элементы из структуры данных и может генерировать байт-код, исполняемый код, или некий другой код из кода, соответствующего каждому из элементов. Элемент может включать в себя файл, который включает в себя сценарий, часть файла (например, сценарий, встроенный в страницу HTML), скомпилированы код, или подобное. Для простоты понятие байт-код часто используется в данном документе для обозначения кода, который генерирует генератор 216 кода. Тем не менее, следует понимать, что генератор 216 кода не ограничивается генерированием и кэшированием байт-кода и может, в некоторых реализациях, генерировать и кэшировать другие типы кода, включая те типы кода, которые были упомянуты ранее.
[0046] В одной реализации, генератор 216 кода может ждать до тех пор, пока пакет не будет полностью установлен и элементы, соответствующие пакету, не будут помещены в структуру данных для компилирования, перед генерированием байт-кода. В другой реализации, генератор 216 кода может начинать генерирование байт-кода, как только элемент доступен в структуре данных или как только установлен модуль исходного кода. В данной другой реализации, в одном примере, генератор 216 кода может устранять сгенерированный байт-код, если произошел сбой установки пакета. В другом примере, генератор 216 кода может возобновлять генерирование с точки, на которой он прервался (например, после того, как восстановлено питание и машина перезагружена). В одной реализации, генератор 216 кода может быть реализован в качестве процесса для выполнения, когда система 205 находится в состоянии ожидания (например, не устанавливает пакеты или не выполняет другие задачи, которые расходуют производительность обработки системы 205), когда система 205 функционирует с питанием от сети (например, вместо питания от батареи), в определенное или конфигурируемое время дня, или подобное.
[0047] Используемое в данном документе понятие «процесс» и его варианты может включать в себя один или более традиционные процессы, потоки, компоненты, библиотеки, объекты, которые выполняют задачи, и подобное. Процесс может быть реализован в аппаратном обеспечении, программном обеспечении, или сочетании аппаратного и программного обеспечения. В варианте осуществления, процесс является любым механизмом, однако называемым, способным или используемым при выполнении действия. Процесс может быть распределенным между несколькими устройствами или одним устройством.
[0048] В одной реализации, генератор 216 кода также может быть использован для генерирования кода на лету (например, как код встречается). Например, если пользователь устанавливает программное обеспечение и желает запустить программное обеспечение перед тем, как генерируется байт-код для всего пакета, который включает в себя программное обеспечение, то генератор 216 кода может быть использован для генерирования кода для программного обеспечения по мере необходимости. Другими словами, пользователю не требуется ждать пока генератор 216 кода сгенерирует байт-код для всего пакета, до того как пользователю будет разрешено исполнение программного обеспечения пакета. В дополнение, могут присутствовать другие ситуации, при которых исходный код для компонента поменялся и где генератор 216 кода может быть использован для генерирования байт-кода для компонента в ускоренном порядке.
[0049] Кроме того, генератор 216 кода может быть использован по запросу для компилирования кода и кэширования кода. Например, в приложении Интернет браузера, ссылки на новый код могут выявляться динамически. Например, web-документ может включать в себя ссылки на другой код, который должен быть загружен и исполнен. Генератор 216 кода может быть использован для компилирования кода, на который ссылаются посредством этих ссылок, и кэширования скомпилированного кода для ускорения последующих исполнений кода.
[0050] Генератор 216 кода может быть реализован в или может использовать «песочницу» для генерирования кода. Песочница является средой с ограниченными правами в отношении данных, к которым она может получить доступ. В одной реализации, генератор 216 кода может быть реализован в качестве процесса с ограниченными правами. Процессу может быть передан дескриптор на файл байт-кода, из которого процесс может осуществлять считывание и в который может осуществлять запись, и может быть предоставлен доступ только для считывания к исходному коду. В целях обеспечения безопасности, процесс может не иметь доступа к другим ресурсам, кроме тех, что упомянуты выше.
[0051] В одной реализации, генератор 216 кода может быть размещен в виртуальной среде. Виртуальная среда может симулировать или эмулировать физическую машину, операционную систему, набор из одного и более интерфейсов, части вышеперечисленного, сочетания вышеперечисленного, или подобное. Когда симулируется или эмулируется машина, то машина иногда именуется виртуальной машиной. Виртуальная машина является такой машиной, что для программного обеспечения, исполняемого на виртуальной машине, она кажется физической машиной. Программное обеспечение может сохранять файлы на виртуальном запоминающем устройстве, таком как виртуальный накопитель на жестком диске, виртуальный накопитель на гибком диске, и подобное, может считывать файлы с виртуального CD, может осуществлять связь через виртуальный сетевой адаптер и т.д.
[0052] Виртуальная среда может иметь ограниченный или не иметь доступ к данным или другим ресурсам вне виртуальной среды. Раз так, то виртуальная среда может обеспечивать подходящую среду для компилирования не доверенного кода, не заботясь о том, инфицирует ли код хост виртуальной среды.
[0053] После записи байт-кода в файл, процесс может электронным образом подписывать или иным образом «пломбировать» файл, таким образом, чтобы можно было обнаружить любые модифицирования файла. Опломбирование файла может быть выполнено в виде множества криптографических и/или связанных с файловой системой форм, которые будут понятны специалистам в соответствующей области. Например, в одной реализации, файловая система может устанавливать расширенный атрибут на файл после опломбирования. Если после этого файл модифицируется, то расширенный атрибут может быть изменен для указания того, что файл более не опломбирован.
[0054] Запись байт-кода в хранилище 220 иногда именуется в данном документе как кэширование байт-кода. Диспетчер 217 кэша может функционировать для сохранения байт-кода в хранилище 220 и предоставления доступа к байт-коду по запросу. Диспетчер 217 кэша может гарантировать то, что байт-код сохраняется постоянно в хранилище 220, так что байт-код доступен после перезапуска системы 205. Диспетчер 217 кэша также может сохранять копию байт-кода в основной памяти, высокоскоростной кэш-памяти, видео памяти, другой памяти, включая энергозависимую и энергонезависимую память или подобное, если требуется, для обеспечения быстрого доступа к байт-коду.
[0055] Кроме того, несмотря на то, что иногда в данном документе используется понятие файл, следует понимать, что в других реализациях байт-код может быть записан в энергозависимую и/или энергонезависимую память, базу данных или ее часть (например, запись), или некоторое другое хранилище, не отступая от сущности и объема аспектов описываемого в данном документе предмета изобретения.
[0056] Если более чем один пользователь устанавливает пакет, то реализация может кэшировать несколько копий или лишь одну копию байт-кода для пакета в хранилище 220. Там, где пакет направлен на более чем одну архитектуру процессора (например, 32-битную и 64-битную), генератор 216 кода может генерировать и кэшировать целевой байт-код для каждой архитектуры процессора.
[0057] В некоторых реализациях, может присутствовать несколько инициирующих событий для повторного генерирования байт-кода пакета. Например, если была нарушена пломба файла, который включает в себя байт-код (например, обнаружено вмешательство), испортились носители данных, или другие данные указывают на то, что кэш может быть недействительным или не нетронутым, это может служить в качестве инициирующего события в отношении того, что должен быть повторно сгенерирован байт-код пакета. В данном случае, если диспетчер 218 исполнения определяет, что пломба была нарушена, то диспетчер 218 исполнения может выдать инструкцию генератору 216 кода на повторное генерирование байт-кода для пакета. Генератор 216 кода может повторно генерировать байт-код образом аналогичным тому, каким генератор 216 кода первый раз генерировал байт-код (например, помещая элементы, соответствующие компонентам пакета в очередь или другую структуру данных, указывающую потребность в генерировании байт-кода).
[0058] В качестве другого примера, если среда, использующая байт-код, была модернизирована до новой версии, то это может инициировать повторное генерирование байт-кода. Например, если Интернет браузер или другая среда исполнения была обновлена до новой версии, которая имеет другую грамматику или синтаксис байт-кода, то это может инициировать повторное генерирование байт-кода, подходящего для новой версии. В данном примере, инициирующее событие может происходить, когда пользователь пытается исполнить программное обеспечение, связанное с байт-кодом. Это может вызывать повторное генерирование байт-кода по использованию и может избегать одновременного повторного генерирования байт-кода для всех установленных пакетов.
[0059] В качестве другого примера, если задача периодического обслуживания обнаруживает то, что среда исполнения была обновлена на новую версию, которая имеет другую грамматику или синтаксис байт-кода, то это может инициировать повторное генерирование байт-кода подходящего для новой версии.
[0060] В качестве другого примера, если должна быть установлена новая версия пакета, это может служить инициирующим событием для повторного генерирования байт-кода.
[0061] В качестве другого примера, если по каким-либо причинам байт-код удален, это может служить инициирующим событием для повторного генерирования байт-кода.
[0062] В хранилище 220, могут храниться исходный код и соответствующий байт-код, в одном примере, как иллюстрируется на Фиг. 3. Фиг. 3 иллюстрирует примерную структуру данных, которая может использоваться в соответствии с аспектами описываемого в данном документе предмета изобретения. В одной реализации, структура данных, иллюстрируемая на Фиг. 3, может иметь таблицу, которая указывает файлы исходного кода и представления в байт-коде, которые доступны в структуре данных. Таблица может также включать в себя данные, которые указывают на то, где файлы исходного кода и представления в байт-коде располагаются в структуре данных. Структура данных может храниться в или быть представлена в качестве файла, в базе данных, или в другом хранилище, не отступая от сущности и объема аспектов описываемого в данном документе предмета изобретения.
[0063] Обращаясь к Фиг. 3, структура 305 данных может иметь исходный код и соотнесенный соответствующий байт-код. Если хранилище 220 реализовано в качестве файловой системы, то структура 305 данных может повысить эффективность получения данных, поскольку она может сократить количество дескрипторов файлов или подобного, требуемое для доступа к байт-коду. Там, где исходный код размещается в пакете как сопоставленный с одной или более web-страницами или подобным, соотнесение исходного кода и соответствующего байт-кода может быть поведением по умолчанию. Данное поведение по умолчанию может быть аннулировано, при необходимости.
[0064] В другой реализации, где хранилище 220 реализовано в качестве файловой системы, может присутствовать отдельный файл байт-кода для каждого из одного или более компонентов пакета. Несмотря на то, что это может быть менее эффективно в некоторых сценариях, это может иметь другие преимущества и использования. Данная реализация может быть использована, например, когда исходный код может размещаться внешне по отношению к пакету (например, на одном или более web-сайтах) и/или когда исходный код может генерироваться динамически.
[0065] В качестве другого примера, это может быть использовано там, где присутствует естественно изолированное восприятие, при котором хост или пользователь может захотеть очистить всю информацию, связанную с одним web-сайтом.
[0066] В качестве другого примера, это может быть использовано в сценариях, в которых браузер предварительно информируется о ресурсах на заданном web-сайте. В данном примере, браузер может предварительно отбирать ресурсы web-сайта таким образом, что web-сайт может использоваться, даже когда отсутствует сетевое соединение. В данном примере, байт-код может генерироваться даже для страниц, которые находятся глубже в web-сайте, несмотря на то, что не сталкиваются с явной ссылкой на файлы сценариев для страниц в размете HTML.
[0067] Определение того, искать ли исходный код и соответствующий байт-код в одном файле или искать ли отдельный файл для каждой пары исходный код/байт-код, может быть основано на среде, которая исполняет пакет. Если средой является web-браузер, то диспетчер кэша может искать отдельный файл для байт-кода, соответствующий каждому компоненту исходного кода. Если средой является инфраструктура приложения или другая среда (например, описанный выше пример с предварительно информируемым web-сайтом), где все компоненты исходного кода известны заранее, поскольку они исходят из пакета, то диспетчер кэша может искать байт-код для всего пакета, который должен быть соотнесен в одном файле.
[0068] Не каждый компонент исходного кода пакета может иметь соответствующий байт-код в структуре 305 данных. Например, по различным причинам может быть желательным не создавать байт-код для одного или более компонентов пакета. В таких случаях, исходный код и байт-код для компонента(ов) могут быть опущены в структуре 305 данных.
[0069] В дополнение, структура 305 данных может быть памятью отображенной для совместного использования двумя или более пакетами. Например, в некоторых случаях, разные пакеты могут иметь один или более идентичные исходные компоненты. В этих случаях, отображение в памяти может быть использовано для совместного использования байт-кода для идентичных исходных компонентов таким образом, что отсутствует потребность в нескольких копиях байт-кода в памяти. Кроме того, байт-код в структуре 305 данных может быть только для считывания так, что он не будет меняться при отображении в памяти для совместного использования.
[0070] Обращаясь к Фиг. 2 и 3, при исполнении кода, компонент 218 управления исполнением может найти ссылку (например, HTTP или другую ссылку), которая обращается к исходному коду в документе (например, HTML, XML, электронной обработки текста, или другому документу), который обрабатывает диспетчер 218 исполнения. Диспетчер 218 исполнения может сначала проверить, размещена ли в кэше текущая версия байт-кода, соответствующая ссылке, посредством обращения к структуре 305 данных. Если байт-код размещается в кэше, то диспетчер 218 исполнения может получить байт-код для исполнения. Если байт-код не размещается в кэше, диспетчер 218 исполнения может получить исходный код из местоположения исходного кода и может вызвать компилирование и исполнение исходного кода без задержки (например, не ожидая пока генератор 216 кода завершит любые невыполненные запросы компилирования в очереди).
[0071] В одной реализации, байт-код для исходного кода может размещаться в директории параллельной исходному коду. Например, если исходный код размещается в C:\ИмяПакета\ИсходныйКод\имяисходногокода.файлсценария, то байт-код, если существует, может размещаться в C:\ИмяПакета\НекотороеИмя\имябайт-кода.файлбайт-кода.
[0072] В другой реализации, исходный код может размещаться на удаленном устройстве.
[0073] Фиг. 4 является структурной схемой, представляющей собой примерную компоновку компонентов среды, в которой могут функционировать аспекты описываемого в данном документе предмета изобретения. Компоненты, иллюстрируемые на Фиг. 4, являются примерными, и это не означает, что они являются всеми включенными компонентами, которые могут потребоваться или могут быть включены. В других вариантах осуществления, компоненты и/или функции, описанные в связи с Фиг. 4 могут быть включены в другие компоненты (показанные или не показанные) или помещены в субкомпоненты, не отступая от сущности и объема аспектов описываемого в данном документе предмета изобретения. В некоторых вариантах осуществления, компоненты и/или функции, описанные в связи с Фиг. 4, могут быть распределены между несколькими устройствами.
[0074] Обращаясь к Фиг. 4, среда 405 может включать в себя целевое устройство 410, сеть 415, сервер 417 кода, и прочие компоненты (не показаны). Целевое устройство 410 и сервер 417 кода могут быть выполнены в виде одного или более вычислительных устройств. Такие устройства могут включать в себя, например, персональные компьютеры, серверные компьютеры, переносные устройства или устройства класса лэптоп, многопроцессорные системы, основанные на микроконтроллере системы, абонентские телевизионные приставки, телевизоры, программируемую потребительскую электронику, сетевые PC, миникомпьютеры, компьютеры класса мэйнфрейм, персональные цифровые помощники (PDA), игровые устройства, принтеры, приборы, включая подключаемые, мультимедийный центр, или другие приборы, встроенные или прикрепленные к автомобилю вычислительные устройства, прочие мобильные устройства, распределенные вычислительные среды, которые включают в себя любые из вышеприведенных систем или устройств, и подобное. Примерное устройство, которое может быть выполнено с возможностью работы в качестве целевого устройства 410 или сервера 417 кода, выполнено в виде компьютера 110 с Фиг. 1.
[0075] В варианте осуществления, сеть 415 может быть выполнена в виде сети Интернет. В варианте осуществления, сеть 415 может быть выполнена в виде одной или более локальных сетей, глобальных сетей, непосредственных соединений, виртуальных соединений, частных сетей, виртуальных частных сетей, некоторого сочетания вышеперечисленного, и подобного.
[0076] Сервер 417 кода может предоставлять код целевому устройству 410. В одном варианте осуществления, сервер 417 кода может быть web-сервером. В другом варианте осуществления, сервер 417 кода может быть машиной внутренней по отношению к частной сети организации, которая включает в себя код. В других вариантах осуществления, сервер 417 кода может включать в себя любое устройство, выполненное с возможностью предоставления исходного кода целевому устройству 410.
[0077] Целевое устройство 410 является устройство, на котором может исполняться код. Целевое устройство 410 может включать в себя среду 420 компилирования, и среду 425 исполнения, установщик 430, и хранилище 435. Установщик 430 может быть реализован и функционировать аналогично установщику 215 с Фиг. 2, тогда как хранилище 435 может быть реализовано и функционировать аналогично хранилищу 220 с Фиг. 2.
[0078] Среда 420 компилирования может содержать среду с ограниченными правами, в которой исходный код может компилироваться в байт-код. В одном варианте осуществления, среда 420 компилирования может быть выполнена в виде виртуальной среды, как описано выше. В другом варианте осуществления, среда 420 компилирования может быть выполнена в виде другой среды с ограниченными правами, как было описано ранее.
[0079] Среда 425 исполнения может быть выполнена в виде среды, в которой исполняется программное обеспечение пакета. В одной реализации среда 425 исполнения может быть выполнена в виде Интернет браузера. В другой реализации, среда 425 исполнения может быть выполнена в виде хост-процесса, который выполнен с возможностью исполнения программного обеспечения пакета, который может включать в себя исходный код.
[0080] Фиг. 5-6 являются блок-схемами, которые в целом представляют собой примерные действия, которые могут происходить в соответствии с аспектами, описываемого в данном документе предмета изобретения. Для упрощения объяснения, методология, описываемая в связи с Фиг. 5-6, изображена и описывается в виде ряда действий. Следует понимать и иметь в виду, что аспекты описываемого в данном документе предмета изобретения не ограничиваются иллюстрируемыми действиями и/или очередностью действий. В одном варианте осуществления, действия происходят в очередности, как описано ниже. Тем не менее, в других вариантах осуществления действия могут происходить параллельно, в другой очередности, и/или с другими действиями, которые не представлены и не описаны в данном документе. Кроме того, не все иллюстрируемые действия могут требоваться для реализации методологии в соответствии с аспектами описываемого в данном документе предмета изобретения. В дополнение, специалисты в соответствующей области будут понимать и иметь в виду, что методология может быть альтернативно представлена в виде ряда взаимосвязанных состояний посредством диаграммы состояний или в качестве событий.
[0081] Обращаясь к Фиг. 5, на этапе 505 начинаются действия.
[0082] На этапе 510, принимается пакет, который включает в себя исходный код программного обеспечения, для установки на целевое устройство. Например, обращаясь к Фиг. 4, целевое устройство 410 может получать пакет от сервера 417 кода. В качестве другого примера, установщик 430 может получить инструкцию по установке пакета, который присутствует в хранилище 435.
[0083] На этапе 515, пакет устанавливается на целевое устройство. Например, обращаясь к Фиг. 2, установщик 215 может устанавливать пакет в хранилище 220.
[0084] На этапе 520, в структуру данных, такую как очередь или подобное помещается указатель. Указатель данных указывает на то, что исходный код пакета должен быть скомпилирован в байт-код. Может присутствовать отдельный указатель, который помещается в структуру данных для каждого файла исходного кода в пакете. Например, обращаясь к Фиг. 2, установщик 215 может помещать один или более флагов в структуру данных, хранящуюся в хранилище 220.
[0085] На этапе 525, выполняются действия для первоначального компилирования исходного кода, если не принят запрос на исполнение программного обеспечения пакета до начала или завершения действий. Эти действия по компилированию исходного кода могут включать в себя, например:
[0086] 1. Последовательный перебор по структуре данных и нахождение указателя(ей), который указывают на то, что требуется компилирование.
[0087] 2. Компилирование каждого применимого элемента исходного кода найденного на этапе 1 выше в байт-код или некий другой код.
[0088] Например, обращаясь к Фиг. 2, генератор 216 кода может осуществлять последовательный перебор структуры данных и компилировать файлы исходного кода применительно к флагам, которые найдены в структуре данных. В качестве другого примера, генератор 216 кода может осуществлять последовательный перебор списка файлов и компилировать любой файл с заданным расширением (например, «.js» или другим расширением, указывающим исходный файл).
[0089] На этапе 530, компилированный код затем может сохраняться в энергонезависимой памяти. Например, обращаясь к Фиг. 2, диспетчер 217 кэша может сохранять код, сгенерированный генератором 216 кода, в хранилище 220. Код также может быть сохранен в энергозависимой памяти, такой как кэш в памяти или RAM для обеспечения быстрой загрузки и исполнения.
[0090] Этап 535 помещен сбоку от действий 520-530 для указания того, что запрос на исполнение программного обеспечения пакета может произойти перед, во время, или после этих действий. Если принимается такой запрос, то другие действия могут быть выполнены перед началом или завершением действий 520-530. Например, если такой запрос принимается перед началом или завершением действий этапов 520-530, то исходный код может быть скомпилирован и исполнен в ускоренном порядке. Прочие действия, описывающие то, что может произойти, если принимается такой запрос, описываются в связи с Фиг. 6.
[0091] На этапе 540, могут быть выполнены другие действия, если есть. Например, может быть принято событие, инициирующее повторное генерирование. В ответ, действия этапа 520-530 могут быть повторно выполнены потенциально с другим исходным кодом (если исходный код изменился) и другой второй код компилируется из другого исходного кода.
[0092] Обращаясь к Фиг. 6, на этапе 605 начинаются действия.
[0093] На этапе 610, принимается запрос на исполнение программного обеспечения, которое включает в себя исходный код. Например, обращаясь к Фиг. 2, диспетчер 218 исполнения принимает запрос на исполнение программного обеспечения пакета, установленного в хранилище 220.
[0094] На этапе 615, выполняется определение в отношении того, был ли код уже скомпилирован и сохранен в энергонезависимом хранилище. Если так, то действия продолжаются на этапе 640; в противном случае действия продолжаются на этапе 620. Например, обращаясь к Фиг. 2, диспетчер 218 исполнения использует диспетчер 217 кэша для определения того, был ли пакет уже скомпилирован и сохранен в хранилище 220.
[0095] Определение, был ли исходный код уже скомпилирован, может включать в себя проверку в отношении скомпилированного кода в известном местоположении энергонезависимого хранилища. Известное местоположение может соответствовать имени или иному идентификатору пакета. Например, известное местоположение может быть директорией, названной после пакета или директорией-потомком директории. В качестве другого примера, известное местоположение может быть местоположением, упомянутым в структуре данных, которое указывает на то, где находится скомпилированный код, если он существует, для кода. В качестве другого примера, известное местоположение может быть местоположением, выведенным из ссылки, которая идентифицирует исходное местоположение (например, сервер кода) исходного кода, при этом исходное местоположение может быть достигнуто по сети. В качестве еще одного другого примера, определение, был ли исходный год уже скомпилирован, может вызывать проверку структуры данных, хранящейся в файле, которая соотносит байт-код для пакета с исходным кодом для пакета. Структура данных может указывать на то, был ли второй код уже сгенерирован и сохранен в файле.
[0096] На этапе 620, получают исходный код. Например, обращаясь к Фиг. 2, генератор 216 кода получает исходный код из хранилища 220.
[0097] На этапе 625, байт-код (или другой код) генерируется из исходного кода. Например, обращаясь к Фиг. 2, генератор 216 кода создает байт-код, машинно-исполняемый код или некий другой промежуточный код из полученного выше исходного кода.
[0098] На этапе 630, код (или выведенный из него код, такой как исполняемый код или другой промежуточный код) исполняется. Например, обращаясь к Фиг. 2, диспетчер 218 исполнения исполняет сгенерированный выше код.
[0099] На этапе 635, код сохраняется в средство энергонезависимого хранения. Действия, представленные этапом 635, могут происходить в связи с действиями, представленными выше, или могут быть выполнены позже. Например, обращаясь к Фиг. 2 и 3, генератор 216 кода может использовать диспетчер 217 кэша для соотнесения кода для пакета в структуре 305 данных и сохранения этой структуры данных в хранилище 220 для использования при последующем исполнении программного обеспечения. В качестве другого примера, позже, генератор 216 кода может повторно получать исходный код и повторно генерировать скомпилированный код и сохранять этот скомпилированный код в хранилище 220.
[0100] На этапе 640, если код уже был скомпилирован, то получают скомпилированный код. Например, обращаясь к Фиг. 2, диспетчер 218 исполнения может получить байт-код от диспетчера 217 кэша.
[0101] На этапе 645, полученный код (или выведенный из него код, такой как бинарный код) исполняется. Например, обращаясь к Фиг. 4, код может быть исполнен в среде 425 исполнения.
[0102] На этапе 650, могут выполняться другие действия, если существуют. Например, файл, который включает в себя байт-код, может быть отображен в памяти и совместно использован, посредством упомянутого отображения в памяти, множеством процессов.
[0103] В качестве другого примера, другие действия могут включать в себя проверку, был ли скомпилированный код модифицирован после того как был сгенерирован и если так то, повторное получение исходного кода (который может отличаться от оригинального исходного кода), повторное компилирование исходного кода, и сохранение скомпилированного кода в средстве энергонезависимого хранения для использования при последующем исполнении программного обеспечения.
[0104] Как может быть видно из вышеприведенного подробного описания, были описаны аспекты, которые относятся к генерированию и кэшированию кода программного обеспечения. Тогда как аспекты описываемого в данном документе предмета изобретения восприимчивы к различным модификациям и альтернативным конструкциям, некоторые проиллюстрированные его варианты осуществления показаны на чертежах и были подробно описаны выше. Тем не менее, следует понимать, что отсутствует намерение ограничить аспекты заявленного предмета изобретения конкретными раскрытыми формами, а наоборот, намерение состоит в том, чтобы охватить все модификации, альтернативные конструкции, и эквиваленты, подпадающие под сущность и объем различных аспектов описываемого в данном документе предмета изобретения.

Claims (53)

1. Способ генерирования кода программного обеспечения, реализуемый, по меньшей мере частично, компьютером, при этом способ содержит:
прием запроса на исполнение программного обеспечения, которое включает в себя исходный код, при этом исходный код представляет собой файл сценария для страницы веб-сайта, для которой явная ссылка на этот файл сценария не была обнаружена;
в ответ на этот запрос определение, был ли второй код сгенерирован из исходного кода и сохранен в энергонезависимой памяти, при этом это определение, был ли второй код сгенерирован из исходного кода и сохранен в энергонезависимой памяти, содержит проверку, находится ли второй код в некотором известном местоположении энергонезависимой памяти, причем это известное местоположение получают из ссылки, которая идентифицирует исходное местоположение исходного кода, причем исходное местоположение доступно по сети;
если второй код был сгенерирован перед приемом этого запроса, выполнение первого набора действий, содержащего:
получение второго кода и исполнение второго кода или кода, выведенного из него; и
если второй код еще не был сгенерирован перед приемом этого запроса, выполнение второго набора действий, содержащего:
получение исходного кода,
генерирование второго кода из этого исходного кода,
исполнение второго кода или кода, выведенного из него,
выполнение третьего набора действий, содержащего:
сохранение второго кода в энергонезависимой памяти для использования при последующем исполнении упомянутого программного обеспечения; и
отображение в памяти файла, который включает в себя второй код, и совместное использование этого файла множеством процессов посредством этого отображения в памяти.
2. Способ по п. 1, в котором выполнение третьего набора действий дополнительно содержит:
повторное получение исходного кода; и
повторное генерирование второго кода из этого исходного кода.
3. Способ по п. 1, в котором определение, был ли второй код сгенерирован из исходного кода и сохранен в энергонезависимой памяти, дополнительно содержит проверку, находится ли второй код в некотором известном местоположении энергонезависимой памяти, причем это известное местоположение соответствует имени пакета, который включает в себя упомянутый исходный код, причем пакет установлен на целевой системе, которая размещает энергонезависимую память.
4. Способ по п. 1, в котором определение, был ли второй код сгенерирован из исходного кода и сохранен в энергонезависимой памяти, дополнительно содержит получение данных из энергонезависимой памяти, причем эти данные являются частью файла, который соотносит байт-код для пакета с исходным кодом для этого пакета, причем данные указывают, был ли второй код сгенерирован и сохранен в файле.
5. Способ по п. 1, дополнительно содержащий проверку, был ли второй код модифицирован после того, как он был сгенерирован, и если это так, выполнение действий, содержащих:
повторное получение исходного кода;
повторное генерирование второго кода из этого исходного кода; и
сохранение этого второго кода в энергонезависимой памяти для использования при последующем исполнении программного обеспечения.
6. Вычислительная система в вычислительной среде, содержащая:
компьютер, содержащий блок обработки, связанный с хранилищем, причем хранилище содержит:
память, выполненную с возможностью хранения данных пакета, причем пакет включает в себя исходный код программного обеспечения, при этом исходный код представляет собой файл сценария для страницы веб-сайта, для которой явная ссылка на этот файл сценария не была обнаружена;
установщик, выполненный с возможностью установки пакета в памяти, причем установщик дополнительно выполнен с возможностью обновления структуры данных для указания того, что исходный код должен быть скомпилирован во второй код;
генератор кода, выполненный с возможностью изучения структуры данных для идентификации исходного кода и, основываясь на указании в структуре данных, что исходный код должен быть скомпилирован во второй код, компилирования исходного кода во второй код;
диспетчер кэша, выполненный с возможностью сохранения второго кода на постоянной основе в памяти и предоставления доступа ко второму коду в памяти;
диспетчер исполнения, выполненный с возможностью приема запроса на исполнение программного обеспечения и определения, скомпилировал ли генератор кода исходный код во второй код, при этом определение, скомпилировал ли генератор кода исходный код во второй код, содержит проверку, находится ли второй код в некотором известном местоположении энергонезависимой памяти, причем это известное местоположение получают из ссылки, которая идентифицирует исходное местоположение исходного кода, причем исходное местоположение доступно по сети, и если это так, выполнения действий, содержащих:
получение второго кода, и
исполнение второго кода или кода, выведенного из него; и
если это не так, выполнения действий, содержащих:
получение исходного кода,
побуждение исходного кода к компиляции во второй код, и
исполнение исходного кода или кода, выведенного из него.
7. Система по п. 6, в которой диспетчер исполнения дополнительно выполнен с возможностью побуждения второго кода к генерированию без задержки, если генератор кода еще не скомпилировал исходный код во второй код до приема запроса.
8. Система по п. 6, в которой генератор кода реализован как процесс для выполнения, когда система не устанавливает других пакетов или не выполняет других заданий, которые расходуют пропускную способность системы по обработке.
9. Система по п. 6, в которой генератор кода реализован как процесс для выполнения в некоторое конфигурируемое время суток.
10. Вычислительное устройство, содержащее:
блок обработки;
хранилище, выполненное с возможностью хранения данных пакета, причем пакет включает в себя исходный код программного обеспечения, при этом исходный код представляет собой файл сценария для страницы веб-сайта, для которой явная ссылка на этот файл сценария не была обнаружена;
установщик, выполненный с возможностью установки пакета в хранилище, при этом установщик дополнительно выполнен с возможностью обновления структуры данных для указания того, что исходный код должен быть компилирован во второй код;
генератор кода, выполненный с возможностью изучения структуры данных для идентификации исходного кода и, основываясь на указании в структуре данных, что исходный код должен быть скомпилирован во второй код, компилирования исходного кода во второй код;
диспетчер кэша, выполненный с возможностью сохранения второго кода на постоянной основе в памяти и предоставления доступа ко второму коду в памяти;
диспетчер исполнения, выполненный с возможностью приема запроса на исполнение программного обеспечения, и определения, скомпилировал ли генератор кода исходный код во второй код, при этом определение, скомпилировал ли генератор кода исходный код во второй код, содержит проверку, находится ли второй код в некотором известном местоположении энергонезависимой памяти, причем это известное местоположение получают из ссылки, которая идентифицирует исходное местоположение исходного кода, причем исходное местоположение доступно по сети, и если это так, выполнения действий, содержащих:
получение второго кода, и
исполнение второго кода или кода, выведенного из него; и
если это не так, выполнения действий, содержащих:
получение исходного кода,
побуждение исходного кода к компиляции во второй код, и
исполнение исходного кода или кода, выведенного из него.
11. Устройство по п. 10, в котором диспетчер исполнения дополнительно выполнен с возможностью побуждения второго кода к генерированию без задержки, если генератор кода еще не скомпилировал исходный код во второй код до приема запроса.
12. Устройство по п. 10, в котором генератор кода реализован как процесс для выполнения, когда система не устанавливает других пакетов или не выполняет других заданий, которые расходуют пропускную способность системы по обработке.
13. Устройство по п. 10, в котором генератор кода реализован как процесс для выполнения в некоторое конфигурируемое время суток.
RU2014133160A 2012-02-13 2013-02-04 Генерирование и кэширование кода программного обеспечения RU2646329C2 (ru)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/371,479 2012-02-13
US13/371,479 US9110751B2 (en) 2012-02-13 2012-02-13 Generating and caching software code
PCT/US2013/024559 WO2013122758A1 (en) 2012-02-13 2013-02-04 Generating and caching software code

Publications (2)

Publication Number Publication Date
RU2014133160A RU2014133160A (ru) 2016-03-10
RU2646329C2 true RU2646329C2 (ru) 2018-03-02

Family

ID=48946742

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2014133160A RU2646329C2 (ru) 2012-02-13 2013-02-04 Генерирование и кэширование кода программного обеспечения

Country Status (11)

Country Link
US (3) US9110751B2 (ru)
EP (1) EP2815309B1 (ru)
JP (1) JP6195849B2 (ru)
KR (1) KR101966754B1 (ru)
CN (1) CN104137057B (ru)
AU (1) AU2013219875B2 (ru)
BR (1) BR112014019783B1 (ru)
CA (1) CA2861426C (ru)
MX (1) MX336964B (ru)
RU (1) RU2646329C2 (ru)
WO (1) WO2013122758A1 (ru)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2691834C1 (ru) * 2018-07-11 2019-06-18 Михаил Сергеевич Герман Способ управления данными веб-сайта

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9110751B2 (en) 2012-02-13 2015-08-18 Microsoft Technology Licensing, Llc Generating and caching software code
US9207914B2 (en) 2013-12-20 2015-12-08 Microsoft Technology Licensing, Llc Execution guards in dynamic programming
US9104434B2 (en) 2013-12-20 2015-08-11 Microsoft Technology Licensing, Llc Property accesses in dynamically typed programming languages
US9442707B2 (en) * 2014-06-25 2016-09-13 Microsoft Technology Licensing, Llc Incremental whole program compilation of code
US9772824B2 (en) * 2015-03-25 2017-09-26 International Business Machines Corporation Program structure-based blocking
US9811324B2 (en) * 2015-05-29 2017-11-07 Google Inc. Code caching system
US10055208B2 (en) * 2015-08-09 2018-08-21 Oracle International Corporation Extending a virtual machine instruction set architecture
US9690360B2 (en) * 2015-08-13 2017-06-27 Intel Corporation Technologies for discontinuous execution by energy harvesting devices
US9696973B1 (en) * 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
CN108304189B (zh) * 2016-08-29 2021-03-12 迈普通信技术股份有限公司 多镜像设备软件编译方法、装置及设备
US10311217B2 (en) * 2016-12-09 2019-06-04 Microsoft Technology Licensing, Llc Application piracy prevention with secure enclave protection of automatically modularized functions
JP2018101240A (ja) * 2016-12-20 2018-06-28 株式会社ミロク情報サービス キャッシュ管理プログラム、キャッシュ管理装置及びキャッシュ管理方法
JP7030426B2 (ja) * 2017-05-31 2022-03-07 キヤノン株式会社 画像形成装置及びその制御方法、並びにプログラム
CN107341007B (zh) * 2017-06-20 2020-08-11 深圳创维-Rgb电子有限公司 显示终端及其定时开机方法、计算机可读存储介质
US10749740B2 (en) * 2017-10-31 2020-08-18 Hewlett Packard Enterprise Development Lp Deploying network-based cloud platforms on end equipment
US10606613B2 (en) * 2018-05-31 2020-03-31 Bank Of America Corporation Integrated mainframe distributed orchestration tool
CN108984183A (zh) * 2018-08-28 2018-12-11 郑州云海信息技术有限公司 一种软件跨地域构建方法、装置、设备及存储介质
KR102663196B1 (ko) * 2018-11-16 2024-05-07 삼성전자주식회사 사용자 단말장치, 서버, 사용자 단말장치의 제어방법 및 서버의 제어방법
KR101967840B1 (ko) * 2019-03-05 2019-08-13 (주) 피플아이 패키지 소프트웨어 생성 장치
US11150915B2 (en) 2019-09-13 2021-10-19 International Business Machines Corporation Deferred bytecode class verification in managed runtime environments
CN110990019B (zh) * 2019-11-20 2023-05-02 腾讯音乐娱乐科技(深圳)有限公司 一种Java类分析方法、装置、存储介质及电子设备
US11403075B2 (en) 2019-11-25 2022-08-02 International Business Machines Corporation Bytecode verification using class relationship caching
FR3105853B1 (fr) 2019-12-31 2023-01-06 Proton World Int Nv Système embarqué
FR3105854B1 (fr) * 2019-12-31 2024-07-19 St Microelectronics Rousset Système embarqué
CN111770170B (zh) 2020-06-29 2023-04-07 北京百度网讯科技有限公司 请求处理方法、装置、设备和计算机存储介质
CN112346734B (zh) * 2020-11-06 2024-06-25 杭州和利时自动化有限公司 一种编译验证方法、装置、设备及计算机可读存储介质
US11829751B1 (en) * 2020-12-23 2023-11-28 Synopsys, Inc. System and method for automatically capturing source code and associated artifacts for static analysis
CN113326046B (zh) * 2021-05-26 2023-09-26 网易(杭州)网络有限公司 获取编译时长的方法和装置
CN113791770B (zh) * 2021-11-15 2022-06-21 北京壁仞科技开发有限公司 代码编译器、代码编译方法、代码编译系统和计算机介质
CN117130618B (zh) * 2023-06-13 2024-07-09 东信和平科技股份有限公司 智能卡可执行文件的增量编译方法、装置、设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034846A1 (en) * 2002-06-12 2004-02-19 I-Logix Inc. System, method and medium for providing dynamic model-code associativity
US20050055686A1 (en) * 2003-09-08 2005-03-10 Microsoft Corporation Method and system for servicing software
US7243346B1 (en) * 2001-05-21 2007-07-10 Microsoft Corporation Customized library management system
RU2358306C2 (ru) * 2003-05-23 2009-06-10 Майкрософт Корпорейшн Подстановка после кэширования

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5182806A (en) * 1989-06-30 1993-01-26 Digital Equipment Corporation Incremental compiler for source-code development system
US6381742B2 (en) * 1998-06-19 2002-04-30 Microsoft Corporation Software package management
BR0206974A (pt) 2001-02-02 2004-03-09 Opentv Inc Método e aparelho para compilar uma linguagem interativa para televisão interativa
US6715134B2 (en) * 2002-03-04 2004-03-30 Sun Microsystems, Inc. Method and apparatus to facilitate generating simulation modules for testing system designs
US7162628B2 (en) * 2002-07-23 2007-01-09 Cisco Technology, Inc. Method, system, apparatus and program product for temporary personalization of a computer terminal
US7246346B2 (en) * 2002-09-17 2007-07-17 Microsoft Corporation System and method for persisting dynamically generated code in a directly addressable and executable storage medium
US20040123278A1 (en) * 2002-12-23 2004-06-24 Murthi Nanja Persistent cache apparatus and methods
US7103723B2 (en) * 2003-02-25 2006-09-05 Intel Corporation Priority-based code cache management
KR100518584B1 (ko) * 2003-07-12 2005-10-04 삼성전자주식회사 공유 라이브러리 시스템 및 상기 시스템 구축 방법
US7596554B2 (en) 2003-12-09 2009-09-29 International Business Machines Corporation System and method for generating a unique, file system independent key from a URI (universal resource indentifier) for use in an index-less voicexml browser caching mechanism
CA2465155C (en) 2004-04-21 2008-12-09 Ibm Canada Limited-Ibm Canada Limitee Recommendations for intelligent data caching
EP1669855A1 (en) 2004-12-02 2006-06-14 Deutsche Thomson-Brandt Gmbh Method for generating multi-language menus
US20060136907A1 (en) * 2004-12-20 2006-06-22 Microsoft Corporation Language-neutral and language-specific installation packages for software setup
US20060277250A1 (en) * 2005-06-03 2006-12-07 Sebastien Cherry Methods and systems for checking accessibility of web applications
US9009688B2 (en) * 2005-12-30 2015-04-14 Intel Corporation Type checking for object-oriented programming languages
US8225192B2 (en) * 2006-10-31 2012-07-17 Microsoft Corporation Extensible cache-safe links to files in a web page
US9112808B2 (en) * 2007-02-06 2015-08-18 At&T Intellectual Property Ii, L.P. Devices, systems, and methods for providing data
US9460229B2 (en) 2007-10-15 2016-10-04 Viasat, Inc. Methods and systems for implementing a cache model in a prefetching system
US8572065B2 (en) * 2007-11-09 2013-10-29 Microsoft Corporation Link discovery from web scripts
CN101226472A (zh) * 2008-02-03 2008-07-23 俞啟茂 一种遥控器代码生成方法
US8046779B2 (en) 2008-02-27 2011-10-25 Sap Ag Dynamic resolution of dependent components
KR100960111B1 (ko) 2008-07-30 2010-05-27 한국전자통신연구원 리버스 캐싱 프록시를 이용한 웹 기반의 역추적 시스템
US8752016B2 (en) * 2008-12-15 2014-06-10 Apple Inc. Converting JavaScript into a device-independent representation
US20100299661A1 (en) * 2009-05-25 2010-11-25 International Business Machines Corporation Load-Time Code Optimization In a Computing Environment
US20110087966A1 (en) * 2009-10-13 2011-04-14 Yaniv Leviathan Internet customization system
US20110265069A1 (en) 2010-04-21 2011-10-27 Salesforce.Com Methods and systems for execution of tenant code in an on-demand service environment including utilization of shared resources and inline governor limit enforcement
KR101689745B1 (ko) * 2010-09-06 2016-12-27 삼성전자주식회사 스크립트에 의한 동적 리소스 정보를 처리하는 웹 브라우징 시스템 및 방법
KR20120083803A (ko) * 2011-01-18 2012-07-26 삼성전자주식회사 가상머신을 위한 추가코드 생성장치 및 방법
US8880991B2 (en) * 2011-04-21 2014-11-04 Qualcomm Innovation Center, Inc. Methods and apparatus for improved browsing performance by precompilation of high-priority JavaScripts in a webpage and delaying the removal of corresponding compiled code
US9110751B2 (en) 2012-02-13 2015-08-18 Microsoft Technology Licensing, Llc Generating and caching software code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7243346B1 (en) * 2001-05-21 2007-07-10 Microsoft Corporation Customized library management system
US20040034846A1 (en) * 2002-06-12 2004-02-19 I-Logix Inc. System, method and medium for providing dynamic model-code associativity
RU2358306C2 (ru) * 2003-05-23 2009-06-10 Майкрософт Корпорейшн Подстановка после кэширования
US20050055686A1 (en) * 2003-09-08 2005-03-10 Microsoft Corporation Method and system for servicing software

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
IFFAT H. KAZI. Techniques for Obtaining High Performance in Java Programs, ACM Computing Surveys, Vol. 32, No. 3, September 2000, pp. 213-240, 28 с. *
IFFAT H. KAZI. Techniques for Obtaining High Performance in Java Programs, ACM Computing Surveys, Vol. 32, No. 3, September 2000, pp. 213-240, 28 с. US 2004/0034846 A1, 19.02.2004 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2691834C1 (ru) * 2018-07-11 2019-06-18 Михаил Сергеевич Герман Способ управления данными веб-сайта

Also Published As

Publication number Publication date
CA2861426C (en) 2020-07-07
KR101966754B1 (ko) 2019-04-08
RU2014133160A (ru) 2016-03-10
US9940120B2 (en) 2018-04-10
EP2815309A1 (en) 2014-12-24
CA2861426A1 (en) 2013-08-22
MX336964B (es) 2016-02-08
AU2013219875A1 (en) 2014-08-28
US20190108008A1 (en) 2019-04-11
AU2013219875B2 (en) 2018-05-31
CN104137057B (zh) 2017-10-24
BR112014019783A8 (pt) 2017-07-11
JP2015507310A (ja) 2015-03-05
JP6195849B2 (ja) 2017-09-13
BR112014019783A2 (pt) 2021-05-18
US20150324183A1 (en) 2015-11-12
BR112014019783B1 (pt) 2021-11-23
WO2013122758A1 (en) 2013-08-22
EP2815309A4 (en) 2015-11-04
MX2014009761A (es) 2014-09-12
CN104137057A (zh) 2014-11-05
KR20140124774A (ko) 2014-10-27
US10963233B2 (en) 2021-03-30
EP2815309B1 (en) 2020-10-07
US9110751B2 (en) 2015-08-18
US20130212567A1 (en) 2013-08-15

Similar Documents

Publication Publication Date Title
RU2646329C2 (ru) Генерирование и кэширование кода программного обеспечения
JP6248153B2 (ja) 信頼レベルのアクティブ化
US8924922B2 (en) Pre-compiling hosted managed code
US11366643B2 (en) Generating dynamic modular proxies
US8850574B1 (en) Safe self-modifying code
US11556348B2 (en) Bootstrapping profile-guided compilation and verification
US20110271248A1 (en) Converting controls into source code
US9038018B2 (en) Integrating software components
US11366657B2 (en) Inferring code deprecation from module deprecation
US10394610B2 (en) Managing split packages in a module system
US7631302B2 (en) System and method for validation of arguments provided to an application
Dhawan et al. Position paper: The case for JavaScript transactions
Dhawan et al. The case for javascript transactions: position paper