Представлен Portable Native Client для запуска платформонезависимых C/C++ программ в браузере

Компания Google анонсировала технологию Portable Native Client (PNaCl), в рамках которой разработан многоплатформенный вариант системы Native Client, позволяющий выполнять приложения, написанные на C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры. Код PNaCl уже интегрирован в экспериментальную ветку Chrome 29. В PNaCl вместо генерации машинного кода приложение компилируется в универсальный биткод LLVM и поставляется в непривязанном к конкретной платформе исполняемом формате ».pexe». В процессе запуска приложения промежуточный биткод LLVM транслируется в машинный код текущей платформы на стороне локальной системы пользователя. Иными словами собранное с использованием PNaCl приложение может выполняться в различных мобильных и настольных системах с разными аппаратными архитектурами (в настоящее время поддерживаются 32- и 64-разрядные системы x86 и устройства на базе архитектуры ARM). Другим важны отличием от ранее доступного Native Client является необходимость использования многоплатформенной библиотеки newlib, развиваемой комапанией Red Hat в качестве упрощённой стандартной Си-библиотеки для встраиваемых систем. Библиотека glibc, обращение к Pepper API для выполнения мультимедийных операций и динамическое связывание с другими библиотеками пока не поддерживаются.

Для сборки универсальных исполняемых файлов pexe подготовлен специальный инструментарий pnacl, поставляемый в составе SDK-пакета pepper_canary. Новый инструментарий базируется на компиляторе Clang и компонентах LLVM (в Native Client использовался GCC). Для включения поддержки PNaCl в Сhrome 29, браузер должен быть запущен с флагом »--enable-pnacl», в этом случае транслятор биткода LLVM запускается в форме отдельного фонового процесса. Контролировать работу транслятора можно при помощи служебной ссылки «chrome://nacl».

Вынос стадии генерации машинного кода на сторону клиента позволяет разработчику не задумываться о низкоуровневых оптимизациях и поддержке новых архитектур — новые методы оптимизации и поддержка новых аппратаных платформ производится без пересборки пользовательского приложения, через обновление транслятора. После выхода финального релиза PNaCl и окончательной стабилизации промежуточного формата исполняемых файлов, пользователи получат возможность интегрировать переносимые PNaCl-модули в любые web-страницы, без необходимости размещения приложения в Chrome Web Store.

Проект Mozilla, в свою очередь, продвигает собственную технологию для запуска в браузере приложений, написанных на языках Си и Си++. В отличие от Native Client, приложения транслируются в специальное подмножество языка JavaScript, что позволяет запускать их в любых браузерах. При наличии поддержки в браузере специального JavaScript-диалекта со строгой типизацией — Asm.js, производительность выполнения таких программ существенно повышается и может отставать от нативных приложений примерно в два раза. В данный момент поддержка Asm.js уже интегрирована в бета-версию Firefox 22.

©  OpenNet