Генерация собственного кода из кода на промежуточном языке для приложения

Иллюстрации

Показать все

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

Реферат

ПРЕДПОСЫЛКИ

[001] Различные мобильные устройства также поддерживают приложения, которые могут быть загружены в представлении, которое не может выполняться впрямую, но может выполняться при компиляции на мобильном устройстве с использованием динамической (“точно к нужному моменту”) компиляции (JIT компиляции). Хотя JIT компиляция кода используется для исполнения приложений на компьютере, исполнение приложений с использованием JIT компиляции имеет ограничения, в том числе дополнительное время, необходимое для компиляции, когда приложение исполняется, и, возможно, неоптимальные решения, принятые во время компиляции.

СУЩНОСТЬ ИЗОБРЕТЕНИЯ

[002] Среди других нововведений, описанных здесь, настоящее раскрытие представляет различные характерные варианты инструментальных средств и способов для установки, выполнения и/или обновления управляемых приложений путем генерации собственного кода из кода на промежуточном языке. Согласно одному примерному методу, вычислительное устройство получает машинно-зависимый код на промежуточном языке (MDIL код), сгенерированный онлайн-провайдером для приложения. Вычислительное устройство инсталлирует (устанавливает) приложение на вычислительном устройстве путем генерации собственного (машинного) образа для приложения, в том числе путем связывания части MDIL кода с одной или более библиотеками на вычислительном устройстве. Кроме того, собственный образ сохраняется на вычислительном устройстве для использования при загрузке приложения для исполнения.

[003] В соответствии с примерным инструментальным средством, вычислительное устройство получает от онлайн-провайдера установочный пакет для приложения, где установочный пакет включает в себя набор машинно-зависимых файлов на промежуточном языке (MDIL файлов). Кроме того, на компоновщик (модуль связывания) вычислительного устройства предоставляется по меньшей мере один файл из набора MDIL файлов и одна или более библиотек, подлежащих связыванию с по меньшей мере одним файлом. Компоновщик генерирует собственный образ для приложения путем связывания MDIL кода по меньшей мере одного MDIL файла с использованием одной или более библиотек.

[004] В другом примерном методе, онлайн-провайдер генерирует MDIL код из предварительного кода для приложения. Компьютерная система генерирует набор MDIL файлов для приложения путем компиляции предварительного кода приложения в MDIL код, затем подписывает соответствующие файлы из набора MDIL файлов, чтобы указывать, что соответствующие файлы являются доверенными как происходящие из онлайн-рынка. Компьютерная система генерирует список связывания, который идентифицирует соответствующие файлы из набора MDIL файлов, а также генерирует установочный пакет для приложения, содержащего набор MDIL файлов для приложения и список связывания. Затем компьютерная система предоставляет, на онлайн-рынке, установочный пакет для скачивания.

[005] При приеме установочного пакета, вычислительное устройство получает MDIL код и генерирует собственный образ для приложения, чтобы устанавливать приложение на вычислительном устройстве. Кроме того, процессор (механизм) среды выполнения вычислительного устройства и/или одна или более библиотек, используемых установленным приложением, могут быть обновлены на вычислительном устройстве во время обновления вычислительного устройства, и приложение автоматически обновляется в ответ. Приложение обновляется путем генерации обновленного собственного образа для приложения с использованием одной или более библиотек, которые были обновлены. Обновленный собственный образ генерируется так, что он является исполняемым с использованием обновленного механизма среды выполнения на вычислительном устройстве. После того как обновленный собственный образ сгенерирован, приложение запускается путем загрузки обновленного собственного образа вместо сгенерированного ранее собственного образа.

[006] Это краткое изложение приведено, чтобы ввести выбор концепций в упрощенной форме, которые дополнительно описаны ниже. Это краткое изложение не предназначено для определения ключевых признаков или существенных признаков заявленного изобретения, а также не предназначено для использования, чтобы ограничивать объем заявленного изобретения. Указанные выше и другие цели, признаки и преимущества упомянутых технологий станут более очевидными из последующего подробного описания, которое выполнено со ссылкой на прилагаемые чертежи.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

[007] Фиг. 1 - схема, иллюстрирующая пример онлайн-провайдера/рынка и примерное вычислительное устройство, которое загружает собственный образ приложения, установленного путем связывания машинно-зависимого кода на промежуточном языке (MDIL кода).

[008] Фиг. 2 - блок-схема последовательности операций примерного способа связывания MDIL кода приложения, чтобы установить приложение на вычислительном устройстве.

[009] Фиг. 3 - схема, иллюстрирующая пример онлайн-провайдера/рынка и примерное вычислительное устройство, которое может устанавливать одно или более управляемых приложений путем генерации одного или более собственных образов из кода на промежуточном языке, который предоставляется и генерируется онлайн-провайдером/рынком (или другими онлайн-провайдерами/ рынками).

[010] На Фиг. 4 представлена блок-схема последовательности операций примерного способа для установки и обновления приложения через генерацию собственного кода с использованием кода в MDIL.

[011] На Фиг. 5 представлена блок-схема последовательности операций примерного способа генерации установочного пакета для приложения, где установочный пакет может быть предоставлен для загрузки.

[012] На Фиг. 6 показана схема вычислительного устройства, которое может генерировать один или более обновленных собственных образов для одного или более установленных приложений.

[013] На Фиг. 7 представлена блок-схема последовательности операций примерного способа обновления приложения путем генерации собственного образа для приложения из кода в MDIL.

[014] На Фиг. 8 показана схема, изображающая примерное мобильное устройство, в котором могут быть реализованы по меньшей мере некоторые из раскрытых вариантов осуществления.

[015] На Фиг. 9 показана схема, иллюстрирующая обобщенный пример подходящей среды реализации для по меньшей мере некоторых из раскрытых вариантов осуществления.

[016] На Фиг. 10 показана схема, иллюстрирующая обобщенный пример подходящей вычислительной среды для по меньшей мере некоторых из раскрытых вариантов осуществления.

ПОДРОБНОЕ ОПИСАНИЕ

[017] Настоящее раскрытие представляет различные характерные варианты инструментальных средств и способов для установки, исполнения и/или обновления управляемых приложений посредством генерации собственного кода из кода на промежуточном языке. Например, вычислительное устройство принимает MDIL код, сгенерированный онлайн-провайдером для приложения. Вычислительное устройство устанавливает приложение, генерируя собственный образ приложения. В рамках генерации собственного образа, вычислительное устройство связывает часть MDIL кода с одной или более библиотек на вычислительном устройстве. Вычислительное устройство сохраняет собственный образ для использования при загрузке приложения для исполнения. Таким образом, выполнение приложения может извлечь выгоду из предыдущей офлайн компиляции по меньшей мере части приложения (для получения MDIL кода, подходящего для устройства). В то же время, этот подход может облегчить обновление приложения, когда происходит изменение в библиотеке, используемой приложением, и/или MDIL коде для приложения.

[018] Различные особенности способов и инструментальных средств, описанных здесь, могут быть использованы в комбинации или отдельно, в зависимости от реализации. Различные признаки способов и инструментальных средств, описанных в данном документе, влияют на различные этапы обработки, в том числе прием, установку, исполнение, обновление приложения и обновление устройства. Термин «прием» обычно относится к процессу, в котором разработчик выгружает приложение к онлайн-провайдеру, который обрабатывает приложение для эффективного исполнения на одном или более типах вычислительных устройств, проверяет приложение и делает приложение доступным для загрузки. Термин «установка» обычно относится к процессу адаптации приложения для работы на конкретном вычислительном устройстве, который преобразует приложение в форму, более подходящую для быстрого и безопасного выполнения на устройстве (например, преобразование MDIL кода в собственные инструкции во время связывания путем разрешения ссылок на библиотеки и другие ресурсы, хранение собственного образа, который может быть загружен для исполнения, маркировку приложения как доверительного и т.д.). Во время исполнения, доверительный собственный образ для приложения может быть быстро загружен и запущен. Термин «обновление приложения» обычно относится к процессу, в котором обновляется приложение (например, MDIL код для приложения), который может включать в себя переустановку приложения на устройстве. Термин «обновление вычислительного устройства» обычно относится к процессу, который следует после того, как механизм среды выполнения, библиотека или другой ресурс, на который ссылается приложение, был обновлен, что обычно включает в себя повторное связывание приложений, которые зависят от библиотеки или другого ресурса, который изменился.

Примерная система для установки и загрузки приложения путем генерации собственного кода из кода в MDIL

[019] Фиг. 1 является схемой, иллюстрирующей примерного онлайн-провайдера/рынок и примерное вычислительное устройство 100, которое загружает собственный образ 110 приложения, установленного путем связывания MDIL кода 120. На Фиг. 1 предварительный код 130 для приложения принимается онлайн-провайдером 140. Например, предварительный код 130 может быть кодом для приложения, который является исходным кодом или кодом на промежуточном языке, таком как Microsoft Intermediate Language (MSIL). В блоке 135, предварительный код поступает на компилятор 150, который компилирует предварительный код 130 в MDIL код 120 для приложения. Предварительный код 130 может быть представлением более высокого уровня кода для приложения, чем MDIL код 120. Например, предварительный код 130 может быть на промежуточном языке (IL), который находится на более высоком уровне, чем MDIL код 120, который находится на уровне близком к машинному коду. MDIL код 120 может быть машинно-зависимым, так что он включает в себя собственный код, который основан на наборе инструкций процессора. Набор инструкций процессора может быть набором инструкций для процессора ARM, процессора x86 или другого процессора. MDIL код 120 также может включать в себя неразрешенные псевдо инструкции с символическими ссылками, которые могут быть разрешены, чтобы генерировать собственный код, посредством связывания.

[020] MDIL код 120 для приложения принимается в вычислительном устройстве 100. Как часть установки приложения, MDIL код 120 подается на компоновщик 160, который связывает MDIL код 120 с одной или более библиотеками 170 на устройстве. Одна или более библиотек 170 могут быть библиотеками кодов и/или библиотеками архитектуры для классов, типов или т.п. Путем связывания MDIL кода 120 на вычислительном устройстве 100, компоновщик 160 генерирует собственный образ 110 приложения. Собственный образ 110 включает в себя собственный код для приложения и сохраняется на устройстве. В блоке 180 собственный образ загружается для исполнения приложения.

Примерный способ связывания MDIL кода для установки приложения на вычислительное устройство

[021] На Фиг. 2 представлена блок-схема последовательности операций примерного способа 200 связывания MDIL кода приложения, чтобы установить приложение на вычислительном устройстве. В различных вариантах осуществления иллюстрируемые блоки способа на Фиг. 2 может быть объединены, разделены на суб-блоки или опущены.

[022] На Фиг. 2, вычислительное устройство получает MDIL код для приложения из онлайн-провайдера в блоке 210. Например, вычислительное устройство может получить один или более файлов, которые включают в себя код для приложения, причем код выполнен на IL, который является машинно-зависимым, таким как код на машинно-зависимом промежуточном языке, как описано в опубликованной патентной заявке США № US 2011/0258615 или на другом машинно-зависимом промежуточном языке. Поскольку MDIL код принимается в вычислительном устройстве от онлайн-провайдера, MDIL код может генерироваться из компиляции онлайн-провайдера или в другом месте в облаке. Например, онлайн-провайдер компилирует предварительный код для приложения, чтобы генерировать MDIL код для приложения.

[023] В некоторых реализациях, принимается установочный пакет для приложения, причем установочный пакет включает в себя MDIL код для приложения. Установочный пакет для приложения может включать в себя другую информацию для приложения, такую как файлы ресурсов для приложения. MDIL код для приложения может сохраняться на вычислительном устройстве для установки приложения и последующего обновления приложения.

[024] В блоке 220, приложение устанавливается на вычислительном устройстве путем генерации собственного образа приложения, что включает в себя связывание MDIL кода приложения. Например, компоновщик может связывать MDIL код с одной или более библиотеками, доступными на вычислительном устройстве, чтобы генерировать собственный образ для приложения, которое является исполняемым. Приложение может быть управляемым приложением, исполняемым с использованием механизма среды выполнения или механизма исполнения инструкций, такого как Common Language Runtime архитектуры .NET или другим механизмом среды выполнения. Механизм среды выполнения и/или механизм исполнения инструкций может быть слоем программного обеспечения, на котором приложение в конечном счете работает. В некоторых реализациях, управляемое приложение представляет собой приложение, которое исполняется с использованием архитектуры, которая включает в себя одну или более совместно используемых библиотек и одну или более управляемых сред среды выполнения кода. Например, библиотеки являются библиотеками базовых классов, которые являются общими для разных приложений. В некоторых реализациях, библиотека на вычислительном устройстве может быть образом библиотеки в собственном и/или машинном коде, который может быть загружен в память для использования управляемым приложением, которое также загружается в память. В некоторых реализациях, генерируемый собственный образ может быть сгенерирован компоновщиком, так что собственный образ является исполняемым посредством механизма среды выполнения или механизмом исполнения инструкций, который используется для запуска приложения на вычислительном устройстве. Например, компоновщик может использовать и/или ссылаться на механизм среды выполнения для приложения при связывании (компоновке), так что связывание является подходящим для исполнения с использованием механизма среды выполнения.

[025] В некоторых реализациях, связывание, выполняемое компоновщиком, разрешает MDIL код и генерирует собственный код для приложения, который включается в собственный образ для приложения. Собственный код может быть машинным кодом, который является исполняемым на конкретном процессоре и который использует инструкции из набора инструкций процессора. Набор инструкций процессора может быть набором инструкций для процессора ARM, процессора x86 или другого процессора. В некоторых реализациях, при генерации собственного образа, для каждого MDIL файла в наборе файлов, полученных для приложения, соответствующий MDIL файл и одна или более библиотек, которые должны быть связаны с MDIL кодом файла, предоставляются компоновщику. Например, один или более путей файлов к MDIL файлам и/или файлам библиотек могут быть предоставлены компоновщику. Компоновщик связывает соответствующие MDIL файлы с библиотеками, предоставленными компоновщику, чтобы сгенерировать собственный образ для приложения. Собственный образ может включать в себя собственный код, такой как машинный код, который является исполняемым процессором вычислительного устройства. (В дополнение к собственному образу, по меньшей мере некоторый код для приложения может поддерживаться в форме IL, для “точно к нужному моменту” компиляции или другой компиляции, прежде чем приложение запускается, или когда приложение запускается. Это может быть полезно, когда ресурсы часто меняются, или когда значение типа или другая ссылка не может быть разрешена, когда приложение устанавливается, и остальной MDIL код связывается с библиотеками на устройстве.)

[026] В некоторых реализациях, приложение может быть установлено на устройстве с помощью менеджера пакетов. Например, во время установки приложения, принятый установочный пакет для приложения может быть распакован с помощью менеджера пакетов. Если установочный пакет и/или один или более файлов, включенных в установочный пакет, сжаты, то менеджер пакетов может распаковать такие файлы. Если один или более файлов не сжаты, то менеджер пакетов не распаковывает такие файлы. Менеджер пакетов может предоставить каждый из MDIL файлов, которые должны связываться, на компоновщик вместе с библиотеками, которые должны быть связаны с соответствующими MDIL файлами. В некоторых реализациях менеджер пакетов предоставляет MDIL файлы и/или одну или более библиотек путем предоставления ссылок на MDIL файлы и/или одну или более библиотек компоновщику. Компоновщик связывает соответствующие MDIL файлы с предоставленными библиотеками для соответствующих MDIL файлов для генерации собственного образа приложения. Собственный образ может быть сгенерирован компоновщиком так, что собственный образ является исполняемым с использованием механизма среды выполнения, доступного на вычислительном устройстве для запуска приложения.

[027] В блоке 230, собственный образ приложения сохраняется на вычислительном устройстве для использования при загрузке приложения для исполнения. Например, сгенерированный собственный образ загружается для исполнения приложения (и MDIL код, который не является исполняемым, не используется для исполнения приложения). В некоторых реализациях, собственный образ определяется как доверительный перед загрузкой для исполнения. В других реализациях, вычислительное устройство не выполняет никакого определения относительно того, является ли собственный образ доверительным, прежде чем собственный образ загружается для исполнения.

Примерная система для генерации собственного кода из предоставленного MDIL кода для установки и исполнения приложения

[028] Фиг. 3 является схемой, иллюстрирующей примерного онлайн-провайдера/рынок и примерное вычислительное устройство 350, которое может устанавливать одно или более управляемых приложений путем генерации одного или более собственных образов из кода на промежуточном языке, таком как MDIL, который предоставляется и генерируется онлайн-провайдером (или другими онлайн-провайдерами). На Фиг. 3, онлайн-провайдер 305 использует компилятор 310, чтобы компилировать предварительный код 315 в один или более MDIL файлов 320, которые являются файлами, которые включают в себя код в MDIL. Набор из одного или более MDIL файлов 320 упакован в установочный пакет 325 для приложения. Каждый из MDIL файлов может быть подписан как доверительный, как показано в блоке 330. Один или более файлов 335, которые включают в себя информацию поддержки, такие как файлы ресурсов или контент приложения, могут быть включены в установочный пакет 325. Установочный пакет 325 хранится онлайн-провайдером 305 и предлагается для загрузки, как показано в блоке 340. Прежде чем установочный пакет 325 будет загружен от онлайн-провайдера 305, установочный пакет 325 сам может быть подписан как доверительный, как показано в блоке 345.

[029] Таким образом, установочный пакет 325 предлагается в качестве части каталога приложений в онлайн-рынке. Различные версии установочного пакета 325 могут быть предложены для различных типов вычислительных устройств. Например, различные типы MDIL кода (адаптированные для разных типов процессоров) включаются в различные установочные пакеты для различных типов вычислительных устройств. Установочные пакеты, доступные для разных типов вычислительных устройств, могут включать в себя версию с не-MDIL кодом (например, MSIL код в XAP файле) в целях обратной совместимости.

[030] Вычислительное устройство 350 загружает один или более установочных пакетов, включая установочный пакет 325, от онлайн-провайдера в блоке 355. В качестве части установки приложения, менеджер 360 пакетов вычислительного устройства 350 распаковывает один или более MDIL файлов 320 и один или более файлов 335, которые включают в себя информацию поддержки для приложения. Менеджер пакетов также вызывает компоновщик 365. Для каждого MDIL файла набора из одного или более MDIL файлов 320, менеджер 360 пакетов предоставляет соответствующий MDIL файл, например MDIL файл 322, компоновщику 365 вместе с одной или более библиотеками, подлежащими связыванию с соответствующим MDIL файлом, такими как одна или более библиотек 370. Компоновщик 365 связывает соответствующий MDIL файл с одной или более библиотеками, предоставленными для соответствующего MDIL файла, чтобы генерировать собственный код. Библиотеки, предоставленные для MDIL файлов (такие, как одна или более библиотек 370), включены в набор библиотек 375, которые находятся на вычислительном устройстве 350. Используя собственный код, сгенерированный из связывания одного или более MDIL файлов 320, компоновщик генерирует собственный образ 380 для приложения. Собственный образ 380 может быть сгенерирован компоновщиком 365 таким образом, что собственный образ 380 является выполняемым с использованием механизма среды выполнения на вычислительном устройстве, которое может запустить приложение. Собственный образ 380 сохраняется как часть установки приложения на устройстве, как показано в блоке 385. Вычислительное устройство 350 также может установить одно или более других приложений и сохранить сгенерированные собственные образы, соответствующие соответственным другим приложениям.

[031] Как показано в блоке 390, собственный образ 380 может быть подписан как доверительный код, который был сгенерирован из доверительного кода компоновщиком 365. Собственный образ 380 может быть подписан, прежде чем он будет сохранен и/или загружен для использования при исполнении приложения. В блоке 395, собственный образ 380 загружается для исполнения приложения. При загрузке, собственный код собственного образа исполняется вычислительным устройством 305, чтобы обеспечить функциональность приложения.

Примерный способ установки и обновления приложения посредством генерации собственного кода с использованием кода в MDIL

[032] На Фиг. 4 представлена блок-схема последовательности операций примерного способа 400 для установки и обновления приложения посредством генерации собственного кода с использованием кода в MDIL. На Фиг. 4, как показано в блоке 410, генерируется установочный пакет, который включает в себя MDIL код. В некоторых реализациях, MDIL код могут быть включен в один или более файлов. В некоторых реализациях, предварительный код может быть скомпилирован для генерации MDIL кода.

[033] В некоторых реализациях, MDIL код для приложения включает в себя собственный код на основе набора инструкций процессора, но также может включать в себя псевдо инструкции. Например, псевдо инструкция включает в себя символическую ссылку и/или ключевое поле, которые не могут быть разрешены, когда генерируется MDIL. Таким образом, в некоторых реализациях, псевдо инструкции могут включать в себя символические ссылки на поля, типы или т.п. Например, символические ссылки могут быть маркерами, которые идентифицируют поле или тип для использования без специального указания смещения поля или размера типа. В некоторых реализациях, символическая ссылка может быть маркером, который может интерпретироваться компоновщиком, чтобы определять собственный код, который должен генерироваться для символической ссылки. Например, для маркера, такого как маркер поля, который ссылается на поле объекта, компоновщик на конкретном вычислительном устройстве может (1) компоновать объект, как он доступен на вычислительном устройстве, через библиотеку и (2) определять соответствующее смещение для поля объекта, при генерации исполняемых инструкций для вычислительного устройства. Таким образом, в некоторых реализациях, смещения поля объектов в MDIL коде могут быть символическими, а не жестко кодированными как численные смещения (так, как в соответствующем собственном коде).

[034] Псевдо инструкция может абстрагировать детали реализации, которые должны быть определены и/или разрешены, когда псевдо инструкция связана с соответствующей библиотекой на вычислительном устройстве. В некоторых реализациях, MDIL код включает в себя псевдо инструкции, которые включают символические ссылки, которые могут быть преобразованы компоновщиком для получения собственных инструкций, исполняемых процессором. Например, MDIL код может включать в себя псевдо инструкции, которые могут быть преобразованы компоновщиком в машинные инструкции для доступа к полю объекта, что управляется механизмом среды выполнения, таким как Common Language Runtime (CLR) архитектуры .NET и т.п. В некоторых реализациях, псевдо инструкции в MDIL коде могут быть подобны машинному коду на собственном языке, так что регистры уже распределены, но смещения не включены в одну или более библиотек и/или классов. Например, смещение поля, включенное в собственную инструкцию, как преобразованную из псевдо инструкции, может быть определено компоновщиком и может зависеть от версии доступной библиотеки и/или от вычислительного устройства. В некоторых реализациях, MDIL код может включать в себя псевдо инструкции, которые могут быть преобразованы компоновщиком в машинные инструкции для поиска реализации или экземпляра обобщенного типа или метода.

[035] Со ссылкой на Фиг. 4, в блоке 420, вычислительное устройство получает MDIL код для приложения. Например, вычислительное устройство может получить установочный пакет для приложения, который включает в себя MDIL файлы, которые содержат MDIL код для приложения. В некоторых реализациях, установочный пакет может включать в себя список связывания, который включает в себя перечень MDIL файлов приложения, которые должны быть связаны, чтобы генерировать собственный образ для приложения, и перечень набора из одной или более библиотек, которые должны быть связаны с соответствующими MDIL файлами. В некоторых реализациях одна или более из библиотек, подлежащих связыванию с MDIL кодом приложения, являются библиотеками, которые были объявлены и/или включены в исходный код приложения. Одна или более других библиотек, подлежащих связыванию с MDIL кодом приложения, могут быть библиотеками, которые не объявлены и/или не включены в исходный код приложения.

[036] В блоке 430, приложение устанавливается на вычислительном устройстве путем генерации собственного образа приложения. В некоторых реализациях, приложение может быть установлено с помощью менеджера пакетов. Например, менеджер пакетов может определить, что установочный пакет подписан как доверительный, прежде чем использовать его файлы для установки приложения на вычислительном устройстве, и если установочный пакет не подписан как доверительный, менеджер пакетов не использует установочный пакет для установки приложения на вычислительном устройстве. Менеджер пакетов может предоставить каждый из MDIL файлов, которые должны быть связаны, компоновщику вместе с библиотеками, которые должны быть связаны с соответствующими MDIL файлами. В некоторых реализациях, вместо или в дополнение к определению того, весь ли установочный пакет подписан как доверительный, MDIL файлы могут определяться как подписанные в качестве доверительных, прежде чем использоваться для генерации собственного образа для приложения, и MDIL файлы, которые определены как не подписанные в качестве доверительных, не используются для создания собственного образа для приложения. В некоторых реализациях менеджер пакетов может получать и использовать список связывания, чтобы автоматически определять и идентифицировать MDIL файлы, которые должны быть связаны, и соответствующие библиотеки, которые должны быть связаны с кодом соответствующих MDIL файлов для приложения. Список связывания может быть в машиночитаемом формате, таком как язык программирования, сценариев или разметки. Например, список связывания может быть включен в файл, который включает в себя информацию, организованную с использованием расширяемого языка разметки (XML).

[037] В некоторых реализациях менеджер пакетов предоставляет MDIL файлы и/или одну или более библиотек компоновщику путем предоставления ссылок на MDIL файлов и/или одну или более библиотек компоновщику. Компоновщик связывает соответствующие MDIL файлы с предоставленными библиотеками для соответствующих MDIL файлов для создания собственного образа приложения. На высоком уровне, компоновщик считывает MDIL инструкции, преобразует IL инструкции в собственные инструкции и проходит через инструкции, которые уже находятся в собственной форме. Например, компоновщик может связывать MDIL код с одной или более библиотеками на вычислительном устройстве, чтобы генерировать собственный образ для приложения, которое является исполняемым. Собственный образ может генерироваться компоновщиком так, что собственный образ является исполняемым с использованием механизма среды выполнения на вычислительном устройстве, который доступен для компоновщика, то есть для работы приложения. Механизмом среды выполнения может быть слой программного обеспечения, который в конечном итоге может запустить приложение на вычислительном устройстве. В некоторых реализациях, компоновщик может быть запущен с использованием информации из сценария (скрипта), пользовательского ввода и/или другой информации. В некоторых реализациях кода связывания, MDIL код предоставляется компоновщику. Компоновщик разрешает псевдо инструкции для генерации соответствующих собственных инструкций. Например, из символических ссылок (например, маркера поля) в псевдо инструкциях, компоновщик может генерировать собственный код путем определения и специфицирования численных смещений для полей на основе формата типа. В некоторых реализациях, псевдо инструкции MDIL могут быть использованы, чтобы создавать собственные инструкции, которые могут отличаться по длине от псевдо инструкции. Альтернативно, собственные инструкции могут не отличаться по длине от псевдо инструкций. В некоторых реализациях, по меньшей мере, часть MDIL кода для приложения может быть близкой к машинному коду, включенному в собственный образ приложения; однако другие части MDIL кода могут обеспечивать уровень абстракции, который позволяет связывать часть MDIL кода с библиотекой, которая может быть доступна в одной или более версиях. Через связывание, MDIL код может быть использован для генерации исполняемого кода, который исполняется с использованием конкретной версии библиотеки. Например, связывание MDIL кода с первым набором библиотек может генерировать исполняемый код для приложения. Или связывание MDIL код с набором библиотек с одной или более библиотеками, находящимися в другой версии, может также генерировать исполняемый код для приложения. Наборы версий одной или более библиотек могут иметь перекрывающиеся версии библиотек.

[038] В некоторых реализациях, связывание MDIL кода генерирует код, который может быть непосредственно выполняемым процессором без дополнительной компиляции. Например, связывание MDIL кода с библиотекой включает в себя генерацию собственной инструкции из инструкции в MDIL коде. В некоторых реализациях, MDIL код включает в себя псевдо инструкции, которые включают в себя символические ссылки, которые преобразуются и/или связываются компоновщиком для создания собственных инструкций, исполняемых процессором. Например, компоновщик может преобразовать псевдо инструкции в инструкции собственного кода для доступа к полю объекта, который может управляться механизмом среды выполнения на вычислительном устройстве. В некоторых реализациях, части MDIL кода могут быть аналогичны генерируемому собственному коду таким образом, что регистры являются распределенными, но в MDIL коде сдвиги не были включены для одной или более библиотек и/или классов. В некоторых реализациях, компоновщик может конвертировать псевдо инструкции в инструкции собственного кода для поиска реализации или экземпляра обобщенного типа или метода.

[039] В некоторых реализациях, символические инструкции MDIL кода и сгенерированные соответствующие собственные инструкции являются соответствующими в отношении виртуального назначения сегментов метода и/или формата поля объекта. Например, MDIL код и исполняемый собственный код могут быть соответствующими по отношению к формату поля объекта, так что часть MDIL кода для доступа к объектам, которая включает в себя маркер поля, может быть использована, чтобы генерировать собственные инструкции (например, машинные инструкции) с использованием численных смещений поля. В некоторых реализациях, компоновщик может генерировать численное смещение из символической ссылки, чтобы генерировать одну или более исполняемых машинных инструкций. Например, символическая ссылка в MDIL коде преобразуется компоновщиком в конкретную ссылку поля таким образом, что конкретная ссылка поля включает в себя численный размер и/или смещение.

[040] В некоторых реализациях связывания MDIL кода, компоновщик может интерпретировать символическую ссылку, которая включает в себя маркер, для определения собственного кода, подлежащего генерации для символической ссылки. Например, для маркера поля, который ссылается на поле объекта, компоновщик может компоновать объект, как он может быть доступен на вычислительном устройстве, и определять соответствующее смещение для поля объекта для генерации исполняемых инструкций для вычислительного устройства. В некоторых реализациях связывания MDIL кода, компоновщик, который может связывать MDIL код, является более сложным, чем линкер. Например, при связывании MDIL кода, компоновщик может настраивать один или более переходов в результирующем собственном коде, так что переходы соответствуют их намеченным целям.

[041] В дополнение к собственному коду в собственном образе, по меньшей мере некоторый код для приложения может поддерживаться в IL форме. Код в IL форме дополнительно обрабатывается в течение “точно к нужному моменту” (динамической) компиляции или другой компиляции, прежде чем приложение запускается, или когда приложение запускается. Это может быть полезно, когда механизм среды выполнения, библиотека или другой ресурс часто меняются. Или это может быть полезно, когда значение типа или ссылка не могут быть разрешены в течение процесса связывания, в котором остающийся MDIL код связывается с библиотеками на вычислительном устройстве.

[042] В блоке 440, собственный образ сохраняется для использования при загрузке приложения для исполнения. Например, когда пользователь запускает приложение на вычислительном устройстве, собственный образ приложения загружается посредством механизма исполнения инструкций или среды выполнения, такого как CLR архитектуры .NET или другого механизма среды выполнения. В некоторых реализациях, вычислительное устройство может включать MSIL код для приложения, который может компилироваться на вычислительном устройстве с использованием “точно к нужному моменту” компиляции, чтобы исполнять приложение, но вместо исполнения приложения с использованием MSIL кода, собственный образ для приложения загружается и исполняется, чтобы запустить приложение. В некоторых реализациях, когда собственный образ загружается, загружаются один или более образов или компоновок библиотек, которые используются кодом приложения как включенные в собственный образ. Например, собственный образ может быть загружен для исполнения с использованием механизма среды выполнения вычислительного устройства. Собственный образ для п