Компания Google анонсировала (https://developers.google.com/native-client/announcements) технологию Portable Native Client (http://www.chromium.org/nativeclient/pnacl/building-and-test...) (PNaCl), в рамках которой разработан многоплатформенный вариант системы Native Client, позволяющий выполнять приложения, написанные на C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры. Код PNaCl уже интегрирован в экспериментальную ветку Chrome 29.
В PNaCl вместо генерации машинного кода приложение компилируется в универсальный биткод LLVM и поставляется в непривязанном к конкретной платформе исполняемом формате ".pexe". В процессе запуска приложения промежуточный биткод LLVM (http://www.chromium.org/nativeclient/pnacl/bitcode-abi) транслируется в машинный код текущей платформы на стороне локальной системы пользователя. Иными словами собранное с использованием PNaCl приложение может выполняться в различных мобильных и настольных системах с разными аппаратными архитектурами (в настоящее время поддерживаются 32- и 64-разрядные системы x86 и устройства на базе архитектуры ARM). Другим важны отличием от ранее доступного Native Client является необходимость использования многоплатформенной библиотеки newlib (http://www.sourceware.org/newlib/), развиваемой комапанией Red Hat в качестве упрощённой (http://www.sourceware.org/newlib/libc.html) стандартной Си-библиотеки для встраиваемых систем. Библиотека glibc, обращение к Pepper API для выполнения мультимедийных операций и динамическое связывание с другими библиотеками пока не поддерживаются.
Для сборки универсальных исполняемых файлов pexe подготовлен (http://www.chromium.org/nativeclient/pnacl/developing-pnacl) специальный инструментарий pnacl, поставляемый в составе SDK-пакета pepper_canary. Новый инструментарий базируется на компиляторе Clang и компонентах LLVM (в Native Client использовался GCC). Для включения поддержки PNaCl в Сhrome 29, браузер должен быть запущен с флагом "--enable-pnacl", в этом случае транслятор биткода LLVM запускается в форме отдельного фонового процесса. Контролировать работу транслятора можно при помощи служебной ссылки "chrome://nacl".
Вынос стадии генерации машинного кода на сторону клиента позволяет разработчику не задумываться о низкоуровневых оптимизациях и поддержке новых архитектур - новые методы оптимизации и поддержка новых аппратаных платформ производится без пересборки пользовательского приложения, через обновление транслятора. После выхода финального релиза PNaCl и окончательной стабилизации промежуточного формата исполняемых файлов, пользователи получат возможность интегрировать переносимые PNaCl-модули в любые web-страницы, без необходимости размещения приложения в Chrome Web Store.
Проект Mozilla, в свою очередь, продвигает (https://www.opennet.ru/opennews/art.shtml?num=36468) собственную технологию для запуска в браузере приложений, написанных на языках Си и Си++. В отличие от Native Client, приложения транслируются в специальное подмножество языка JavaScript, что позволяет запускать их в любых браузерах. При наличии поддержки в браузере специального JavaScript-диалекта со строгой типизацией - Asm.js, производительность выполнения таких программ существенно повышается и может отставать от нативных приложений примерно в два раза. В данный момент поддержка Asm.js уже интегрирована в бета-версию Firefox 22.
URL: http://www.theregister.co.uk/2013/05/18/google_portable_nati.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=36962