塩と胡椒-NativeClientを試してみる-

GoogleがNativeClientなるものを公開したようなので試してみる.

NativeClientとは?

まずNativeClientとはなんぞや?

公式サイトはどうやらここのようだ.

http://code.google.com/intl/ja/chrome/nativeclient/

http://code.google.com/chrome/nativeclient/images/NaclBlock.png

Webブラウザの内部でx86のコードを走らせるためのオープンソーステクノロジーらしい.

公開されたばかりかと思いきや意外と古いらしい.2008年にはもうあったみたい.

略称はNaCl 塩化ナトリウム? 食塩?

これが普及したら

A「ここの処理重いんですけどどうします?」
B「塩で」

まあそれはいいとしてTechnologyOverviewをのぞいてみる.

Why use Native Client? なぜNative Clientを使うのか

Existing software components: With its native language support (currently, C and C++ in the SDK), Native Client enables you to reuse current software modules in a web app—you don't need to spend time reinventing and debugging code that's already proven to work well.

既存のソフトウェアコンポーネント:とそれのネイティブの言語サポート(現在,C/C++対応)により,Native Clientはソフトウェアモジュールをweb-appに転用することを可能にします.−あなたはすでに実績あるソフトを再発明し,デバッグする時間を過ごさなくてもよいのです.

Legacy desktop applications: Native Client provides a smooth migration path from desktop to web app. You can port and recompile existing code for the computation engine of your application to Native Client and need repurpose only the user interface and event handling portions to the new browser platform.

レガシーなデスクトップアプリケーション:Native Clientはデスクトップアプリケーションからwebアプリケーションへのスムーズな移行を提供します.あなたは既存のアプリケーションのコードをNative Clientに移植し,再コンパイルすることが出来ます,必要なのは新しいブラウザにインターフェイスとイベントハンドラを再利用することだけです.

Enterprise applications that require strong compute power: Native Client handles the number crunching required by large-scale enterprise apps. To ensure protection of user data, Native Client enables you to build complex cryptographic algorithms directly into the browser so that unencrypted data never goes out over the wire.

エンタープライズアプリケーションは強力な処理能力を必要とします:Native Clientは大規模エンタープライズアプリケーションが必要とする複雑な計算を処理します.確実な顧客情報の保護,ブラウザに直接複雑な暗号化処理を構築できます.暗号化されていないデータはネットワーク経由で外に出ることはありません.

Multimedia apps: Codecs for processing sounds, images, and movies can be added to the browser in a Native Client web app.

マルチメディアアプリケーション:音声処理のコード,画像,そして動画をNative Client web appに加えることができます.

Games: Native Client enables a web app to run close to native speed, reusing existing multithreaded/multicore C/C++ code bases, combined with low-level access to low-latency audio and (coming soon) networking APIs and OpenGL ES with programmable shaders. Programming to Native Client also enables your binary to run unchanged across many platforms. Native Client is a natural spot for running a physics engine or artificial intelligence module that powers a sophisticated web game.

ゲーム:Native Clientはwebアプリをネイティブアプリに近いスピードで走らせることが出来ます,既存のマルトスレッド/マルチコアのC/C++コードベースを再利用し,それに低レベルアクセスと低レイテンシオーディオ(近日公開)とネットワークAPIOpenGL ESを組み合わせます.Native Clientはあなたのバイナリをたくさんのプラットフォームで走らせることを可能にします.Native Clientは物理エンジン人工知能のモジュールすなわち洗練されたwebゲームを実行するナチュラルなスポットです.


訳になってないような気もするがこんな感じかな?要するに

  • 既存のコードを簡単に再利用することが出来る
  • ブラウザに強力な処理能力を与えることが出来る

Native Client module execution Native Clientモジュールの実行

Native Client ランタイムシステムは次の図に示すステップを実行する

http://code.google.com/chrome/nativeclient/images/NaClExecution.png

Native Clientが禁止していることは

  • デバイスをダイレクトに操作すること(ただし,特殊なファイルシステムAPIを提供する予定)
  • OSへのダイレクトアクセス
  • コードの意図を隠すために自己書き換えコードを使うこと(保護領域メモリに書き込みを試みるなど)

What’s in the Native Client SDK? –SDKの中身は?

SDKに含まれているものは

  • GNUをベースにしたtoolchain:GCC, GNU as, GNU ld, gdb
  • APIライブラリ(Pepper, POSIX
  • サンプルコード,プロジェクトのテンプレートを含む
  • ドキュメント

Program structure プログラムの構造

  • Native Client web appは3つのパーツで構成されている
  • HTML/JavaScript application:インターフェイスとイベントハンドリングメカニズムを提供するだけでなく,計算を実行する.
  • Bridge:JavaScriptのコードとNative Clientモジュールがメッセージを送りあうことを可能にする.ブラウザのリソースをNative Clientモジュールが利用できるようにする
  • Native Clientモジュール:通常は数値計算や計算集約型のタスクを受け持つ.また,ユーザーインターフェイスがネイティブコードと統合されたゲーム等のアプリケーションにイベントハンドリングAPIを提供する.

Files in a Native Client web app 必要なファイルは

実際にNative Client web appに必要なファイルは

  • HTML,CSS,JavaScrip.大抵のNative Client web appはHTMLやCSSを持っている.JavaScriptはNative Clientモジュールをロードするトリガの役割も負う.軽い計算処理もJavaScripが担当する.
  • Native Clientモジュール.SDKに含まれているPepperライブラリを利用する.PepperライブラリはNative ClientとwebページとJavaScriptとDOMをつなぐブリッジを提供する.
  • manifestファイル.プロセッサ各にどのモジュールをロードするか記述する.セットになったバリューキーから構成される.キーはユーザーのプロセッサである(たとえばx86-32, x86-64)そしてバリューはそのプロセッサ用にコンパイルされたモジュールのURL.拡張子は.nmf.

HTML file HTMLファイル

HTMLファイルにはembedというタグが必要らしいこんなタグあったのか

<embed name="nacl_module"
         id="hello_world"
         width=0 height=0
         src="hello_world.nmf"
         type="application/x-nacl"/

マニフェストファイルがsrc=”hello_world.nmf”かな?

チュートリアルが公開されているので早速やってみよう.(`・ω・´)