Нативный клиент Chrome (NaCl) позволяет писать веб-приложения с собственным кодом. Теперь вы можете использовать его для процессоров ARM, и это довольно просто. В ближайшем будущем вы сможете создавать независимые от архитектуры собственные модули, что может показаться противоречивым.
Chrome имеет ряд функций, которые делают его особенным, но единственное, что в настоящее время делает его уникальным, — это возможность запускать собственный код. Идея в том, что нативный код быстрый, компактный и может делать то, что вы просто не можете сделать в JavaScript.
Было короткое время, когда Firefox мог также запускать модули NaCl через плагин, но Mozilla заявила, что предпочитает сосредоточиться на ускорении своего JavaScript. Это, конечно, альтернативная философия — не переходите на собственный код; сделать JIT-компиляцию достаточно хорошей, чтобы использовать JavaScript, как если бы он был родным.
Столь же очевидно, что недостаток машинного кода заключается в том, что он работает только на определенных архитектурах машины. В те дни, когда x86 был единственным процессором, с которым вы могли столкнуться, это не было большой проблемой, но сегодня большинство мобильных устройств используют процессор ARM того или иного типа. Таким образом, использование нативного кода означало, что ваше приложение будет работать только в системе x86, а не на мобильных устройствах.
Теперь вы можете ориентироваться как на процессоры x86, так и на процессоры ARM, пишущие на C или C ++. Вам нужно добавить строку в манифест и перекомпилировать модуль, но это довольно просто. Это просто добавляет двоичный файл ARM к уже созданным 32-разрядным и 64-разрядным двоичным файлам x86. Также существует ограничение на стандартную библиотеку C. Newlib. Все, что вам нужно сделать, это убедиться, что вы используете самую последнюю версию SDK.
Итак, можете ли вы теперь взять свои модули NaCl и запустить их на мобильных устройствах? Не совсем. Проблема в том, что текущий Chrome для Android вообще не поддерживает NaCl. Только браузер Chrome, входящий в состав Chrome OS, поддерживает NaCl на ARM. Это означает, что на данный момент ваши приложения будут ограничены Chromebook.
В более отдаленном будущем команда Chrome планирует гораздо большие изменения:
«В 2013 году следующее поколение Native Client, названное Portable Native Client, представит истинную независимость от архитектуры за счет использования битового кода LLVM в качестве проводного формата».
Это будет известно как PNaCl, произносится как «вершина» — и идея мало чем отличается от стандартного подхода к запуску таких языков, как Java, машинно-независимым способом. C / C ++ соответствует промежуточному коду, называемому битовым кодом LLVM. Язык высокого уровня соответствует одному переносимому исполняемому файлу, который загружается в браузер независимо от архитектуры, на которой он работает. Небольшой компилятор, встроенный в браузер, скомпилирует битовый код LLVM в собственный код, необходимый для уровня NaCl.
Чем это отличается, скажем, от Java, запущенной в браузере?
На самом деле он отличается только тем, что код в конечном итоге компилируется в машинный код, и эффективностью, с которой это можно сделать. После компиляции код PNaCl будет работать с той же скоростью, что и код NaCl, но, конечно, компиляция будет сопряжена с начальными затратами.
Все это заставит многих сказать, что PNaCl мало отличается от подходов, которые не претендуют на звание «родного». И в некоторой степени это правда. Если в конце дня JIT-скомпилированный JavaScript работает так же быстро, как битовый код LLVM, то выбирать между ними по соображениям скорости особо нечего.
Что действительно важно, так это то, насколько полезны эти подходы при работе с настоящим компилятором. Это браузерная версия более широкого спора об управляемом и неуправляемом коде, который в настоящее время дестабилизирует программирование Windows.
В конце концов, имеет значение компромисс между сложностью языка и качеством реализации.
Что касается PNaCl, то до сих пор не принято жюри.