(57)【特許請求の範囲】
【請求項１】
２つのプログラミング言語間の通信のための方法であって、
各々が複数の構成要素を含む、第１のプログラミング言語の１つまたは複数のコマンドを受信するステップと、
前記受信したコマンドの各々を文字列として符号化するステップであって、前記文字列が、
前記コマンドの始まりの印となる第１の種類の制御文字と、
前記コマンドの前記複数の構成要素を表す複数の数字と、
前記複数の数字の各々を分ける第２の種類の制御文字と
を含むステップと、
前記符号化された文字列を第２のプログラミング言語の少なくとも１つのコマンドに復号するステップであって、前記第２のプログラミング言語の各コマンドは、前記第１のプログラミング言語の前記受信したコマンドの１つに対応し、前記第１のプログラミング言語の前記受信したコマンドに対応するタスクを行うコマンドであるステップと、
前記第２のプログラミング言語の前記少なくとも１つのコマンドを実行するステップと
を含む方法。
【請求項２】
前記第１のプログラミング言語の１つまたは複数のコマンドを受信する前記ステップは、前記１つまたは複数のコマンドを含む待ち行列を受信するステップを含み、前記待ち行列内の前記コマンドの順番は、前記コマンドが実行される順番を示す請求項１に記載の方法。
【請求項３】
前記第２のプログラミング言語の少なくとも１つのコマンドを実行する前記ステップは、前記第１のプログラミング言語の前記対応するコマンドが前記待ち行列内に配置されたのと同じ順番で、前記少なくとも１つのコマンドを実行するステップを含む請求項２に記載の方法。
【請求項４】
前記第１のプログラミング言語の前記受信したコマンドの各々は、
オブジェクトの種類を識別するクラス識別子と、
前記識別されたクラス内のメンバ関数を識別するメソッド識別子と、
前記識別されたメソッドで用いられる１つまたは複数の入力パラメータと
を含む請求項１に記載の方法。
【請求項５】
前記コマンドの前記構成要素を表す前記複数の数字は、
前記クラス識別子を識別する第１の数字と、
前記メソッド識別子を識別する第２の数字と、
前記識別されたクラス内のオブジェクトのインスタンスを識別する第３の数字と、
前記１つまたは複数の入力パラメータの値に対応する１つまたは複数の追加の数字と
を含む請求項４に記載の方法。
【請求項６】
前記コマンドの前記構成要素を表す前記複数の数字は、
前記クラス識別子および前記メソッド識別子を識別する第１の数字と、  
前記識別されたクラス内のオブジェクトのインスタンスを識別する第２の数字と、
前記１つまたは複数の入力パラメータの値に対応する１つまたは複数の追加の数字と
を含む請求項４に記載の方法。
【請求項７】
高水準プログラミング言語とコンピューティングシステム上でネイティブに実行するバイナリコードとの間の通信のためのコンピューティングシステムであって、
プロセッサと、
インタプリタモジュールであって、
各々が複数の構成要素を含む、前記高水準プログラミング言語の１つまたは複数のコマンドを受信し、
前記受信したコマンドの各々を、前記コマンドの始まりの印となる第１の種類の制御文字と、前記コマンドの前記複数の構成要素を表す複数の数字と、前記複数の数字の各々を分ける第２の種類の制御文字とを含む文字列として符号化する
ように構成されたインタプリタモジュールと、
ネイティブモジュールであって、
前記インタプリタモジュールから１つまたは複数の文字列を受信し、
各々が前記高水準プログラミング言語の前記受信したコマンドの１つに対応し、前記高水準プログラミング言語の前記受信したコマンドに対応するタスクを行う、前記バイナリコードによって実行可能な少なくとも１つのコマンドに、前記１つまたは複数の文字列を復号し、
前記実行可能な少なくとも１つのコマンドを実行する
ように構成されたネイティブモジュールと
を備えるコンピューティングシステム。
【請求項８】
前記高水準プログラミング言語の１つまたは複数のコマンドの前記受信は、前記１つまたは複数のコマンドを含む待ち行列を受信することを含み、前記待ち行列内の前記コマンドの順番は、前記コマンドが実行される順番を示す請求項７に記載のコンピューティングシステム。
【請求項９】
前記ネイティブモジュールは、前記高水準プログラミング言語の前記対応するコマンドが前記待ち行列に配置されたのと同じ順番で、前記少なくとも１つのコマンドを実行するようにさらに構成された請求項８に記載のコンピューティングシステム。
【請求項１０】
前記高水準プログラミング言語の前記受信したコマンドの各々は、
オブジェクトの種類を識別するクラス識別子と、
前記識別されたクラス内のメンバ関数を識別するメソッド識別子と、
前記識別されたメソッドで用いられる１つまたは複数の入力パラメータと、
を含む請求項７に記載のコンピューティングシステム。
【請求項１１】
前記コマンドの前記構成要素を表す前記複数の数字は、
前記クラス識別子を識別する第１の数字と、
前記メソッド識別子を識別する第２の数字と、
前記識別されたクラス内のオブジェクトのインスタンスを識別する第３の数字と、
前記１つまたは複数の入力パラメータの値に対応する１つまたは複数の追加の数字と
を含む請求項１０に記載のコンピューティングシステム。
【請求項１２】
前記コマンドの前記構成要素を表す前記複数の数字は、
前記クラス識別子および前記メソッド識別子を識別する第１の数字と、
前記識別されたクラス内のオブジェクトのインスタンスを識別する第２の数字と、
前記１つまたは複数の入力パラメータの値に対応する１つまたは複数の追加の数字と
を含む請求項１０に記載のコンピューティングシステム。
【請求項１３】
前記高水準プログラミング言語で書かれた複数のコマンド（高水準コマンド）を含む１つまたは複数の高水準アプリケーションをさらに備える請求項７に記載のコンピューティングシステム。
【請求項１４】
前記高水準アプリケーションの１つは、高水準コマンドを含むブートアプリケーションであり、前記高水準コマンドが、前記インタプリタモジュールによって符号化され、前記ネイティブモジュールによって復号され実行されると、前記プロセッサに、
リモートアプリケーションサーバから１つまたは複数の追加の高水準コマンドを受信させ、
前記高水準アプリケーションの前記複数の高水準コマンドの少なくとも１つを前記追加の高水準コマンドの少なくとも１つで置き換えることと、
前記追加の高水準コマンドの少なくとも１つを前記高水準アプリケーションの前記複数の高水準コマンドに挿入すること
のうちの少なくとも１つを実行することによって、前記高水準アプリケーションの１つを修正させる
ように構成された請求項１３に記載のコンピューティングシステム。
【請求項１５】
命令を記憶するように構成された非一時的なコンピュータ可読記憶媒体であって、前記命令がプロセッサによって実行されると、前記プロセッサに、
第１のプログラミング言語の１つまたは複数のコマンドを受信させ、
前記受信したコマンドの各々を、
前記コマンドの始まりの印となる第１の種類の制御文字と、
前記コマンドの構成要素を表す複数の数字と、
前記複数の数字の各々を分ける第２の種類の制御文字と
を含む文字列とし符号化させ、
各々が前記第１のプログラミング言語の前記受信したコマンドの１つに対応し、前記第１のプログラミング言語の前記コマンドに対応するタスクを行う第２のプログラミング言語の少なくとも１つのコマンドに、前記符号化された文字列を復号させ、
前記第２のプログラミング言語の前記少なくとも１つのコマンドを実行させる
コンピュータ可読記憶媒体。
【請求項１６】
前記第１のプログラミング言語の１つまたは複数のコマンドの前記受信は、前記１つまたは複数のコマンドを含む待ち行列を受信することを含み、前記待ち行列内の前記コマンドの順番は、前記コマンドが実行される順番を示す請求項１５に記載のコンピュータ可読記憶媒体。
【請求項１７】
前記第２のプログラミング言語の前記少なくとも１つのコマンドの前記実行は、前記第１のプログラミング言語の前記対応するコマンドが前記待ち行列に配置されたのと同じ順番で、前記少なくとも１つのコマンドを実行することを含む請求項１６に記載のコンピュータ可読記憶媒体。
【請求項１８】
前記第１のプログラミング言語の前記受信したコマンドの各々は、
オブジェクトの種類を識別するクラス識別子と、
前記識別されたクラス内のメンバ関数を識別するメソッド識別子と、
前記識別されたメソッドで用いられる１つまたは複数の入力パラメータと、
を含む請求項１５に記載のコンピュータ可読記憶媒体。
【請求項１９】
前記コマンドの前記構成要素を表す前記複数の数字は、
前記クラス識別子を識別する第１の数字と、
前記メソッド識別子を識別する第２の数字と、
前記識別されたクラス内のオブジェクトのインスタンスを識別する第３の数字と、
前記１つまたは複数の入力パラメータの値に対応する１つまたは複数の追加の数字と
を含む請求項１８に記載のコンピュータ可読記憶媒体。
【請求項２０】
前記コマンドの前記構成要素を表す前記複数の数字は、
前記クラス識別子および前記メソッド識別子を識別する第１の数字と、
前記識別されたクラス内のオブジェクトのインスタンスを識別する第２の数字と、
前記１つまたは複数の入力パラメータの値に対応する１つまたは複数の追加の数字と
を含む請求項１８に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的にプログラミング言語の分野に関し、より詳細には２つの異なるプログラミング言語間の通信に関する。
【背景技術】
【０００２】
［発明者］
ＳＴＥＰＨＥＮ  ＣＡＩＮ  ＤＥＴＷＩＬＥＲ
ＪＡＭＥＳ  ＥＤＷＡＲＤ  ＭＡＲＲ
ＰＡＹＴＯＮ  ＲＵＳＳＥＬＬ  ＷＨＩＴＥ
【０００３】
［関連出願の相互参照］
本出願は、２０１０年１２月１４日出願の「特許文献１」および２０１１年１２月１３日出願の「特許文献２」の利益を主張し、その両者全体を参照により本明細書に組み込むものとする。
【０００４】
ソフトウェアアプリケーションは、典型的にはバイナリ実行ファイルとして公開され、配信される。開発者はコードをバイナリ実行ファイルにコンパイルし、ユーザは、コンパイルされたバイナリのアプリケーションをクライアント装置にダウンロードし、実行する。同様のコンパイルプロセスを一般公開前に用いて、更新やパッチをソフトウェアアプリケーションに配信する。このプロセスによって、開発者はソースコードを保護しつつ、ユーザに、クライアント装置でネイティブに実行する実行ファイルを提供することができるが、一方で、一部のプラットフォームにとっては不都合となる多くの制限および欠点を伴う。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国仮出願番号６１／４２２，８４３号
【特許文献２】米国実用出願番号１３／３２４，９４０号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
欠点の１つとして、ユーザが不正コードを実行するのを防ぐ方法として、クライアント装置への実行可能バイナリの転送を制限しているオペレーティングシステムがある。オペレーティングシステム開発者は、ウイルスや他の悪意のコードの拡散を防ぐためのセーフガードとしてこのような制限を設けたり、オペレーティングシステムの制御強化の手段としてこれらの制限を用いたりする。オペレーティングシステムが、集中配信サービスを備えて実行可能バイナリの配信を管理したり、配信中のバイナリを配信サービスの管理者がレビューしたり、承認したりする場合もある。例えば、アップルｉＯＳモバイルオペレーティングシステムは、アプリケーションや更新を配信するためのＡＰＰ  ＳＴＯＲＥを備え、ＡＰＰ  ＳＴＯＲＥに投稿されるコンテンツは、ユーザに配信される前に承認プロセスを経る。ユーザは自由に実行可能バイナリをダウンロードできるが、新しいアプリケーションを実行したり、既存のアプリケーションに更新を適用する前に、ユーザに管理者のパスワード、または他のなんらかの認証を求めるオペレーティングシステムもある。
【課題を解決するための手段】
【０００７】
これらの制限は、ソフトウェア開発者が実行可能バイナリを配信するのを難しくする。特に、更新にレビュープロセスを行う場合、または、更新を適用する前にユーザ認証が必要な場合、更新およびパッチの公開ならびに配信のプロセスは著しく遅くなる。結果として、ユーザに迅速に更新を配信するのが難しくなる。さらに、開発者が、ユーザの装置構成、位置または人口学的情報に合わせてカスタマイズした更新を配信したい場合、カスタマイズされた更新の各置換が、配信前にレビュープロセスを必要とする場合がある。
【０００８】
開示の実施形態は、その他の長所および特徴を有しており、それらは、詳細な説明、添付請求項、および添付の図（または図面）から容易に分かる。以下に図面を簡単に紹介する。
【図面の簡単な説明】
【０００９】
【図１】一実施形態に係る、アプリケーションおよび更新を高水準言語で配信するのに適したシステム環境を示すネットワーク図である。
【図２】一実施形態に係る、クライアント装置のアプリケーションクライアントモジュールを示すブロック図である。
【図３】一実施形態に係る、要求されたアプリケーションを実行する前に、該アプリケーションに更新を自動的に適用するプロセスの例を示す相互作用図である。
【図４】一実施形態に係る、高水準言語のコマンドを符号化された文字列にマッピングする例を示す図である。
【図５】一実施形態に係る、高水準コマンドを対応するネイティブコマンドに翻訳し、該対応するネイティブコマンドを実行するプロセスを示すフローチャートである。
【図６】一実施形態に係る、アプリケーションの１つの処理フレームの複数のコマンドを実行するプロセスの例を示す相互作用図である。
【図７】一実施形態に係る、アプリケーションに新しいオブジェクトを登録するプロセスの例を示す相互作用図である。
【発明を実施するための形態】
【００１０】
図および下記の説明は、好適な実施形態の例を示すためのものである。下記の説明から、本明細書に開示の構造および方法の代替の実施形態は、請求項の原理から逸脱することなく採用できる実行可能な代替形態として認められることに留意されたい。
【００１１】
幾つかの実施形態について詳細に述べる。実施形態の例は添付の図面に示す。図面で使われている類似のまたは同じ参照番号は、類似のまたは同じ機能を示すことに留意されたい。図は、開示のシステム（または方法）の実施形態を例示の目的のみで示している。本明細書に示されている構造および方法の代替の実施形態が、本明細書に記載の原理から逸脱することなく採用可能なことを、当業者は下記の説明から理解されよう。
【００１２】
［構成の概略］
実行可能バイナリを配信する代わりに、アプリケーションおよび更新を、ＪａｖａＳｃｒｉｐｔ（登録商標）などの高水準言語で書いてクライアント装置に配信してもよい。高水準アプリケーションを実行するために、ユーザは、アプリケーションクライアントモジュールをクライアント装置にインストールする。アプリケーションクライアントモジュールは、クライアント装置でネイティブに実行するコンパイル済みコードと高水準言語を通信可能にする通信プロトコルを実装する。通信プロトコルは、ネットワーク装置や物理センサなどの典型的にはネイティブコード用であるシステムリソースに、高水準アプリケーションがアクセスするのを可能にする。結果として、高水準言語で書かれたアプリケーションは、通常、実行可能アプリケーションバイナリに制限されたタスクを行うことができ、それにより、高水準アプリケーションがバイナリアプリケーションのユーザ体験に類似したユーザ体験を提供することが可能になる。
【００１３】
通信プロトコルは、一連の数字および制御文字を含む文字列として高水準コマンドを符号化することによって、動作する。各数字は、クラス識別子、メソッド識別子、および、メソッドに渡される１つまたは複数のパラメータなどの、コマンドの異なる構成要素を表す。符号化された文字列はアプリケーションクライアントモジュールの異なる構成要素に送信され、アプリケーションクライアントモジュールは文字列をネイティブコマンドに復号して、該コマンドを実行する。高水準コードの複雑さを軽減して、通信プロトコルを動作させるために使われるコンピューティングリソースを軽減するために、アプリケーションクライアントモジュールは、グラフィックプロセッサ、物理センサ、およびネットワークインタフェースなどの、システムリソースにアクセスするための簡易コマンドの提供を可能にする数個のＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）も備えている。ネイティブコードは、通信プロトコルを用いてコマンドを高水準コードに発行してもよい。  
【００１４】
コマンドの符号化プロセスおよび復号プロセスは、かなりの量のコンピューティングリソースを使用するので、アプリケーションクライアントモジュールは、待ち行列機構を実装して、数個のコマンドを一度に符号化、復号してもよい。一実施形態においては、処理フレームと呼ばれる所定の時間間隔の間に発行される高水準コマンドが、発行順に待ち行列に追加される。処理フレームの終わりに、待ち行列にあるコマンドは、文字列として符号化される。次に、該文字列はネイティブコマンドに復号され、ネイティブコマンドは、対応する高水準コマンドが待ち行列に追加されたのと同じ順番で実行される。この待ち行列機構によって、アプリケーションクライアントモジュールは、複数のコマンドを一度に符号化、復号することによって性能を向上させることができ、かつ、高水準コマンドの元の順番を保持することができる。
【００１５】
実行可能なコンテンツを高水準言語で配信することによって、コンテンツは、オペレーティングシステムがバイナリアプリケーションおよび更新の配信に課している制限を受けない。アプリケーションまたは更新が高水準言語でクライアント装置に転送されると、オペレーティングシステムは、その動作を実行可能コードの転送ではなくデータの転送として解釈し、実行可能コードの転送に関連する制限を課さずに、転送を進めることができる。結果として、アプリケーションのブートプロセスの間、高水準アプリケーションが更新をチェックして適用することが可能になり、また、ユーザの地理的な位置、人口統計学上のグループ、装置構成、および他の個人情報に合わせた高水準更新を自動的に配信することによって、開発者がカスタマイズされたユーザ体験を提供することが可能になる。高水準アプリケーションをダウンロードして実行するこのプロセスは、アプリケーション配信システムまたはオペレーティングシステムに組み込まれたセキュリティ対策を回避するかもしれないが、アプリケーションクライアントモジュールは、個々の高水準アプリケーションに与えられる権限のレベルを制限することによって、クライアント装置のセキュリティを保護する機能を有する。
【００１６】
［システムアーキテクチャの概略］
図１は、一実施形態に係る、アプリケーションおよび更新を高水準言語で配信するのに適したシステム環境を示すネットワーク図である。システム環境は、いくつかある構成要素の中で特に、アプリケーションサーバ１０２、ネットワーク１０４、クライアント装置１００を含む。他の実施形態においては、このシステム環境より構成要素が少なかったり、多かったり、異なっていてもよい。具体的には、１つのクライアント装置および１つのサーバ１０２のみが描かれているが、追加のクライアント装置またはサーバがネットワーク１０４に接続されていてよい。
【００１７】
アプリケーションサーバ１０２は、アプリケーションクライアントモジュール１１６、およびクライアント装置１００に保存される任意の高水準アプリケーションをサポートするサーバベースのサービスを動作させる。具体的には、アプリケーションサーバ１０２は、ユーザに配信するための高水準アプリケーションおよび更新が入手できるようにし、アプリケーションクライアントモジュール１１６は、自動的にまたはユーザ要求に応答して、更新および新しいアプリケーションをアプリケーションサーバ１０２から読み出してよい。アプリケーションサーバ１０２は、アプリケーションに統合されたソーシャルネットワーキングまたはデータ収集および分析などの、追加のアプリケーションに関連するサービスを提供してもよい。アプリケーションサーバ１０２は、１つのエンティティとして描かれているが、アプリケーションサーバ１０２の機能は、複数のコンピューティング装置、コンピューティングクラスタ、またはデータセンタにわたって広がっていてよく、アプリケーションサーバ１０２の構成要素は、複数の地理的な位置に存在してよい。
【００１８】
アプリケーションサーバ１０２は、複数のクライアント装置１００とネットワーク１０４を介して通信する。ネットワーク１０４は、当技術分野で周知のように、標準的な通信技術とプロトコルとの任意の組み合わせを含んでよい。例えば、通信は、Ｅｔｈｅｒｎｅｔ（登録商標）、８０２．１１、ＣＤＭＡ、３Ｇ、４Ｇ、またはＤＳＬ（ｄｉｇｉｔａｌ  ｓｕｂｓｃｒｉｂｅｒ  ｌｉｎｅ）などのリンク技術によってネットワーク１０４を伝わる。ネットワーク１０４は、ＨＴＴＰ（ｈｐｙｅｒｔｅｘｔ  ｔｒａｎｓｆｅｒ  ｐｒｏｔｏｃｏｌ）、ＴＣＰ／ＩＰ（ｔｒａｎｓｍｉｓｓｉｏｎ  ｃｏｎｔｒｏｌ  ｐｒｏｔｏｃｏｌ／ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ）、またはＦＴＰ（ｆｉｌｅ  ｔｒａｎｓｆｅｒ  ｐｒｏｔｏｃｏｌ）などの、複数のネットワークプロトコルをサポートしてよく、ネットワーク１０４を介して転送されるデータはいずれも、ＴＬＳ（ｔｒａｎｓｐｏｒｔ  ｌａｙｅｒ  ｓｅｃｕｒｉｔｙ）、ＳＳＬ（ｓｅｃｕｒｅ  ｓｏｃｋｅｔｓ  ｌａｙｅｒ）、およびＩＰｓｅｃ（ｉｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌ  ｓｅｃｕｒｉｔｙ）などの技術を用いて暗号化してよい。
【００１９】
図１は、クライアント装置１００の詳細図も含む。クライアント装置１００は、いくつかある構成要素の中で特に、プロセッサ１０６、メモリ１０８、ネットワークインタフェース装置１１０、物理センサ１１２、クライアント装置ＡＰＩ１１４、およびアプリケーションクライアントモジュール１１６を含む。クライアント装置１００の構成要素１０６、１０８、１１０、１１２、１１４、１１６は、システムバス１１８を介して、通信可能に結合されている。全体として、クライアント装置１００は、スマートフォン、ＰＤＡ（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔ）、タブレットコンピュータ、ラップトップコンピュータ、またはデスクトップコンピュータなど、これらの構成要素１０６、１０８、１１０、１１２、１１４、１１６を含む任意のコンピューティング装置であってよい。
【００２０】
プロセッサ１０６は、コンピュータ可読命令を実行する。プロセッサ１０６は、実行するための命令を読み出したり、データを読み書きしたりするために、メモリ１０８にアクセスしてよい。１つのプロセッサ１０６のみが図１に示されているが、クライアント装置１００は、並行して動作可能な複数のプロセッサ１０６を含んでよい。クライアント装置１００は、グラフィック処理またはオーディオ処理のための専用プロセッサ１０６を含んでもよい。メモリ１０８は、データおよびプロセッサ１０６によって実行可能なコンピュータ可読命令を記憶することができる任意の非一時的なコンピュータ可読記憶媒体である。メモリ１０８は、揮発性メモリ（例えば、ランダムアクセスメモリ）と不揮発性メモリ（例えば、ハードディスクドライブ、半導体ドライブ、コンパクトディスク、磁気テープ）との組み合わせを含んでよい。ネットワークインタフェース装置１１０は、ネットワーク１０４に接続し、ネットワーク１０４と、クライアント装置１００の他の構成要素との間でデータのやり取りを行う。
【００２１】
物理センサ１１２は、クライアント装置の向きや周囲環境などを監視する任意の装置を備えてよい。例えば、センサは、加速度計、ジャイロスコープ、ＧＰＳ（ｇｌｏｂａｌ  ｐｏｓｉｔｉｏｎｉｎｇ  ｓｅｒｖｉｃｅ）受信機、コンパス、または、周辺光検出器を含んでよい。物理センサ１１２は、外部ボタン、キーボード、マウス、タッチスクリーン、マイクロフォンなど、ユーザ入力をクライアント装置１００に記録するための装置も含んでよい。
【００２２】
オペレーティングシステムは、バイナリソフトウェアアプリケーションがクライアント装置１００の物理的な構成要素と相互作用するのを可能にする１つまたは複数のクライアント装置ＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）１１４を提供してよい。オペレーティングシステムは、物理センサ１１２、ネットワークインタフェース装置１１０、または、専用のグラフィックプロセッサまたはオーディオプロセッサ１０６で制御可能な画面、スピーカなどの出力装置と相互作用するためのＡＰＩを含んでよい。
【００２３】
アプリケーションクライアントモジュール１１６は、高水準プログラミング言語で書かれた１つまたは複数のアプリケーションが、ネイティブコードと通信できるようにする通信プロトコルを実装する。通信プロトコルの利点の１つは、プロトコルによって、メモリ１０８に保存された他のアプリケーションを修正したり、ネットワークインタフェース装置１１０を介してアプリケーションサーバ１０２と通信するなど、通常、ネイティブコード用であるタスクを高水準アプリケーションが行うのを可能にすることである。高水準アプリケーションとネイティブコードとの間の通信を効率化するために、アプリケーションクライアントモジュール１１６は、高水準アプリケーションとオペレーティングシステムが備えるＡＰＩ１１４との間の相互作用を簡単にする一組のアプリケーションクライアントＡＰＩを含んでもよい。アプリケーションクライアントモジュール１１６は、別個のエンティティとして示されているが、アプリケーションクライアントモジュール１１６の機能を実行する論理の全体またはその一部が、プロセッサ１０６またはメモリ１０８に存在していてもよい。さらに、アプリケーションクライアントモジュール１１６の全てまたは一部を、ＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）またはＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）などの別個のハードウェア装置として、実現してよい。
【００２４】
［アプリケーションクライアントモジュール］
図２を参照すると、一実施形態に係る、図１に示したアプリケーションクライアントモジュール１１６の詳細図が示されている。アプリケーションクライアントモジュール１１６は、いくつかある構成要素の中で特に、ブートアプリケーション２００、１つまたは複数の追加の高水準アプリケーション２０２、高水準ＡＰＩ２０４、ネイティブＡＰＩ２０６、高水準オブジェクトレジストリ２０８、ネイティブオブジェクトレジストリ２１０、インタプリタ２１２、一組の簡易装置ＡＰＩ２１４を含んでよい。アプリケーションクライアントの他の実施形態は、もっと多くの、もっと少ない、または異なる構成要素を含んでよい。
【００２５】
ブートアプリケーション２００は、インタプリタ型高水準プログラミング言語（例えば、ＪａｖａＳｃｒｉｐｔ）で書かれたアプリケーションであり、高水準アプリケーション２００、２０２への照会を受信し、照会されたアプリケーションを更新するよう試みる。アプリケーションへの照会を受信した後、ブートアプリケーション２００は、アプリケーションサーバ１０２にクエリを行い、照会されたアプリケーションの更新版のダウンロードがあるか否かを判定する。ブートアプリケーション２００は、アプリケーションサーバ１０２に更新を見つけると、自動的に更新版を読み出して、適用する。更新版も高水準言語で書かれているので、ユーザまたはオペレーティングシステムからの干渉や認証なしに、読み出し、適用することができる。
【００２６】
アプリケーションクライアントモジュール１１６がアプリケーション２０２の起動の要求を受信すると、ネイティブＡＰＩ２０６は、ブートアプリケーション２００に２つのコマンドを発行する。第１のコマンドは、ブートアプリケーション２００への照会を含み、それによりブートアプリケーション２００は自己を更新する。第２のコマンドは、要求されたアプリケーション２０２への照会を含み、それによりブートアプリケーション２００は、要求されたアプリケーション２０２を更新する。ブートアプリケーション２００および要求されたアプリケーション２０２の更新のプロセスを、図３を参照して詳細に記載する。
【００２７】
高水準アプリケーション２０２は、ゲーム、画像エディタ、またはマルチメディア再生プログラムなどの、クライアント装置１００にダウンロード可能なソフトウェアアプリケーションである。ダウンロードは、クライアント装置１００のユーザによって開始されてもよく、アプリケーションクライアントモジュール１１６内の別のアプリケーション２０２によって開始されてもよい。ブートアプリケーション２００と同様に、高水準アプリケーション２０２は、インタプリタ型高水準プログラミング言語で書かれる。本明細書では、高水準プログラミング言語は、クライアント装置に配信される前にコンパイルされる代わりにクライアント装置上のインタプリタ２１２によって実行可能な任意のプログラミング言語（例えば、ＪａｖａＳｃｒｉｐｔ）である。高水準コードに加えて、アプリケーション２０２は、画像、ビデオ、オーディオクリップまたはプレーンテキストなどの他のデータ項目も含んでよい。高水準アプリケーション２０２は、高水準プログラミング言語で書かれているので、オペレーティングシステムは、高水準アプリケーション２０２のダウンロードをデータファイルのダウンロードと解釈する。結果として、ダウンロードは、オペレーティングシステムが実行可能バイナリアプリケーションのダウンロードに課す制限を受けない。これによってオペレーティングシステムに組み込まれたセキュリティ機能を回避するかもしれないが、インタプリタ２１２およびネイティブＡＰＩ２０６は、ダウンロードされた高水準アプリケーション２０２に許可されるアクセスのレベルを規制するセキュリティ機能を含む。
【００２８】
高水準ＡＰＩ２０４およびネイティブＡＰＩ２０６は、簡易装置ＡＰＩ２１４の機能に統一インタフェースを提供するＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）である。ＡＰＩ２０４、２０６は、マッチするクラスおよびメソッドを含むが、高水準ＡＰＩ２０４はブートアプリケーション２００および他のアプリケーション２０２と同じ高水準言語で書かれているのに対し、ネイティブＡＰＩ２０６はクライアント装置１００でネイティブに実行するバイナリである。高水準ＡＰＩ２０４およびネイティブＡＰＩ２０６は、１つの処理フレームのコマンドを待ち行列に配置し、該待ち行列をインタプリタ２１２に送信して文字列として符号化し、該文字列を復号して命令に戻す論理も含む。符号化関数については図４を参照して詳細に記載する、また、待ち行列機構については図６を参照して記載する。個々の簡易装置ＡＰＩ２１４の機能を統一することによって、開発者は、１つのＡＰＩに照会して、クライアント装置１００のハードウェアと相互作用することができる。これによって、開発プロセスが簡単になり、クラスまたはメソッドが間違ったＡＰＩに起因する可能性を減らす。
【００２９】
高水準オブジェクトレジストリ２０８およびネイティブオブジェクトレジストリ２１０は、実行中のアプリケーション２０２内のライブオブジェクトのミラー化されたレジストリを維持する。一実施形態においては、オブジェクトは、最初に、高水準オブジェクトレジストリ２０８に登録され、次に、エントリがネイティブオブジェクトレジストリ２１０にミラー化される。新しいオブジェクトを登録し、２つのレジストリ２０８、２１０間でオブジェクトをミラー化するプロセスについては、図７を参照して詳細に記載する。  
【００３０】
インタプリタ２１２は、ブートアプリケーション２００、他のアプリケーション２０２、および高水準ＡＰＩ２０４のコードなど、高水準コードをロードし、実行する。アプリケーション２００、２０２が、ネイティブコードが実行するコマンドを含む場合、インタプリタ２１２は、そのコマンドを符号化してネイティブＡＰＩ２０６に送信し、復号され、実行されるようにする。インタプリタ２１２には２つの別個のインスタンスがある。アプリケーションインタプリタ２１２Ａは、クライアント装置１００へのアクセス権が低い。例えば、アプリケーションインタプリタ２１２Ａは、オンスクリーングラフィックス、ＵＩ（ｕｓｅｒ  ｉｎｔｅｒｆａｃｅ）、オーディオ機能、および他のアプリケーション関連の機能にはアクセス可能としてよい。一方、システムインタプリンタ２１２Ｂは、システムを不安定にする可能性のあるクライアント装置１００の部分へのアクセスを含め、クライアント装置１００へのアクセス権が高い。例えば、システムインタプリンタ２１２Ｂは、ネットワークインタフェース１１０を用いて、認証情報をアプリケーションサーバ１０２に転送したり、メモリ１０８に記憶されているブートアプリケーション２００もしくは他のアプリケーション２０２を修正してもよい。
【００３１】
ブートアプリケーション２００は、アプリケーションサーバ１０２へのアクセス、メモリ１０８内に記憶されているアプリケーション２００、２０２の修正など、高い権限が必要な機能を頻繁に使用するので、システムインタプリンタ２１２Ｂによって実行される。他のアプリケーション２０２は、アプリケーションインタプリタ２１２Ａによって実行される。他のアプリケーション２０２のうちの１つが、実行するのに高い権限が必要なコマンドを含む場合、アプリケーションインタプリタ２１２ＡはそのコマンドをネイティブＡＰＩ２０６に送信し、ネイティブＡＰＩ２０６はそのコマンドを許可するか否かを判断する。例えば、ネイティブＡＰＩ２０６は、アプリケーションサーバ１０２からソーシャルネットワーキングデータを読み出すコマンドの実行は許可するが、あるアプリケーション２０２が、別のアプリケーション２０２を任意に修正したり消したりするコマンドを実行するのは許可しないかもしれない。ネイティブＡＰＩ２０６が高い権限が必要なコマンドの実行を許可する場合、そのコマンドは実行のためにシステムインタプリタ２１２に送られる。この構成によって、アプリケーション２０２はクライアント装置１００の高い権限が必要な機能にアクセスでき、また、同時に、不適切で害を及ぼす可能性がある高い権限が必要なコマンドから保護することによって、クライアント装置１００のセキュリティを維持することができる。
【００３２】
簡易装置ＡＰＩ２１４は、高水準アプリケーション２００、２０２がオペレーティングシステムに備わったクライアント装置ＡＰＩ１１４との相互作用に使用することができる簡易インタフェースを提供する。例えば、簡易グラフィックスＡＰＩ２１４Ａは、１つのコマンドで画面上に画像を配置する簡単な方法を提供してよく、これに対して、クライアント装置ＡＰＩ１１４では、同じ画像を画面の同じ位置に配置するには、適切なグラフィックスＡＰＩへの一連の複雑なコールを必要とする場合がある。さらに、アプリケーションクライアントモジュール１１６は、簡易装置ＡＰＩ２１４の異なるバージョンを実装して、異なるクライアント装置１００のクライアント装置ＡＰＩ１１４と相互作用してよい。例えば、ＡＰＰＬＥ  ｉＯＳのグラフィックスＡＰＩは、画面に画像を配置するのに第１の一連のコマンドを必要とし、一方、ＧＯＯＧＬＥ  ＡＮＤＲＯＩＤ（登録商標）オペレーティングシステムのグラフィックスＡＰＩを用いて画像を配置するには、第１の一連のコマンドとは異なる第２の一連のコマンドを必要とする。この場合、簡易グラフィックスＡＰＩ２１４ＡのｉＯＳバージョンの簡易画像配置コマンドは、第１の一連のコマンドを実行し、簡易グラフィックスＡＰＩ２１４ＡのＡＮＤＯＲＩＤバージョンの画像配置コマンドは、第２の一連のコマンドを実行することとなる。結果として、簡易装置ＡＰＩ２１４は、異なる装置１００のハードウェア層、ファームウェア層、およびソフトウェア層、並びに異なるオペレーティングシステムと相互作用に使用可能な一組の標準コマンドを提供し、それによりブートアプリケーション２００、他のアプリケーション２０２および高水準ＡＰＩ２０４の同じ高水準コードが、異なる装置構成にわたって機能することができる。
【００３３】
ミラー化されたＡＰＩ２０４、２０６、ミラー化されたオブジェクトレジストリ２０８、２１０、インタプリタ２１２および簡易ＡＰＩ２１４は、一緒に、高水準アプリケーション２０２とオペレーティングシステムに内蔵されているＡＰＩ１１４との間に標準インタフェースを提供する。これは、アプリケーションクライアントモジュール１１６が装置にインストールされる限り、同じ高水準アプリケーション２０２を異なるオペレーティングシステム、および異なるクライアント装置１００で実行してよいことを意味する。結果として、開発者は、アプリケーション２０２の複数のＯＳ専用バーションまたは装置専用バージョンを書く必要なく、複数のオペレーティングシステムおよび複数の装置の幅広いユーザに到達することができる。
【００３４】
［自動更新の適用］
図３は、一実施形態に係る、アプリケーションのブートプロセス時に高水準アプリケーション２００を自動的に更新するプロセスの例を示す、アプリケーションサーバ１０２、ネイティブＡＰＩ２０６、システムインタプリンタ２１２Ｂ、およびアプリケーションインタプリタ２１２Ａ間の相互作用図である。アプリケーションクライアントモジュール１１６がアプリケーション実行の要求を受信して（３００）、プロセスが開始される。要求は、異なるアプリケーションなどの異なるソースから発生することもあるが、典型的には、センサ１１２（例えば、タッチスクリーン）の１つからのユーザ入力として受信される。アプリケーションクライアントモジュール１１６が要求を受信すると、要求はネイティブＡＰＩ２０６に送られ、ネイティブＡＰＩ２０６は、それに答えて、システムインタプリンタ２１２Ｂにブートアプリケーション２００の更新を指示する第１のコマンドを発行する（３０２）。
【００３５】
ブートアプリケーション２００を更新するために、システムインタプリンタ２１２Ｂは、ブートアプリケーション２００自体を更新するようにという指示にともない、ブートアプリケーション２００をロードし実行する。ブートアプリケーション２００の高水準コードが、システムインタプリンタ２１２Ｂに、アプリケーションサーバ１０２をチェックさせ（３０４）、ブートアプリケーションの新しいバージョンがあるか否かを判断させる。システムインタプリンタ２１２Ｂは、システムインタプリタ２１２Ｂのアクセス権の高さを利用して、アプリケーションサーバ１０２にアクセスし（３０４）、ネットワークインタフェース装置１１０と相互作用して、適切な認証情報をアプリケーションサーバ１０２に送信することができる。
【００３６】
アプリケーションサーバ１０２に更新が見つからない場合、システムインタプリンタ２１２Ｂは、更新プロセス３０８をとばして、ブートアプリケーションを閉じる（３１０）。ブートアプリケーション２００への更新が見つかった場合、システムインタプリンタ２１２Ｂは、アプリケーションサーバ１０２から更新を受信し（３０６）、更新を適用する（３０８）。一実施形態においては、システムインタプリンタ２１２Ｂは、更新プロセス３０８で、ブートアプリケーション２００全体を更新バージョンで置き換える。あるいは、システムインタプリンタ２１２Ｂは、更新プロセス３０８で、ブートアプリケーション２００の高水準コードのサブセット（例えば、新しいまたは異なったコードの行のみ）を置き換えてもよい。ここでも、システムインタプリンタ２１２Ｂは、アプリケーションインタプリタ２１２Ａより高い権限を有するので、ブートアプリケーション２００を修正することができる。
【００３７】
システムインタプリンタ２１２Ｂは、ブートアプリケーション２００を更新（３０８）した後、ブートアプリケーションを閉じて（３１０）、リターン文を用いてネイティブＡＰＩに返信する（３１２）。次に、ネイティブＡＰＩ２０６は、システムインタプリンタ２１２Ｂに、要求されたアプリケーション２０２の更新を指示する第２のコマンドを発する（３１４）。システムインタプリンタ２１２Ｂは、類似のプロセスを用いて、要求されたアプリケーション２０２を更新する。最初に、システムインタプリンタ２１２Ｂは、要求されたアプリケーション２０２を更新するようにという指示にともない、ブートアプリケーション２００をロードする。ブートアプリケーション２０２の高水準コードは、アプリケーションサーバ１０２に要求されたアプリケーション２０２の更新バージョンがあるか否かをシステムインタプリンタ２１２Ｂにチェックさせる（３１６）。ここでも、アプリケーションサーバ１０２に更新がない場合、システムインタプリンタ２１２Ｂは、更新プロセス３２０をとばして、要求されたアプリケーション２０２を修正せずにブートアプリケーションを閉じる（３２２）。更新がある場合、システムインタプリンタ２１２Ｂは、更新を受信して（３１８）、適用する（３２０）。要求されたアプリケーション２０２への更新は、新しいまたは異なった高水準コードに加えて、映画、オーディオクリップ、画像、またはプレーンテキストなどの追加のデータオブジェクトを含んでもよい。
【００３８】
要求されたアプリケーション２０２を更新するとき、システムインタプリンタ２１２Ｂは、ユーザの個人情報（例えば、ユーザの地理的位置、人口学的情報、装置構成など）に合わせてカスタマイズされた更新を受信してもよい（３１８）。アプリケーションサーバ１０２は、更新要求（３１６）時に、クライアント装置１００の様々なセンサ１１２（例えば、ＧＰＳ受信装置）からユーザの個人情報を取得してもよい。あるいは、ユーザは、アプリケーションサーバ１０２に、事前に（例えば、アプリケーションサーバのソーシャルネットワーキング機能を使用する時）、自発的に情報を提供したかもしれない。更新適用後、システムインタプリタ２１２Ｂは、ブートアプリケーション２００を閉じて（３２２）、第２のリターン文を用いて、ネイティブＡＰＩ２０６に返信する。最後に、ネイティブＡＰＩ２０６は、要求されたアプリケーションをロードして実行する（３２８）ように権限の低いアプリケーションインタプリタ２１２Ａに指示する第３のコマンドを発する（３２６）。
【００３９】
この構成は、幾つかの理由で有利である。アプリケーション２０２開始の前にブートアプリケーション２００および要求されたアプリケーション２０２を自動的に更新することによって、ユーザに手動での更新を要求しなくても、ブートアプリケーション２００および要求されたアプリケーション２０２は両方とも、最新の状態である。さらに、ユーザの個人情報に基づいてアプリケーションの更新をカスタマイズすることができるので、アプリケーション開発者は、より豊かでパーソナライズされたユーザ体験を提供することができる。
【００４０】
［文字列としてのコマンドを符号化］
図４は、一実施形態に係る、高水準言語のコマンド４００から符号化された文字列４１０へのマッピングの例を示す。インタプリタ２１２は、高水準コマンド４００を文字列４１０に符号化し、その文字列をネイティブＡＰＩ２０６に送信する。ネイティブＡＰＩ２０６で、文字列４１０は復号されて、ネイティブコマンドとして実行される。この符号化メソッドによって定義される通信プロトコルによって、高水準言語は典型的にはネイティブコード用であるコマンドを実行することができる。
【００４１】
高水準言語のコマンド４００は、例えば、クラス４０２、メソッド４０４、および４つの入力パラメータ４０６を含んでよい。符号化された文字列４１０は、例えば、クラス４０２に対応する数字のクラス識別子４１２、メソッド４０４に対応する数字のメソッド識別子４１４、入力パラメータ４０６の値４１６を含んでよい。インタプリタ２１２およびネイティブＡＰＩ２０６は、ネイティブＡＰＩ２０６が文字列４１０を復号したときに、パラメータ４０６の値を表す文字列４１０の数字４１６が、正しいパラメータにマッピングされるように、各メソッドの入力パラメータ４０６の順番を前もって決定する。代替の実施形態においては、コマンド４００および符号化された文字列４１０は、より多くの、より少ない、または異なる構成要素を含んでよい。例えば、コマンド４００は、追加のパラメータ４０６を含んでよく、そうすると、符号化された文字列は追加のパラメータ値４１６を含むことになる。
【００４２】
高水準コマンドのクラス、メソッド、パラメータを表す数字に加えて、符号化された文字列４１０は、二種類の制御文字を含む。第１の種類の制御文字（コロン）４１８は、コマンドの始まりを表し、第２の種類の制御文字（コンマ）４２０は、文字列４１０の異なるエントリを分ける。図４に示すように文字列４１０には読みやすいようにスペースを設けてあるが、スペースには機能はなく、設けなくてもよい。符号化された文字列４１０は、クラス内のオブジェクトの特定のインスタンスを参照するインスタンス識別子４２２も含む。高水準ＡＰＩ２０４は、オブジェクトを高水準オブジェクトレジストリ２０８に登録するとき、インスタンス識別子４２２をオブジェクトのインスタンスに割り当て、インタプリタ２１２は、コマンド４００を符号化する時、インスタンス識別子４２２を高水準オブジェクトレジストリ２０８から読み出す。図４に示す実施形態においては、インスタンス識別子４２２は、数字のメソッド識別子４１４とパラメータ４１６の値の間に置かれる。
【００４３】
クラス４０２およびメソッド４０４と、それぞれの数字の識別子４１２、４１４との間のマッピングは、符号化された文字列４１０を用いて元のコマンド４００をネイティブコマンドとして再現できるように構成される。一実施形態においては、テキスト識別子４０２、４０４から数字の識別子４１２、４１４へのマッピングは、予め決められているが、インタプリタ２１２とネイティブＡＰＩ２０６との間のマッピングは、無作為に生成したり、再生してもよい。さらに、メソッド４０４と数字のメソッド識別子４１４との間のマッピングは、一対一マッピングでなくてもよい。類似の機能を有するメソッド４０４を、同じ数字のメソッド識別子４１４にマッピングしてもよい。例えば、画面上でスプライトを回転、翻訳、および拡大／縮小するメソッド４０４を、ネイティブＡＰＩ２０６の一般的なメソッドに対応する数字のメソッド識別子４１４にマッピングして、画面上のスプライトを変えてよい。代替の一実施形態においては、クラス４０２およびメソッド４０４を、２つの別個の数字の識別子４１２、４１４の代わりに、１つの数字の複合識別子にマッピングしてよい。ここでも、マッピングは、一対一のマッピングである必要はない。ネイティブＡＰＩ２０６がネイティブコマンドとして高水準コマンド４００を再生できるのであれば、マッピングプロセスに任意の他の変更を行ってよい。
【００４４】
図５は、一実施形態に係る、高水準言語で書かれたコマンドをネイティブコマンドに翻訳し、ネイティブコマンドを実行するプロセスを示すフローチャートである。インタプリタ２１２が高水準ＡＰＩ２０４から高水準コマンドの待ち行列を受信する（５００）と、プロセスは開始される。待ち行列内の高水準コマンドをアセンブルするプロセスを、図６を参照して詳細に記載する。インタプリタ２１２は、図４を参照して記載したプロセスに従って、高水準コマンドを文字列として符号化する（５０５）。インタプリタ２１２は、コマンドが待ち行列の順番と同じ順番で実行されるように、待ち行列内の対応する高水準コマンドと同じ順番に符号化された文字列を配置する。
【００４５】
高水準コマンドの待ち行列を受信し（５００）、そのコマンドを文字列として符号化した（５０５）後、インタプリタ２１２は、符号化されたコマンドをネイティブＡＰＩ２０６に送信する（５１０）。ネイティブＡＰＩ２０６は、符号化プロセス５０５で行われたマッピングプロセスを逆にして、文字列をネイティブコマンドに復号する（５１５）。最後に、ネイティブＡＰＩ２０６は、ネイティブＡＰＩ２０６およびネイティブオブジェクトレジストリ２１０のマッチするクラスおよびオブジェクトを利用して、復号したネイティブコマンドを実行する（５２０）。
【００４６】
［高水準スクリプト言語とネイティブコードとの間の相互作用］
図６、７を参照すると、高水準アプリケーションが図４の通信プロトコルを用いてどのようにクライアント装置１００上およびアプリケーションクライアントモジュール１１６内のリソースと相互作用するかの２つの例が示されている。図６は、一実施形態に係る、１つの処理フレーム内の一連のコマンドを処理するプロセスを示す相互作用図である。高水準では、アプリケーション２０２は、一定の時間間隔に１つまたは複数のコマンドを発し、高水準ＡＰＩ２０４は、そのコマンドを待ち行列に追加する。この一定の時間間隔を処理フレームと呼ぶ。処理フレームの終わりに、待ち行列のコマンドは、図４を参照して記載した通信プロトコルを用いて符号化され、ネイティブＡＰＩ２０６に転送され、ネイティブコマンドとして復号される。待ち行列機構は、アプリケーション２０２が対応する高水準コマンドを発したのと同じ順番でネイティブコマンドを実行できるように、符号化プロセスおよび復号プロセスを通して元の高水準コマンドの順番を維持する。
【００４７】
ネイティブＡＰＩ２０６が次の処理フレームのコマンドを要求すると（６００）、プロセスが開始される。要求は文字列として符号化され、インタプリタ２１２に送信され、インタプリタ２１２は、その要求を復号して高水準ＡＰＩ２０４に送る（６０２）。高水準ＡＰＩ２０４は、アプリケーション２０２の高水準コードを分析し、符号化する第１のコマンドを読み出す（６０４）。読み出されたコマンドは、画面上のスプライトの表示または修正、オーディオクリップの再生、メモリ１０８のファイルの読み書き、物理センサ１１２からの入力の監視など、典型的にはネイティブコード用である任意の機能を実行してよい。第１のコマンドを読み出した（６０４）後、高水準のＡＰＩは、第１のコマンドを待ち行列に加える（６０６）。
【００４８】
第１のコマンドを読み出し（６０４）、待ち行列に加えた（６０６）後、高水準ＡＰＩ２０４は、同じプロセスを行って、追加のコマンドを読み出し（６０８）、待ち行列に加える（６１０）。読み出しプロセスおよび待ち行列プロセスは、合わせて２つのコマンドで示されているが、高水準ＡＰＩ２０４は、処理フレームの間、追加の高水準コマンドを待ち行列に加え続けてよい。処理フレームの最後に、高水準ＡＰＩ２０４は、高水準コマンドの待ち行列をインタプリタ２１２に送信し（６１２）、インタプリタ２１２は、図４を参照して記載した通信プロトコルに従って、待ち行列の各コマンドを文字列として符号化する（６１４）。
【００４９】
インタプリタ２１２は、符号化された文字列の待ち行列をネイティブＡＰＩ２０６に送信し（６１６）、ネイティブＡＰＩ２０６は、文字列をネイティブコマンドに復号し（６１８）、ネイティブコマンドを実行する（６２０、６２２）。コマンドは、元の高水準コマンドの順番を保持したまま、待ち行列に加えられ（６０６、６１０）、符号化され（６１４）、転送され（６１６）、復号される（６１８）ので、ネイティブコマンドは、高水準コマンドが待ち行列に加えられたのと同じ順番で実行される（６２０、６２２）。不正確な順番でコマンドを実行すると不正確な結果を生むことがあるので、コマンドの順番を保持することは重要である。例えば、画像を画面に配置し、翻訳し、原点を中心に回転させるための一連のコマンドは、翻訳と回転の順番が逆になると、違った結果になる。
【００５０】
高水準コードとネイティブコードとの間の処理境界を超える処理（例えば、コマンドの符号化６１４、送信６１６、復号６１８のプロセス）が比較的、リソース集約的なので、待ち行列機構によって、処理オーバーヘッドを減らし、アプリケーション２０２の性能を向上させる。クライアント装置１００が処理能力と電池寿命に制約のある携帯機器である場合、これは特に重要である。１つの処理フレーム全体のコマンドを一度に処理することによって、アプリケーションクライアントモジュールは、１コマンドごとに１回ではなく、１処理フレームごとに１回、処理境界を超える。
【００５１】
図７は、一実施形態に係る、アプリケーションクライアントモジュール１１６が維持している２つの異なるオブジェクトレジストリ２０８、２１０に新しいオブジェクトを登録するプロセスを示す相互作用図である。オブジェクトを登録するプロセスは、図６を参照して記載したプロセスと同じ方法で始まる。最初に、ネイティブＡＰＩ２０６は、次の処理フレームのコマンドを要求する（７００）。ネイティブＡＰＩ２０６は、その要求を文字列として符号化して、インタプリタ２１２に送信し、インタプリタ２１２は、その要求を復号して高水準ＡＰＩ２０４に送る（７０２）。高水準ＡＰＩ２０４は、アプリケーション２０２の高水準コードを分析し、符号化する次のコマンドを読み出す（７０４）。高水準ＡＰＩ２０４は、新しいオブジェクトを登録するコマンドを読み出す（７０４）と、コマンドを待ち行列に追加する（７０８）前に、オブジェクトを高水準オブジェクトレジストリ２０８に登録する（７０６）。
【００５２】
一実施形態においては、高水準ＡＰＩ２０４は、新しいオブジェクトを高水準レジストリ２０８に登録する（７０６）時に、インスタンス識別子をオブジェクトに割り当てる。登録コマンドは、登録するオブジェクトの種類を識別するクラス識別子も含んでよい。クラス識別子およびインスタンス識別子は一緒に、高水準ＡＰＩ２０４がオブジェクトを一意に識別するのを可能にし、どちらの識別子もオブジェクトレジストリに保存される。代替の実施形態においては、クラス識別子およびインスタンス識別子をまとめて、一意にオブジェクトを識別するのに用いられる１つの複合識別子としてよい。
【００５３】
処理フレームの最後に、高水準ＡＰＩ２０４は、待ち行列に加えられたコマンドをインタプリタ２１２に送信し（７１０）、待ち行列内のコマンドは、図５、図６を参照して記載したプロセスを用いて、符号化されて（７１２）、送信され（７１４）、復号される（７１６）。図４に示すように、インスタンス識別子およびクラス識別子は、符号化され、文字列の一部として送信される。図７では１つの登録コマンドのみが示されているが、高水準ＡＰＩ２０４は、処理フレーム中に、図示されているオブジェクト登録コマンドを読み出し（７０４）待ち行列に加える（７０８）前か後のどちらかに、追加のコマンドを読み出して追加してよい。その処理フレームのコマンドがネイティブコマンドに復号（７１６）された後、ネイティブＡＰＩ２０６は、オブジェクト登録コマンドを実行して、オブジェクトをネイティブオブジェクトレジストリ２１０に登録する（７１８）。同じ数字のインスタンス識別子を用いて、オブジェクトをネイティブオブジェクトレジストリ２１０に登録する（７１８）。このプロセスによって、アプリケーションクライアントモジュール１１６は、オブジェクトの１つまたは複数を照会するコマンドがネイティブコードによって実行されるように、オブジェクトレジストリの２つのミラー化されたコピー２０８、２１０を維持することができる。
【００５４】
開示の構成によって、クライアント装置１００上でネイティブに実行するアプリケーションとはユーザには区別できない高水準ソフトウェアアプリケーション２０２を開発者が書くことができるようになり、有益である。アプリケーションクライアントモジュール１１６に実装される簡易装置ＡＰＩ２１４と通信プロトコルとの組み合わせによって、グラフィック機能、ユーザインタフェース機能、ネットワーク装置１１０、および物理センサ１１２などの典型的にはネイティブアプリケーションのために用意されているシステムリソースに、高水準アプリケーション２０２がアクセスすることが可能になる。結果として、開発者は、ネイティブアプリケーションと同じ機能を実行する高水準アプリケーション２０２を書くことができる。さらに、開示の構成によって、クライアント装置１００のオペレーティングシステムがネイティブアプリケーションの更新に課す制限を受けることなく、高水準アプリケーション２０２を更新することができる。これによって、アプリケーションクライアントモジュール１１６は、ユーザの地理的位置、人口学的情報、クライアント装置の構成、または他の個人情報に合わせた更新を自動的に適用することができ、それにより、高水準アプリケーション２０２の価値を高める、よりカスタマイズされたユーザ体験が得られる。
【００５５】
［構成に関するその他の留意事項］
本明細書を通して、１つのインスタンスとして記載されている構成要素、動作、構造を複数のインスタンスで実装してよい。１つまたは複数のメソッドの個々の動作を別個の動作として示し、記載しているが（例えば、図５）、個々の動作の１つまたは複数を同時に実行してもよく、図に示した順番で動作を行う必要はない。例示の構成で別々の構成要素として示されている構造および機能を、組み合わせた構造または構成要素として実装してもよい。同様に、１つの構成要素として示された構造および機能を、別個の構成要素として実装してよい。これら、および他の変形形態、修正形態、追加、改良は、本明細書の発明の内容の範囲に含まれる。
【００５６】
論理もしくは多くの構成要素、モジュール、または機構を含む一部の実施形態を本明細書に記載している（例えば、図１、図２、図３、図６、および図７）。モジュールは、ソフトウェアモジュール（例えば、機械可読媒体で実現されるコードまたは送信信号）であってもハードウェアモジュールであってもよい。ハードウェアモジュールは、一定の動作を行うことができる有形の装置で、一定の方法で構成または配置してよい。例示の実施形態においては、１つもしくは複数のコンピュータシステム（例えば、スタンドアローンコンピュータシステム、クライアントコンピュータシステム、またはサーバコンピュータシステム）、またはコンピュータシステムの１つもしくは複数のハードウェアモジュール（例えば、プロセッサ、またはプロセッサ群）を、本明細書で記載した一定の動作を行うために動作するハードウェアモジュールとして、ソフトウェア（例えば、アプリケーション、またはアプリケーションの一部）によって構成してよい。
【００５７】
様々な実施形態においては、ハードウェアモジュールは、機械的に実装されても電気的に実装されてもよい。例えば、ハードウェアモジュールは、（例えば、ＦＰＧＡ（ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）またはＡＳＩＣ（ａｐｐｌｉｃａｔｉｏｎ−ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）などの専用プロセッサとして、）一定の動作を行うように永続的に構成された専用回路または論理を含んでよい。ハードウェアモジュールは、一定の動作を行うようにソフトウェアによって一時的に構成された（例えば、汎用プロセッサまたは他のプログラム可能なプロセッサ内に含まれるような）プログラム可能な論理または回路も含んでよい。専用の永続的に構成された回路で機械的にハードウェアモジュールを実装するか、（例えばソフトウェアによって構成された）一時的に構成された回路でハードウェアモジュールを実装するかの決定を、費用と時間を考慮して行ってよいのは、当然である。
【００５８】
本明細書に記載の例示のメソッドの様々な動作は、一時的に構成された１つまたは複数のプロセッサ（例えば、ソフトウェア）または、関連する動作を行うように永続的に構成された１つまたは複数のプロセッサによって、少なくとも部分的に実行されてよい。このようなプロセッサは、一時的なものであれ永続的なものであれ、１つまたは複数の動作または機能を実行するように動作する、プロセッサ実行モジュールを構成してよい。本明細書で言及されるモジュールは、一部の例示の実施形態においては、プロセッサ実行モジュールを含んでよい。
【００５９】
１つまたは複数のプロセッサは、「クラウドコンピューティング」環境で、または「ＳａａＳ（ｓｏｆｔｗａｒｅ  ａｓ  ａ  ｓｅｒｖｉｃｅ）」として、関連する動作の実行をサポートするように動作してもよい。例えば、ネットワーク（例えば、インターネット）、または、１つまたは複数の適切なインタフェース（例えば、ＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍ  ｉｎｔｅｒｆａｃｅ））を介してアクセス可能な動作の少なくとも一部を、（プロセッサを含む機械の例のような）一群のコンピュータで実行してもよい。
【００６０】
動作の一部は、１つの機械に存在しているだけではなく多くの機械に配置されている１つまたは複数のプロセッサ間で分散して実行されてよい。一部の例示の実施形態においては、１つまたは複数のプロセッサまたはプロセッサ実行モジュールは、１つの地理的位置（例えば、住居、オフィス、またはサーバファーム内）に配置されてよい。他の例示の実施形態においては、１つまたは複数のプロセッサまたはプロセッサ実行モジュールは、多くの地理的位置に分散されてよい。
【００６１】
本明細書の一部では、機械メモリ（例えば、コンピュータメモリ）内にビットまたは２値デジタル信号として記憶されたデータに関して、アルゴリズムまたは動作の記号表示で表している。これらのアルゴリズムまたは記号表示は、データ処理技術の当業者が自分の作品の内容を別の当業者に伝えるために用いる技術の例である。本明細書で用いられている「アルゴリズム」は、所望の結果を得るための自己矛盾のない動作シーケンスまたは同様の処理である。この文脈においては、アルゴリズムおよび動作は、物理量の物理的操作を伴う。典型的には、このような量は、記憶、アクセス、転送、結合、比較、または機械によって操作できる、電気信号、磁気信号、または光信号の形を取るが、必ずしもそうでなくてもよい。主に通常の使用においては、時には、「データ」「コンテンツ」「ビット」「値」「要素」「記号」「文字」「用語」「数」「数字」などの言葉を用いて、そのような信号を指すのが便利である。しかしながら、これらの言葉は、単に便利なラベルであって、適切な物理量に関連づけられるべきである。
【００６２】
特段の記載がない限り、「処理」「コンピューティング」「計算する」「判断する」「示す」「表示する」などの言葉を用いた本明細書の記載は、情報を受信、記憶、送信、または表示する１つまたは複数のメモリ（例えば、揮発性メモリ、不揮発性メモリ、またはその組み合わせ）、レジスタ、または他の機械構成要素内に物理的な（例えば、電子の、磁気の、光学的な）量として表されたデータを操作または変換する機械（例えば、コンピュータ）のアクションまたはプロセスを指す。
【００６３】
本明細書で「一実施形態」または「実施形態」と言及する場合には、その実施形態に関連して記載した具体的な要素、機能、構造または特徴が、少なくとも１つの実施形態に含まれることを意味する。明細書の様々な箇所に出現する「一実施形態において」という句は、必ずしも全て同じ実施形態を指すわけではない。
【００６４】
一部の実施形態は、その実施形態から派生するものと共に、「結合された」「接続された」という表現を用いて記載することができる。例えば、一部の実施形態は、複数の要素が直接的に物理的または電気的接触をしていることを示す「結合した」という語を用いて記載してよい。しかしながら、「結合した」という語は、複数の要素が互いに直接、接触していないが、互いに協働し、相互作用していることを意味してもよい。実施形態は、この文脈では制限を受けない。
【００６５】
本明細書で用いられる「備える」「備えている」「含む」「含んでいる」「有する」「有している」またはその変形の用語は、非排他的に含むことを意図している。例えば、要素の一覧を含むプロセス、メソッド、物、または装置は、必ずしもこれらの要素に限られず、このようなプロセス、メソッド、物または装置に明示的にリストされていない、または固有でない他の要素を含んでよい。さらに、そうではないと記載されていない限り、「または」は、排他的ではなく、包含的であることを指す。例えば、条件ＡまたはＢは、以下すなわち、Ａは真（または存在し）かつＢは偽（または存在しない）、Ａは偽（または存在しない）かつＢは真（または存在する）、ＡもＢも真（または存在する）の内の任意の１つによって満足される。
【００６６】
さらに、本明細書の実施形態においては、要素および構成要素の記載に「ａ」「ａｎ」を使用している。この使用は、便利であるのと、発明を一般的に述べるためであって、この記載は、１つまたは少なくとも１つを含むと解釈するべきで、単数形は、別段の断りのない限り、複数形も含む。
【００６７】
本開示を読むと、当業者は、本明細書に開示の原理を用いた高水準コードとネイティブコードとの間の通信のためのシステムおよびプロセスに関して、さらに追加の別の構造設計および機能設計が分かるであろう。従って、具体的な実施形態およびアプリケーションを図示し、記載したが、開示の実施形態は、本明細書に開示した通りの構成および構成要素に限られないことは理解されたい。本明細書に開示のメソッドおよび装置の配置、動作、および詳細において、様々な修正、変更、変形形態が、添付請求項に定義された精神および範囲から逸脱することなく可能なことは、当業者には明らかであろう。
【図１】
0005948342.tif 000002
【図２】
0005948342.tif 000003
【図３】
0005948342.tif 000004
【図４】
0005948342.tif 000005
【図５】
0005948342.tif 000006
【図６】
0005948342.tif 000007
【図７】
0005948342.tif 000008