Windows Phone и управляемый код
Раньше для выполнения программы в компьютере требовалось просто запустить её. Файл, содержащий инструкции программы, загружался в память, и затем компьютер последовательно выполнял инструкции. Такой подход является простым, но чреват проблемами.
Первая проблема состоит в том, что для компьютерных систем разных типов требуются разные файлы инструкций. Раньше производители компьютеров выпускали аппаратные средства, которые понимали особый набор бинарных инструкций, и не было возможности взять программу, созданную для аппаратных устройств одного типа, и затем запустить её в устройстве другого типа.
Вторая проблема состоит в том, что если инструкции написаны неграмотно или содержат опасный код, компьютер всё равно их выполняет. Неграмотные инструкции в файле, который загружается в память, снижают быстродействие аппаратных средств компьютера. Опасные инструкции могут заставить программу повреждать другие данные в компьютере.
Промежуточный язык Microsoft (MSIL — Microsoft Intermediate Language). В Microsoft .NET эти проблемы решаются введением промежуточного языка для описания действий, которые программа должна выполнить. При компиляции программы на C# компилятор создаёт файл, содержащий инструкции на этом промежуточном языке. При запуске программы эти инструкции снова компилируются — на этот раз в низкоуровневые инструкции, понятные целевому аппаратному обеспечению. Во время процесса компиляции инструкции проверяются на безопасность, и при работе программы их выполнение отслеживается исполняющей средой.
Программы на Microsoft .NET составляются из отдельных компонентов, называемых сборками. Сборка содержит код MSIL вместе с любыми ресурсами, которые использует код, например, изображения, звуки и др. Сборка может быть либо исполняемым файлом, который можно запустить, либо библиотекой, которая предоставляет приложению ресурсы. Windows Phone может работать с исполняемыми файлами и библиотеками на C#, созданными любым .NET-совместимым компилятором. Можно написать часть кода приложения на другом языке, например Visual Basic, C++ или F#. Программные библиотеки, созданные на этих языках, можно использовать в приложениях для телефона.
Идея .NET состоит в том, чтобы предоставить единую основу для выполнения кода, который не зависит от аппаратного обеспечения или языка программирования. Стандарты для .NET определяют формирование типов данных и синтаксис языков C# и Visual Basic.NET.
Компиляция "на лету". Когда нужно запустить программу, требуется как-то преобразовать MSIL-код (который не зависит от компьютерного оборудования) в инструкции машинного кода, которые может выполнить процессор конкретного компьютера. Этот процесс компиляции называют компиляцией "на лету" (JIT — Just-in-time), потому что машинный код для целевого устройства компилируется из инструкций на промежуточном языке непосредственно перед их выполнением. Подход, при котором программа запускается в управляемой среде, называется управляемым кодом. Компиляция происходит непосредственно перед запуском программы: пользователь телефона выбирает программу из стартовой страницы, MSIL-код загружается из хранилища, и затем происходит компиляция.
Недостаток этого подхода состоит в том, что, вместо того чтобы просто запустить файл, компьютер должен выполнить дополнительную работу. Он должен загрузить MSIL-код, скомпилировать его в машинный код и следить за тем, какие действия выполняет программа при работе. К счастью, современные процессоры (включая процессор платформы Windows Phone) могут выполнять эти действия без заметного снижения производительности.
Преимущество заключается в том, что один и тот же промежуточный файл кода может быть загружен и выполнен на любом устройстве, в котором работает система .NET. Можно запустить одну и ту же программу на мобильном устройстве, компьютере под управлением Windows или Xbox 360 — даже при том, что у этих платформ абсолютно разные операционные системы и оборудование.
Другое преимущество состоит в том, что этот процесс загрузки может включать средства проверки подлинности программ. .NET предоставляет механизмы, которыми используются для подписи программ с помощью криптографических методов, которые затрудняют несанкционированное изменение программы или создание "поддельных" версий вашего кода. Разработчики приложений для массового использования используют уникальный ключ для шифрования для подписи создаваемых приложений.
Наконец, использование промежуточного языка означает возможность использования нескольких языков программирования. Хотя основными программными инструментами для Windows Phone являются Visual Studio и C#, можно использовать скомпилированный код, созданный на любом языке программирования, который содержит .NET-компилятор. Если есть готовые программы на C++, или даже на F#, можно использовать библиотеки кода этих программ в приложениях для Windows Phone. Однако, в первую очередь для создания программ используется язык C# и технологии Silverlight или XNA.
Управляемый код. Программы для Windows Phone запускаются в управляемой среде, которая работает в операционной системе. Программам не предоставляется прямой доступ к аппаратным средствам, что не позволяет создавать программы, которые приводят к неправильной работе телефона.
Как следует из вышесказанного, в описанном подходе есть свои преимущества и недостатки. Преимущество состоит в том, что достаточно изучить только один язык программирования (C#), чтобы создавать приложения для нескольких платформ. Созданные программы защищены от потенциальных угроз повреждения со стороны других программ, и можно быть уверенным, что работа программного обеспечения защищена от внешних воздействий.
Недостаток заключается в том, что всё это происходит за счёт дополнительной работы системы, в которой запускаются приложения. Кроме загрузки программы в память и выполнения её инструкций осуществляется проверка её подлинности икомпиляция "на лету" в машинные инструкции. В результате, пользователю придётся при запуске приложения некоторое время ожидать появления первого окна программы. К счастью, мощность Windows Phone снижает эти задержки, но очень большие программы лучше разделить на отдельные части, чтобы они загружались постепенно.