IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エスアーペー エスエーの特許一覧

特開2024-127696ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワーク
<>
  • 特開-ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワーク 図1
  • 特開-ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワーク 図2
  • 特開-ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワーク 図3
  • 特開-ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワーク 図4
  • 特開-ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワーク 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024127696
(43)【公開日】2024-09-20
(54)【発明の名称】ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワーク
(51)【国際特許分類】
   G06F 8/36 20180101AFI20240912BHJP
【FI】
G06F8/36
【審査請求】有
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023113076
(22)【出願日】2023-07-10
(31)【優先権主張番号】18/179,850
(32)【優先日】2023-03-07
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVASCRIPT
2.PYTHON
3.JAVA
(71)【出願人】
【識別番号】300015447
【氏名又は名称】エスアーペー エスエー
【住所又は居所原語表記】Dietmar-Hopp-Allee 16, 69190 Walldorf, Germany
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100110364
【弁理士】
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133400
【弁理士】
【氏名又は名称】阿部 達彦
(72)【発明者】
【氏名】デイヴィッド・カンツ
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BC14
5B376BC23
5B376BC57
5B376BC80
5B376FA06
(57)【要約】
【課題】ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワークの使用を提供する。
【解決手段】1つの例示的な実施形態では、コンポーネントが、グルーコードを書く必要なしに、プログラミング言語およびサービスにわたって効率的に働くことを可能にする共通の構成可能な抽象化を提供する。アプリケーション開発者は、アプリケーション論理自体に集中することができる。サービスの機能は、フレームワーク開発者が選定するプログラミング言語を使用して、それらの開発者によって一度だけ開発され得る。
【選択図】図1
【特許請求の範囲】
【請求項1】
少なくとも1つのハードウェアプロセッサと、
命令を記憶したコンピュータ可読媒体と
を備え、
前記命令は、前記少なくとも1つのハードウェアプロセッサによって実行されると、前記少なくとも1つのハードウェアプロセッサに、
データモデルにアクセスすることと、
前記データモデルをコンポーネントモデルにコンパイルすることと、
前記コンポーネントモデルをユーザプログラミング言語にコンパイルすることであって、前記ユーザプログラミング言語が、バイトコードフォーマットにコンパイル可能なプログラミング言語である、コンパイルすることと、
前記ユーザプログラミング言語で書かれたカスタムコードにアクセスすることであって、前記カスタムコードが、コンパイルされた前記コンポーネントモデルを含む、アクセスすることと、
前記カスタムコードを前記バイトコードフォーマットにコンパイルすることと、
コンパイルされた前記カスタムコードを、ホストプログラミング言語を実行するフレームワークにロードすることと、
コンパイルされた前記カスタムコードを実行して、サーバプロセスを作成することと
を含む動作を実行させる、システム。
【請求項2】
前記サーバプロセスが、
前記カスタムコードへの入力を第1のフォーマットから前記ホストプログラミング言語に変換する、前記コンポーネントモデルに基づく、少なくとも1つのインターフェースと、
前記カスタムコードからの出力を前記ホストプログラミング言語から前記第1のフォーマットに変換する、前記コンポーネントモデルに基づく、少なくとも1つのインターフェースと
をさらに含む、請求項1に記載のシステム。
【請求項3】
前記第1のフォーマットが、ハイパーテキストトランスファープロトコル(HTTP)である、請求項2に記載のシステム。
【請求項4】
前記バイトコードフォーマットがWebAssemblyである、請求項1に記載のシステム。
【請求項5】
前記コンポーネントモデルがWebAssemblyコンポーネントモデル(WASM)である、請求項4に記載のシステム。
【請求項6】
前記ホストプログラミング言語がコアクエリ表記である、請求項1に記載のシステム。
【請求項7】
前記フレームワークが、コンパイルされた前記コンポーネントモデルを、前記ホストプログラミング言語に適合するインターフェースにコンパイルする、請求項1に記載のシステム。
【請求項8】
データモデルにアクセスするステップと、
前記データモデルをコンポーネントモデルにコンパイルするステップと、
前記コンポーネントモデルをユーザプログラミング言語にコンパイルするステップであって、前記ユーザプログラミング言語が、バイトコードフォーマットにコンパイル可能なプログラミング言語である、コンパイルするステップと、
前記ユーザプログラミング言語で書かれたカスタムコードにアクセスするステップであって、前記カスタムコードが、コンパイルされた前記コンポーネントモデルを含む、アクセスするステップと、
前記カスタムコードを前記バイトコードフォーマットにコンパイルするステップと、
コンパイルされた前記カスタムコードを、ホストプログラミング言語を実行するフレームワークにロードするステップと、
コンパイルされた前記カスタムコードを実行して、サーバプロセスを作成するステップと
を含む、方法。
【請求項9】
前記サーバプロセスが、
前記カスタムコードへの入力を第1のフォーマットから前記ホストプログラミング言語に変換する、前記コンポーネントモデルに基づく、少なくとも1つのインターフェースと、
前記カスタムコードからの出力を前記ホストプログラミング言語から前記第1のフォーマットに変換する、前記コンポーネントモデルに基づく、少なくとも1つのインターフェースと
をさらに含む、請求項8に記載の方法。
【請求項10】
前記第1のフォーマットが、ハイパーテキストトランスファープロトコル(HTTP)である、請求項9に記載の方法。
【請求項11】
前記バイトコードフォーマットがWebAssemblyである、請求項8に記載の方法。
【請求項12】
前記コンポーネントモデルがWebAssemblyコンポーネントモデル(WASM)である、請求項11に記載の方法。
【請求項13】
前記ホストプログラミング言語がコアクエリ表記である、請求項8に記載の方法。
【請求項14】
前記フレームワークが、コンパイルされた前記コンポーネントモデルを、前記ホストプログラミング言語に適合するインターフェースにコンパイルする、請求項8に記載の方法。
【請求項15】
命令を記憶した非一時的機械可読媒体であって、
前記命令は、1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
データモデルにアクセスすることと、
前記データモデルをコンポーネントモデルにコンパイルすることと、
前記コンポーネントモデルをユーザプログラミング言語にコンパイルすることであって、前記ユーザプログラミング言語が、バイトコードフォーマットにコンパイル可能なプログラミング言語である、コンパイルすることと、
前記ユーザプログラミング言語で書かれたカスタムコードにアクセスすることであって、前記カスタムコードが、コンパイルされた前記コンポーネントモデルを含む、アクセスすることと、
前記カスタムコードを前記バイトコードフォーマットにコンパイルすることと、
コンパイルされた前記カスタムコードを、ホストプログラミング言語を実行するフレームワークにロードすることと、
コンパイルされた前記カスタムコードを実行して、サーバプロセスを作成することと
を含む動作を実行させる、非一時的機械可読媒体。
【請求項16】
前記サーバプロセスが、
前記カスタムコードへの入力を第1のフォーマットから前記ホストプログラミング言語に変換する、前記コンポーネントモデルに基づく、少なくとも1つのインターフェースと、
前記カスタムコードからの出力を前記ホストプログラミング言語から前記第1のフォーマットに変換する、前記コンポーネントモデルに基づく、少なくとも1つのインターフェースと
をさらに含む、請求項15に記載の非一時的機械可読媒体。
【請求項17】
前記第1のフォーマットが、ハイパーテキストトランスファープロトコル(HTTP)である、請求項16に記載の非一時的機械可読媒体。
【請求項18】
前記バイトコードフォーマットがWebAssemblyである、請求項15に記載の非一時的機械可読媒体。
【請求項19】
前記コンポーネントモデルがWebAssemblyコンポーネントモデル(WASM)である、請求項18に記載の非一時的機械可読媒体。
【請求項20】
前記ホストプログラミング言語がコアクエリ表記である、請求項15に記載の非一時的機械可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本書は、一般に、コンピュータソフトウェアアプリケーション開発に関する。より詳細には、本書は、ウェブアセンブリコンポーネントモデルに基づく構成可能な処理フレームワークの使用に関する。
【背景技術】
【0002】
現代、1つまたは複数のプログラミング言語、アウトバウンドサービス(たとえば、データベース、メッセージブローカーなど)、およびインバウンドサービス(ハイパーテキストトランスファープロトコル(HTTP)サービス(GraphQLおよびODataなどのプロトコルを含む)、およびメッセージブローカーなど)の組合せを含めて、ソフトウェアアプリケーションコードは、多くの場合、非常に断片的である。その結果、アプリケーション開発者は、多くの「グルーコード(glue code)」と呼ばれるものを作成する必要がある。グルーコードは、それらの対話を協調させて通信を促すために、別個のソフトウェアコンポーネントまたはシステムを一緒に接続するコードを指す。グルーコードは、コンポーネントをまとめて、それらが単一の集積システムとして働くことを可能にする「接着剤(glue)」として作用する。グルーコードは、一般に、異なるAPI、データフォーマット、およびプロトコルを統合するために使用され、多くの場合、CまたはC++などの低レベルのプログラミング言語で書かれる。グルーコードは、通常、最小であり、単純であり、それ自体の何らかの著しい機能を提供するのではなく、コンポーネントの統合を促すことに焦点を当てる。
【発明の概要】
【課題を解決するための手段】
【0003】
本開示は、同様の参照番号が同様の要素を示す、添付の図面の図において、限定ではなく、例として示される。
【図面の簡単な説明】
【0004】
図1】1つの例示的な実施形態による、構成可能な処理フレームワークを含むシステムを示すブロック図である。
図2】1つの例示的な実施形態による、ソフトウェア環境でカスタムコードを作成する方法を示す流れ図である。
図3】1つの例示的な実施形態による、ソフトウェア環境でカスタムコードを使用する方法を示す図である。
図4】上記で説明したデバイスのいずれか1つまたは複数の上に設置され得るソフトウェアのアーキテクチャを示すブロック図である。
図5】1つの例示的な実施形態による、本明細書で論じる方法論のうちのいずれか1つまたは複数を機械に実行させるための命令のセットが実行され得る、コンピュータシステムの形態の機械の図表示である。
【発明を実施するための形態】
【0005】
続く説明は、例示的なシステム、方法、技法、命令シーケンス、および計算機プログラム製品について論じる。以下の説明において、説明のために、本主題の様々な例示的な実施形態の理解をもたらすために、多数の詳細な説明が記載される。しかしながら、本主題の様々な例示的な実施形態がこれらの特定の詳細なしに実践され得ることは当業者に明らかになるであろう。
【0006】
多くのグルーコードを書くことは、開発段階だけでなく、後の段階においても、アプリケーション開発者にとって時間がかかることであり得る。再使用コードがホストのプログラミング言語で書かれていない場合、たとえば、そのコード自体が再使用されているにもかかわらず、そのコードは再度書かれる必要がある。サービスクライアント(インバウンドまたはアウトバウンド)がホストのプログラミング言語用に利用可能でない場合、サービスクライアントを構築する必要がある。さらに、サービスの変更は、その場合、そのコードに対する変更も必要とする。
【0007】
1つの例示的な実施形態では、コンポーネントが、グルーコードを書く必要なしに、プログラミング言語およびサービスにわたって効率的に働くことを可能にする、共通の、構成可能な抽象化を提供する。アプリケーション開発者は、アプリケーション論理自体に集中することができる。サービスの機能は、フレームワーク開発者が選定するプログラミング言語を使用して、それらの開発者によって一度だけ開発され得る。
【0008】
より詳細には、構成可能な処理フレームワークは、アプリケーション開発者によって作成されたデータモデルによって定義される動作を処理することが可能な汎用サーバを提供する。構成可能な処理フレームワークは、コアクエリ表記(Core Query Notation)など、言語に依存しない表記を利用し得る。コアクエリ表記は、クエリを構造化された規格様式で表すために使用されるシンタックスである。コアクエリ表記は、ユーザが組織化された効率的な様式で特定の情報を大きなデータセットから検索し、取り出すことを可能にするために、データベース管理システムおよび検索エンジン内で使用され得る。シンタックスは、一般に、キーワード、オペレータ、および論理文などの要素を含み、これらは組み合わされて、次いでデータセットから関連情報を取り出すために実行され得るクエリを形成する。しかしながら、基本的に、シンタックスはクエリ(たとえば、SELECT、CREATEなど)の観点からインテント(intent)を符号化するための抽象的な方法として使用され得る。
【0009】
データモデル自体を使用することによって、サービスの多くの態様が定義され得るが、多くの場合、データモデルだけでは完全なサービスを作成するためには不十分である。そのため、アプリケーション開発者からの何らかのレベルのカスタムコードが必要とされる。しかしながら、アプリケーション開発者が汎用サーバによって利用されるプログラミング言語(ホスト言語、しばしばJaveと呼ばれる)を単に使用することによって、それを行うように制限されているとき、アプリケーション開発者がそのカスタムコードを作成することは困難であり得る。したがって、1つの例示的な実施形態では、構成可能な処理フレームワークは、そのプログラミング言語が、WebAssemblyなどのバイトコードフォーマットにコンパイル可能である限り、アプリケーション開発者がその開発者が選定したプログラミング言語でカスタムコードを作成することを可能にする。カスタムコードはそのバイトコードフォーマットにコンパイルされ、次いで、構成可能な処理フレームワークにロードされ、そこで、カスタムコードは、コアクエリ表記コマンドを介して対話され得る。
【0010】
WebAssembly(WASM)は、ウェブブラウザ内で実行するように設計されたスタックベースの仮想機械用の低レベルのバイナリ命令フォーマットである。1つの例示的な実施形態では、WebAssemblyランタイムは、サーバ上でWebAssemblyモジュールを実行するために使用され、これらのモジュールがWebAssemblyコンポーネントモデルに基づいて、インターフェースを用いて構成されることを可能にする。
【0011】
これらのインターフェースは、WIT(WebAssemblyインターフェース)で書かれ得る。WITは、WASMモジュールとホスト環境とが通信し相互動作することを可能にする、WASMモジュールとホスト環境との間のインターフェースを記述するための規則および協定のセットを定義するWASM仕様である。
【0012】
より技術的な点から、WITは、データがWebAssemblyモジュールとホスト環境との間を行き来する方法、ならびに、どのように機能が起動され、結果が返されるかを定義するタイプおよび機能のセットである。この仕様は、WASMモジュールがそれらの機能のタイプ、およびそれらのWASMモジュールが予想し、返すデータのタイプを宣言するための方法を提供し、これにより、モジュールとホスト環境との間の安全かつ効率的な通信が可能になる。
【0013】
より詳細には、WIT Bindgenが使用され得る。WIT Bindgenは、WIT仕様を使用してそのインターフェース記述に基づいて、WebAssemblyモジュールに対するホストバインディングを生成するツールである。基本的に、WIT Bindgenは、WITタイプ情報で注釈付けされているWebAssemblyモジュールを利用し、モジュールの機能を呼び出し、そのデータにアクセスするために使用され得るホスト言語バインディングを生成する。
【0014】
WIT Bindgenは、Rustプログラミング言語のWebAssemblyツーリングエコシステムの一部である。WIT Bindgenは、WebAssemblyモジュール用のJavaScriptバインディングを生成するために同様の能力を提供するWASM-Bindgenツーと協働するように設計されている。
【0015】
WIT Bindgenの主な利益のうちの1つは、手動で行われるときに時間がかかりエラーを起こしやすい可能性があるホスト言語バインディングを生成するプロセスを自動化することである。WIT Bindgenを使用することによって、開発者は、そのWebAssemblyモジュールに対してカスタムホストバインディングを書き、維持する必要を回避し、代わりに、モジュールの論理をターゲット言語で書くことに焦点を当てることができる。
【0016】
WebAssemblyコンポーネントモデルは、ウェブアプリケーションがWASMで書かれた再使用可能なコンポーネントから構築され、次いで、より大きな全体にアセンブルされて最終的なアプリケーションを形成することを可能にする、ポータブルの、ロード効率およびランタイム効率が高いバイナリフォーマットである。この手法は、開発者が、そのアプリケーションに対してモジュール式かつ維持可能な構造をやはり提供しながら、性能およびセキュリティなど、WASMの利点を利用することを可能にする。コンポーネントモデルにより、開発者は、複数のアプリケーションにわたって共有され得る再使用可能コードをWASMで書くことが可能になり、複製の量を低減し、コードの品質全体を改善する。加えて、コンポーネントモデルは、開発者が、その動的かつ表現的な性質から利益を得るアプリケーションの部分に対してJavaScriptを使用しながら、高性能コンポーネントをWASMで書くことを可能にすることによって、アプリケーションの性能全体を改善し得る。
【0017】
図1は、1つの例示的な実施形態による、構成可能な処理フレームワーク102を含むシステム100を示すブロック図である。アプリケーション開発者は、データモデル104を作成し、データモデル104は、次いで、構成可能な処理フレームワーク102内でアプリケーション論理106にコンパイルされ得る。1つの例示的な実施形態では、データモデル104は、コアデータおよびサービス(CDS)モデルなど、データおよびサービスオブジェクト内に作成され得る。CDSモデルは、コアスキーマ表記(Core Schema Notation)に準拠するプレーンJavaScriptオブジェクトである。CDSモデルはCDSデータモデリング言語で書かれる。CDSにより、企業体およびそれらの関連性の中心的定義、ならびにそれらのエンティティに影響を及ぼすサービスの定義が可能になる。これは、開発者が、事業データおよび論理を共有ならびに再使用することができるアプリケーションを構築することを可能にし、作業の複製を低減し、企業にわたるデータの一貫性および精度を増大させる。
【0018】
いくつかの例示的な実施形態では、ドメイン固有言語(DSL)およびサービスの共通セットを備えたCDSコンポーネント(図示せず)が提供され得る。CDSコンポーネントは、データベース構造の一体部分として意味的にリッチなデータモデルを定義し消費することを可能にし得、それにより、データモデリングならびにデータの取り出しおよび処理が、ドメイン専門家の概念的考えにより近い、より高い意味的レベルに引き上げられることを可能にする。
【0019】
詳細には、CDSコンポーネントは、エンティティ関係モデル(ERM:entity-relationship model)に基づいて、より高いレベルのドメイン固有言語(DSL)およびサービスを実装する。データタイプ、関連するメタデータ、およびデータベース構成(たとえば、列および表)を含めて、意味的にリッチなデータモデルを定義するために、データ定義言語(DDL)が使用される。データモデルに基づいて、好都合にかつ効率的にデータを読み取るために、クエリ言語(QL)が使用される。QLは、データモデル内のビューを定義するためにも使用される。クエリ内で、計算されたフィールド、デフォルト値、制約などを指定するために表現言語(EL)が使用される。計算されたフィールド、デフォルト値、および制約は、データモデル内の要素についても同様に指定される。
【0020】
上記で説明したように、データモデル104自体がアプリケーション論理106内でサービスを作成するために使用され得るが、多くのサービスのすべての機能を作成するためにデータモデル104を使用することはできない。そのため、何らかのレベルのカスタムコードが必要とされる。したがって、1つの例示的な実施形態では、アプリケーション開発者は、カスタムコード108をやはりユーザ言語110で作成する。ユーザ言語110は、WebAssemblyなど、コンパイルされたバイトコードフォーマット112にコンパイルされることが可能である任意の言語であってよい。コンパイルされたバイトコードフォーマットの他の例は、Javaバイトコード、Pythonバイトコード、.NETバイトコード、およびLuaバイトコードを含む。
【0021】
場合によっては、1つまたは複数のインターフェースを生成するためにコンポーネントモデル114が使用されてもよい。これらのインターフェースは、カスタムコード108を作成するとき、アプリケーション開発者によって利用され得るが、構成可能な処理フォーマットによって、その元の形式でまたは逆の形式で、直接的に使用されてもよい。
【0022】
より詳細には、コンポーネントモデルは、コアクエリ表記と、構成可能な処理フレームワーク102と対話しているサービスまたはエンティティによって利用される他のフォーマットとの間で変換するために使用され得る1つまたは複数のインターフェースを生み出し得る。
【0023】
構成可能な処理フレームワーク102の開発者は、HTTPトリガ116および/またはアドバンストメッセージキューイングプロトコル(AMQP)トリガ118など、1つまたは複数のトリガを作成し得る。AMQPは、メッセージ指向ミドルウェアのためのオープンスタンダードアプリケーションレイヤプロトコルである。AMQPは、アプリケーションがメッセージブローカーを通じてメッセージを交換することによって、信頼できる非同期方法で互いと通信するための方法を提供する。AMQPは、キューイング、公開/加入、および要求/応答を含めて、広範囲のメッセージング使用事例をサポートするように設計され、金融業界、ヘルスケア業界、およびロジスティックス業界においてシステムを統合するための選択肢として普及している。AMQPは、メッセージを符号化および復号するための規則のセット、ならびにメッセージブローカーの挙動に関する仕様を含むメッセージ指向ミドルウェアのための標準ワイヤーレベルプロトコルを定義する。これは、AMQPの異なる実装が相互動作することを可能にし、異なるプログラミング言語で書かれたアプリケーションが互いに通信することを可能にする。
【0024】
トリガ116および118は、受信されることになる対応するメッセージをリッスンし、その時点で、アクションがトリガされる。たとえば、HTTPトリガ116は、受信されることになる、HTTP ODATA要求などのHTTPコマンドをリッスンし、AMQPトリガ118は、受信されることになる、AMQPメッセージクラウドイベントなどのAMQPメッセージをリッスンする。これらのトリガは、対応するトランスフォーマ(ここで、HTTP->CQNトランスフォーマ120またはAMQP->CQNトランスフォーマ122)に対応するコマンドまたはメッセージをアプリケーション論理によって使用されるべきCQNフォーマットに変換するように催促し得る。
【0025】
留意すべきは、コンポーネントモデル114はインターフェースを逆方向(たとえば、CQN->HTTPおよび/またはCQN->AMQN)で定義した可能性があるため、その場合、構成可能な処理フレームワークは、コンポーネントモデル114によって定義されたインターフェースを基本的に反転させて、HTTP->CQNトランスフォーマ120およびAMQP->CQNトランスフォーマ122を作成し得る。
【0026】
CQN出力を所望のプロトコルに変換するために、アプリケーション論理106の出力側に同様のインターフェースが使用され得る。ここで、たとえば、CQN->HTTPトランスフォーマ124は、CQN出力を定義されたHTTPクライアント126または構成可能な処理フレームワーク102上の定義された同様のエンドポイントによって使用するためのHTTPフォーマットに変換し得る。同様に、CQN->AMQPトランスフォーマ128は、CQN出力を定義されたAMQPクライアント130または構成可能な処理フレームワーク102上で定義された同様のエンドポイントによって使用するためのAMQPフォーマットに変換し得る。
【0027】
1つの例示的な実施形態では、コンポーネントモデル114は、WebAssemblyコンポーネントモデルを利用し得る。
【0028】
WebAssemblyコンポーネントモデルは、WebAssembly(WASM)を使用して構築されるアプリケーションを組織化および構造化する方法である。WebAssemblyコンポーネントモデルは、ウェブアプリケーションを構築するためのモジュール式かつ構成可能な手法を提供し、開発者がそのアプリケーションを、完全なアプリケーションを構築するために組み合わされ得る、より小さな、再使用可能なコンポーネントに分解することを可能にする。
【0029】
WebAssemblyコンポーネントモデルでは、各コンポーネントは、WASMモジュールとしてパッケージングされ、明確に定義されたAPIのセットを公開するように設計される。これらのモジュールは、次いで、他のモジュールによってインポートされ使用され、開発者がより小さな、再使用可能なコンポーネントを構成することによってアプリケーションを構築することを可能にし得る。
【0030】
WebAssemblyコンポーネントモデルの主な利益のうちの1つは、開発者が、C、C++、Rustおよび他を含む、様々なプログラミング言語でコードを書き、次いで、それをWASMにコンパイルすることを可能にすることである。これは、既存のコードベースおよびライブラリを活用し、異なるプログラミング言語の強度を利用することを可能にする。
【0031】
加えて、WebAssemblyコンポーネントモデルは、コンポーネントを互いから隔離し、1つのコンポーネント内の障害がアプリケーションの全体的な安全性に影響を及ぼさないことを保証するのに役立つ方法を提供する。これは、大きく複雑なアプリケーションを構築し、維持することを容易にする。
【0032】
全体的に、WebAssemblyコンポーネントモデルは、ウェブアプリケーションを構築するためのフレキシブルかつスケーラブルな手法を提供し、開発者が、より小さな、再使用可能なコンポーネントからアプリケーションを構築し、様々なプログラミング言語を使用してそれを行うことを可能にする。
【0033】
カスタムコード108のコンパイルされたバイトコードフォーマット112は、次いで、アプリケーション論理106の部分として、構成可能な処理フレームワーク102内にロードされ得る。
【0034】
別の例示的な実施形態では、WebAssembly(または同様の)コンポーネントモデルの速度および隔離能力は、アプリケーション開発者がマルチテナントアプリケーションを作成することを可能にするために活用される。隔離は、あるテナントがデータを読み取ること、コードを破壊すること、または他のテナントのファイルシステムから読み取ることを防ぐ。
【0035】
WASMがブラウザの外部で実行されることを可能にする(WASMがシステム呼び出しを行うことを可能にする)ことにおける最近の開発により、様々な言語がWASMでコンパイルされることに対するサポートは、WASMをサーバのない様式で実行されるのに適したものにし得ることにも留意されたい。
【0036】
図2は、1つの例示的な実施形態による、ソフトウェア環境でカスタムコードを作成する方法200を示す流れ図である。図2の動作は、図1の構成可能な処理フレームワーク102など、構成可能な処理フレームワークによって実行され得る。
【0037】
動作202において、データモデルにアクセスする。データモデルは、アプリケーション開発者によって、たとえば、CDSを使用して作成されている可能性がある。動作204において、データモデルをコンポーネントモデルにコンパイルする。コンポーネントモデルは、たとえば、WebAssemblyコンポーネントモデルであってよい。
【0038】
動作206において、コンポーネントモデルをユーザ言語にコンパイルする。ユーザ言語がWebAssemblyなどのバイトコードフォーマットにコンパイルされ得る限り、ユーザ言語はアプリケーション設計者が選定する任意の言語である。ユーザ言語の一例は、Rustである。
【0039】
流れ図の動作は構成可能な処理フレームワークによって実行されるため、この流れ図に図示されていないが、この時点で、アプリケーション開発者は、コンパイルされたコンポーネントモデルを使用して、カスタムコードをユーザ言語で作成する。アプリケーション開発者は、次いで、このカスタムコードをWebAssemblyなどのバイトコードフォーマットにコンパイルする。
【0040】
動作208において、構成可能な処理フレームワークは、(バイトコードフォーマットでコンパイルされた)コンパイルされたカスタムコードをデータモデルによって定義された動作を処理することが可能なホスト言語で書かれた汎用サーバとしてロードする。ホスト言語は、フレームワーク開発者が選択する任意の言語である。ホスト言語の一例は、コアクエリ表記である。
【0041】
この段階で、アプリケーション論理(図1のアプリケーション論理106など)がセットアップされ、実行準備ができている。この実行は、要求の受信と、受信要求に基づく要求またはイベントの生成とを含み得る。図3は、1つの例示的な実施形態による、ソフトウェア環境でカスタムコードを使用する方法300を示す図である。動作302において、第1のプロトコル内の要求を受信する。動作304において、第1のトランスフォーマを使用して、第1のプロトコル内の要求をホスト言語に変換する。この第1のトランスフォーマは、具体的には、第1のプロトコル内の要求をホスト言語に変換するように設計される。1つの例示的な実施形態では、第1のプロトコルはHTTPであり、ホスト言語はコアクエリ表記である。
【0042】
動作306において、図2の動作208において構成可能な処理フレームワークにロードされた、コンパイルされたカスタムコードが、第1のトランスフォーマを使用して、ホスト言語に変換されている要求を処理する。ここからの出力は、データベースまたは他のデータ要求など、何らかのアクションである。動作308において、第2のトランスフォーマを使用して、この出力を第1のプロトコルに変換する。第2のトランスフォーマは、ホスト言語を第1のプロトコルに変換するように具体的に設計される。動作310において、第1のプロトコル内でメッセージに対して動作している第1のクライアントが変換された出力を処理する。
【0043】
動作312において、第2のプロトコル内の要求を受信する。動作314において、第3のトランスフォーマを使用して、第2のプロトコル内の要求をホスト言語に変換する。この第3のトランスフォーマは、第2のプロトコル内の要求をホスト言語に変換するように具体的に設計される。1つの例示的な実施形態では、第2のプロトコルはAMQPである。
【0044】
動作316において、コンパイルされたカスタムコードが、第3のトランスフォーマを使用してホスト言語に変換されている要求を処理する。ここからの出力は、データベースまたは他のデータ要求など、何らかのアクションである。動作318において、第4のトランスフォーマを使用して、この出力を第2のプロトコルに変換する。第4のトランスフォーマは、ホスト言語を第2のプロトコルに変換するように具体的に設計される。動作320において、第2のプロトコル内のメッセージに対して動作している第2のクライアントが、変換された出力を処理する。
【0045】
上記の開示に鑑みて、様々な例が以下に記載される。例の1つまたは複数の特徴は、独立してまたは組み合わせて、本出願の本開示内であるとみなされるべきであることに留意されたい。
【0046】
実施例1.少なくとも1つのハードウェアプロセッサと、
命令を記憶したコンピュータ可読媒体と
を備え、命令は、少なくとも1つのハードウェアプロセッサによって実行されると、少なくとも1つのハードウェアプロセッサに、
データモデルにアクセスすることと、
データモデルをコンポーネントモデルにコンパイルすることと、
コンポーネントモデルをユーザプログラミング言語にコンパイルすることであって、ユーザプログラミング言語が、バイトコードフォーマットにコンパイル可能なプログラミング言語である、コンパイルすることと、
ユーザ言語で書かれたカスタムコードにアクセスすることであって、カスタムコードが、コンパイルされたコンポーネントモデルを含む、アクセスすることと、
カスタムコードをバイトコードフォーマットにコンパイルすることと、
コンパイルされたカスタムコードを、ホストプログラミング言語を実行するフレームワークにロードすることと、
コンパイルされたカスタムコードを実行して、サーバプロセスを作成することと
を含む動作を実行させる、システム。
【0047】
実施例2.サーバプロセスが、カスタムコードへの入力を第1のフォーマットからホストプログラミング言語に変換する、コンポーネントモデルに基づく、少なくとも1つのインターフェースと、カスタムコードからの出力をホストプログラミング言語から第1のフォーマットに変換する、コンポーネントモデルに基づく、少なくとも1つのインターフェースとをさらに含む、実施例1のシステム。
【0048】
実施例3.第1のフォーマットが、ハイパーテキストトランスファープロトコル(HTTP)である、実施例2のシステム。
【0049】
実施例4.バイトコードフォーマットがWebAssemblyである、実施例1から3のいずれかのシステム。
【0050】
実施例5.コンポーネントモデルがWebAssemblyコンポーネントモデル(WASM)である、実施例4のシステム。
【0051】
実施例6.ホストプログラミング言語がコアクエリ表記である、実施例1から5のいずれかのシステム。
【0052】
実施例7.フレームワークが、コンパイルされたコンポーネントモデルを、ホストプログラミング言語に適合するインターフェースにコンパイルする、実施例1から6のいずれかのシステム。
【0053】
実施例8.データモデルにアクセスするステップと、
データモデルをコンポーネントモデルにコンパイルするステップと、
コンポーネントモデルをユーザプログラミング言語にコンパイルするステップであって、ユーザプログラミング言語が、バイトコードフォーマットにコンパイル可能なプログラミング言語である、コンパイルするステップと、
ユーザプログラミング言語で書かれたカスタムコードにアクセスするステップであって、カスタムコードが、コンパイルされたコンポーネントモデルを含む、アクセスするステップと、
カスタムコードをバイトコードフォーマットにコンパイルするステップと、
コンパイルされたカスタムコードを、ホストプログラミング言語を実行するフレームワークにロードするステップと、
コンパイルされたカスタムコードを実行して、サーバプロセスを作成するステップと
を含む、方法。
【0054】
実施例9.サーバプロセスが、カスタムコードへの入力を第1のフォーマットからホストプログラミング言語に変換する、コンポーネントモデルに基づく、少なくとも1つのインターフェースと、カスタムコードからの出力をホストプログラミング言語から第1のフォーマットに変換する、コンポーネントモデルに基づく、少なくとも1つのインターフェースとをさらに含む、実施例8の方法。
【0055】
実施例10.第1のフォーマットが、ハイパーテキストトランスファープロトコル(HTTP)である、実施例9の方法。
【0056】
実施例11.バイトコードフォーマットがWebAssemblyである、実施例8から10のいずれかの方法。
【0057】
実施例12.コンポーネントモデルがWebAssemblyコンポーネントモデル(WASM)である、実施例11の方法。
【0058】
実施例13.ホストプログラミング言語がコアクエリ表記である、実施例8から12のいずれかの方法。
【0059】
実施例14.フレームワークが、コンパイルされたコンポーネントモデルを、ホストプログラミング言語に適合するインターフェースにコンパイルする、実施例8から13のいずれかの方法。
【0060】
実施例15.命令を記憶した非一時的機械可読媒体であって、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、
データモデルにアクセスすることと、
データモデルをコンポーネントモデルにコンパイルすることと、
コンポーネントモデルをユーザプログラミング言語にコンパイルすることであって、ユーザプログラミング言語が、バイトコードフォーマットにコンパイル可能なプログラミング言語である、コンパイルすることと、
ユーザ言語で書かれたカスタムコードにアクセスすることであって、カスタムコードが、コンパイルされたコンポーネントモデルを含む、アクセスすることと、
カスタムコードをバイトコードフォーマットにコンパイルすることと、
コンパイルされたカスタムコードを、ホストプログラミング言語を実行するフレームワークにロードすることと、
コンパイルされたカスタムコードを実行して、サーバプロセスを作成することと
を含む動作を実行させる、非一時的機械可読媒体。
【0061】
実施例16.サーバプロセスが、カスタムコードへの入力を第1のフォーマットからホストプログラミング言語に変換する、コンポーネントモデルに基づく、少なくとも1つのインターフェースと、カスタムコードからの出力をホストプログラミング言語から第1のフォーマットに変換する、コンポーネントモデルに基づく、少なくとも1つのインターフェースとをさらに含む、実施例15の非一時的機械可読媒体。
【0062】
実施例17.第1のフォーマットが、ハイパーテキストトランスファープロトコル(HTTP)である、実施例16の非一時的機械可読媒体。
【0063】
実施例18.バイトコードフォーマットがWebAssemblyである、実施例15から17のいずれかの非一時的機械可読媒体。
【0064】
実施例19.コンポーネントモデルがWebAssemblyコンポーネントモデル(WASM)である、実施例18の非一時的機械可読媒体。
【0065】
実施例20.ホストプログラミング言語がコアクエリ表記である、実施例15から19のいずれかの非一時的機械可読媒体。
【0066】
図4は、上記で説明したデバイスのうちのいずれか1つまたは複数の上に設置され得るソフトウェアアーキテクチャ402を示すブロック図400である。図4は、ソフトウェアアーキテクチャの非限定的な例に過ぎず、本明細書で説明する機能性を促すために、多くの他のアーキテクチャが実装され得ることを諒解されよう。様々な実施形態において、ソフトウェアアーキテクチャ402は、プロセッサ510、メモリ530、および入出力(I/O)コンポーネント550を含む、図5の機械500など、ハードウェアによって実装される。この例示的なアーキテクチャでは、ソフトウェアアーキテクチャ402は、各レイヤが特定の機能性を提供し得るレイヤのスタックとして概念化され得る。たとえば、ソフトウェアアーキテクチャ402は、オペレーティングシステム404、ライブラリ406、フレームワーク408、およびアプリケーション410などのレイヤを含む。随意に、アプリケーション410は、いくつかの実施形態に沿って、ソフトウェアスタックを通してAPI呼出し412を起動し、API呼出し412に応答して、メッセージ414を受信する。
【0067】
様々な実装形態において、オペレーティングシステム404は、ハードウェアリソースを管理し、共通サービスを提供する。オペレーティングシステム404は、たとえば、カーネル420、サービス422、およびドライバ424を含む、カーネル420は、いくつかの実施形態に沿って、ハードウェアと他のソフトウェアレイヤの間の抽象化レイヤとして活動する。たとえば、カーネル420は、数ある機能性のなかでも、メモリ管理、プロセッサ管理(たとえば、スケジューリング)、コンポーネント管理、ネットワーキング、およびセキュリティ設定を提供する。サービス422は、他のソフトウェアレイヤに対する他の共通サービスを提供し得る。ドライバ424は、いくつかの実施形態によれば、基礎となるハードウェアの制御、またはそのハードウェアとの対話を担う。たとえば、ドライバ424は、ディスプレイドライバ、カメラドライバ、Bluetooth(登録商標)またはBluetooth(登録商標)Low-Energyドライバ、フラッシュメモリドライバ、シリアル通信ドライバ(たとえば、ユニバーサルシリアルバス(USB)ドライバ)、Wi-Fi(登録商標)ドライバ、オーディオドライバ、電力管理ドライバ、などを含み得る。
【0068】
いくつかの実施形態では、ライブラリ406は、アプリケーション410が利用する低レベルの共通インフラストラクチャを提供する。ライブラリ406は、メモリ割振り機能、文字列処理機能、数学機能、などの機能を提供し得る、システムライブラリ430(たとえば、C標準ライブラリ)を含み得る。加えて、ライブラリ406は、メディアライブラリ(たとえば、ムービングピクチャエキスパーツグループ4(MPEG4)、アドバンストビデオコーディング(H.264またはAVC)、ムービングピクチャエキスパーツグループレイヤ3(MP3)、アドバンストオーディオコーディング(AAC)、適応型マルチレート(AMR)オーディオコーデック、ジョイントフォトグラフィックエキスパーツグループ(JPEGまたはJPG)、またはポータブルネットワークグラフィックス(PNG)など、様々なメディアフォーマットの提示および操作をサポートするためのライブラリ)、グラフィックスライブラリ(たとえば、ディスプレイ上でグラフィックコンテキスト内に2Dおよび3Dでレンダリングするために使用されるOpenGLフレームワーク)、データベースライブラリ(たとえば、様々なリレーショナルデータベース機能を提供するためのSQLite)、ウェブライブラリ(たとえば、ウェブブラウジング機能性を提供するためのWebKit)、など、APIライブラリ432を含み得る。ライブラリ406は、多くの他のAPIをアプリケーション410に提供するための、多種多様な他のライブラリ434を含んでもよい。
【0069】
フレームワーク408は、いくつかの実施形態によれば、アプリケーション410が利用し得るハイレベル共通インフラストラクチャを提供する。たとえば、フレームワーク408は、様々なグラフィカルユーザインターフェース(GUI)機能、ハイレベルリソース管理、ハイレベルロケーションサービス、などを提供する。フレームワーク408は、そのうちのいくつかが特定のオペレーティングシステム404またはプラットフォーム固有であり得る、アプリケーション410が利用し得る他のAPIの広いスペクトルを提供し得る。
【0070】
1つの例示的な実施形態では、アプリケーション410は、ホームアプリケーション450、連絡アプリケーション452、ブラウザアプリケーション454、ブックリーダアプリケーション456、ロケーションアプリケーション458、メディアアプリケーション460、メッセージングアプリケーション462、ゲームアプリケーション464、および第三者アプリケーション466など、他の幅広い各種アプリケーションを含む。いくつかの実施形態によれば、アプリケーション410は、プログラム内で定義される機能を実行するプログラムである。オブジェクト指向プログラミング言語(たとえば、Objective-C、Java、またはC++)または手続き型プログラミング言語(たとえば、C言語またはアセンブリ言語)など、様々な様式で構築された、アプリケーション410のうちの1つまたは複数を作成するために、様々なプログラミング言語が採用され得る。特定の例では、第三者アプリケーション466(たとえば、特定のプラットフォームのベンダー以外のエンティティによるAndroid(商標)またはiOS(商標)ソフトウェア開発キット(SDK)を使用して開発されたアプリケーション)は、iOS(商標)、Android(商標)、Windows(登録商標)Phone、または別のモバイルオペレーティングシステムなど、モバイルオペレーティングシステム上で実行するモバイルソフトウェアであってよい。この例では、第三者アプリケーション466は、本明細書で説明する機能性を促すために、オペレーティングシステム404が提供するAPI呼出し412を起動することができる。
【0071】
図5は、1つの例示的な実施形態による、その中で、本明細書で論じる方法論のうちのいずれか1つまたは複数を機械500に実行させるための命令のセットが実行され得るコンピュータシステムの形態の機械500の図表示を示す。具体的には、図5は、その中で機械500に本明細書で論じた方法論のうちのいずれか1つまたは複数を実行させるための命令516(たとえば、ソフトウェア、プログラム、アプリケーション、アプレット、アプリ、または他の実行可能コード)が実行され得る、コンピュータシステムの例示的な形態の機械500の図表示を示す。たとえば、命令516は、機械500に図2~3の方法を実行させ得る。加えて、または代替として、命令516は、図1~3などを実装し得る。命令516は、一般的な非プログラマブル機械500を、説明し例示した機能を説明した様式で実行するようにプログラムされた特定の機械500に変換する。代替実施形態では、機械500は、スタンドアロンデバイスとして動作するか、または他の機械に結合され(たとえば、ネットワーク接続され)得る。ネットワーク接続された展開では、機械500は、サーバ-クライアントネットワーク環境でサーバ機械またはクライアント機械の容量内で動作し得るか、またはピアツーピア(または分散型)ネットワーク環境でピア機械として動作し得る。機械500は、限定はしないが、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ(PC)、タブレットコンピュータ、ラップトップコンピュータ、ネットブック、セットトップボックス(STB)、携帯情報端末(PDA)、エンターテインメントメディアシステム、セルラー電話、スマートフォン、モバイルデバイス、ウェアラブルデバイス(たとえば、スマートウォッチ)、スマートホームデバイス(たとえば、スマート家電)、他のスマートデバイス、ウェブアプライアンス、ネットワークルータ、ネットワークスイッチ、ネットワークブリッジ、または機械500によって行われる活動を指定する命令516を、連続的にまたは別様に、実行することが可能な任意の機械を含み得る。さらに、単一の機械500のみが示されているが、「機械」という用語は、本明細書で論じる方法論のうちのいずれか1つまたは複数を実行するための命令516を個々にまたは一緒に実行する機械500の収集物を含むとやはり理解すべきである。
【0072】
機械500は、バス502を介してなど、互いと通信するように構成され得る、プロセッサ510、メモリ530、およびI/Oコンポーネント550を含み得る。1つの例示的な実施形態では、プロセッサ510(たとえば、中央処理装置(CPU)、縮小命令セットコンピュータ(RISC)プロセッサ、複合命令セットコンピュータ(CISC)プロセッサ、グラフィックス処理装置(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、無線周波数集積回路(RFIC)、別のプロセッサ、またはそれらの任意の好適な組合せ)は、たとえば、命令516を実行し得る、プロセッサ512およびプロセッサ514を含み得る。「プロセッサ」という用語は、命令516を同時に実行し得る、2つ以上の独立したプロセッサ(「コア」と呼ばれることもある)を含み得るマルチコアプロセッサを含むことが意図される。図5は、複数のプロセッサ510を示すが、機械500は、単一のコアを備えた単一のプロセッサ512、複数のコアを備えた単一のプロセッサ512(たとえば、マルチコアプロセッサ512)、単一のコアを備えた複数のプロセッサ512、514、複数のコアを備えた複数のプロセッサ512、514、またはそれらの何らかの組合せを含み得る。
【0073】
メモリ530は、各々が、バス502を介してなど、プロセッサ510にアクセス可能な、メインメモリ532、スタティックメモリ534、およびストレージユニット536を含み得る。メインメモリ532、スタティックメモリ534、およびストレージユニット536は、本明細書で説明する方法論または機能のうちのいずれか1つまたは複数を実施する命令516を記憶する。命令516は、機械500によるその実行中、メインメモリ532内に、スタティックメモリ534内に、ストレージユニット536内に、プロセッサ510のうちの少なくとも1つの中に(たとえば、プロセッサのキャッシュメモリ内に)、またはそれらの任意の好適な組合せの中に、完全にまたは部分的に、存在してもよい。
【0074】
I/Oコンポーネント550は、入力を受信するため、出力を提供するため、出力を生み出すため、情報を送信するため、情報を交換するため、測定値を捕捉するためなど、多種多様なコンポーネントを含み得る。特定の機械内に含まれる特定のI/Oコンポーネント550は、機械のタイプに依存することになる。たとえば、モバイルフォンなどのポータブルマシンは、タッチ入力デバイスまたは他のそのような入力機構を含む可能性が高いことになるが、ヘッドレスサーバマシンは、そのようなタッチ入力デバイスを含まない可能性が高いことになる。I/Oコンポーネント550は、図5に示されていない多くの他のコンポーネントを含み得ることを諒解されよう。I/Oコンポーネント550は、以下の議論を単に簡素化するために機能性に従ってグループ化され、このグループ化は、決して限定的ではない。様々な例示的な実施形態では、I/Oコンポーネント550は、出力コンポーネント552および入力コンポーネント554を含み得る。出力コンポーネント552は、視覚コンポーネント(たとえば、プラズマディスプレイパネル(PDP)、発光ダイオード(LED)ディスプレイ、液晶ディスプレイ(LCD)、プロジェクタ、または陰極線管(CRT))、音響コンポーネント(たとえば、スピーカ)、ハプティックコンポーネント(たとえば、振動モータ、抵抗機構)、他の信号生成器、などを含み得る。入力コンポーネント554は、英数字入力コンポーネント(たとえば、キーボード、英数字入力を受信するように構成されたタッチスクリーン、フォトオプティカルキーボード、または他の英数字入力コンポーネント)、ポイントベースの入力コンポーネント(たとえば、マウス、タッチパッド、トラックボール、ジョイスティック、モーションセンサー、または別のポインティング器機)、触覚(tactile)入力コンポーネント(たとえば、物理ボタン、タッチまたはタッチジェスチャのロケーションおよび/または力を提供するタッチスクリーン、または他の触覚入力コンポーネント)、オーディオ入力コンポーネント(たとえば、マイクロフォン)、などを含み得る。
【0075】
さらなる例示的な実施形態では、I/Oコンポーネント550は、幅広いコンポーネントのなかでも、バイオメトリックコンポーネント556、動きコンポーネント558、環境コンポーネント560、または位置コンポーネント562を含み得る。たとえば、バイオメトリックコンポーネント556は、表現(たとえば、手の表現、顔の表現、音声表現、身体ジェスチャ、または目の動き)を検出するため、生体信号(たとえば、血圧、心拍、体温、発汗、または脳波)を測定するため、人物を識別するため(たとえば、音声識別、網膜識別、顔識別、指紋識別、または脳波図ベース識別)、などのコンポーネントを含み得る。動きコンポーネント558は、加速度センサーコンポーネント(たとえば、加速度計)、重力センサーコンポーネント、回転センサーコンポーネント(たとえば、ジャイロスコープ)、などを含み得る。環境コンポーネント560は、たとえば、照明センサーコンポーネント(たとえば、フォトメータ)、温度センサーコンポーネント(たとえば、待機温度を検出する1つまたは複数の温度計)、湿度センサーコンポーネント、圧力センサーコンポーネント(たとえば、気圧計)、音響センサーコンポーネント(たとえば、背景雑音を検出する、1つまたは複数のマイクロフォン)、近接性センサーコンポーネント(たとえば、付近のオブジェクトを検出する赤外線センサー)、ガスセンサー(たとえば、安全性のために有害ガスの濃度を検出するための、または大気中の汚染物質を測定するための、ガス検出センサー)、または周囲の物理環境に対応する指示、測定値、または信号を提供し得る他のコンポーネントを含み得る。位置コンポーネント562は、ロケーションセンサーコンポーネント(たとえば、全地球測位システム(GPS)受信機コンポーネント)、高度センサーコンポーネント(たとえば、高度計、または高度の派生源であり得る空圧を検出する気圧計)、方位センサーコンポーネント(たとえば、磁力計)、などを含み得る。
【0076】
通信は、多種多様な技術を使用して実装され得る。I/Oコンポーネント550は、それぞれ、結合582および結合572を介してネットワーク580またはデバイス570に機械500を結合するように動作可能な通信コンポーネント564を含み得る。たとえば、通信コンポーネント564は、ネットワークインターフェースコンポーネントまたはネットワーク580とインターフェースするための別の好適なデバイスを含み得る。さらなる例では、通信コンポーネント564は、ワイヤード通信コンポーネント、ワイヤレス通信コンポーネント、セルラー通信コンポーネント、近距離無線通信(NFC) コンポーネント、Bluetooth(登録商標)コンポーネント(たとえば、Bluetooth(登録商標)Low Energy)、Wi-Fi(登録商標)コンポーネント、および他のモダリティを介して通信を提供するための他の通信コンポーネントを含み得る。デバイス570は、別の機械、または(たとえば、USBを介して結合された)多種多様な周辺デバイスのうちのいずれかであってよい。
【0077】
その上、通信コンポーネント564は、識別子を検出し得るか、または識別子を検出するように動作可能なコンポーネントを含み得る。たとえば、通信コンポーネント564は、無線周波数識別(RFID)タグリーダコンポーネント、NFCスマートタグ検出コンポーネント、光学リーダコンポーネント(たとえば、統一商品コード(UPC)バーコードなどの一次元バーコード、QRコード(登録商標)、Aztecコード、データマトリックス、Dataglyph、MaxiCode、PDF417、ウルトラコード、UCC RSS-2Dバーコードなどの多次元バーコード、および他の光コードを検出するための光センサー)、または音響検出コンポーネント(たとえば、タグ付けされたオーディオ信号を識別するためのマイクロフォン)を含み得る。加えて、インターネットプロトコル(IP)ジオロケーションを介したロケーション、Wi-Fi(登録商標)信号三角測量を介したロケーション、特定のロケーションを示し得るNFCビーコン信号の検出によるロケーション、など、様々な情報が通信コンポーネント564を介して派生し得る。
【0078】
様々なメモリ(すなわち、530、532、534、および/またはプロセッサ510のメモリ)および/またはストレージユニット536は、本明細書で説明する方法論または機能のうちのいずれか1つまたは複数を実施するかまたはそれによって利用される、命令516およびデータ構造(たとえば、ソフトウェア)の1つまたは複数のセットを記憶し得る。これらの命令(たとえば、命令516)は、プロセッサ510によって実行されると、様々な動作に開示する実施形態を実装させる。
【0079】
本明細書で使用される「機械記憶媒体」、「デバイス記憶媒体」、および「コンピュータ記憶媒体」という用語は、同じものを意味し、互換的に使用され得る。これらの用語は、実行可能命令および/またはデータを記憶する、単一または複数の記憶デバイスおよび/または媒体(たとえば、中央データベースまたは分散型データベース、および/または関連するキャッシュおよびサーバ)を指す。これらの用語は、したがって、限定はしないが、固体メモリ、およびプロセッサの内部または外部のメモリを含めて、光媒体および磁気媒体を含むと理解すべきである。機械記憶媒体、コンピュータ記憶媒体、および/またはデバイス記憶媒体の特定の例は、例として、半導体メモリデバイス、たとえば、消去可能プログラマブル読取り専用メモリ(EPROM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、フィールドプログラマブルゲートアレイ(FPGA)、およびフラッシュメモリデバイスを含む不揮発性メモリ;内部ハードディスクおよびリムーバブルディスクなどの磁気ディスク;光磁気ディスク;ならびにCD-ROMディスクおよびDVD-ROMディスクを含む。「機械記憶媒体」、「コンピュータ記憶媒体」、および「デバイス記憶媒体」という用語は、その少なくともいくつかが以下で論じる「信号媒体」という用語の範囲下にある、搬送波、変調データ信号、および他のそのような媒体を具体的に除外する。
【0080】
様々な例示的な実施形態では、ネットワーク580の1つまたは複数の部分は、アドホックネットワーク、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、ワイヤレスLAN(WLAN)、広域ネットワーク(WAN)、ワイヤレスWAN(WWAN)、メトロポリタンエリアネットワーク(MAN)、インターネット、インターネットの一部分、公衆交換回線網(PSTN)の一部分、基本電話サービス(POTS)ネットワーク、セルラー電話ネットワーク、ワイヤレスネットワーク、Wi-Fi(登録商標)ネットワーク、別のタイプのネットワーク、または2つ以上のそのようなネットワークの組合せであってよい。たとえば、ネットワーク580またはネットワーク580の一部分は、ワイヤレスネットワークまたはセルラーネットワークを含んでよく、結合582は、符号分割多元接続(CDMA)接続、モバイル通信用グローバルシステム(GSM)接続、または別のタイプのセルラー結合もしくはワイヤレス結合であってよい。この例では、結合582は、シングルキャリア無線送信技術(1xRTT)、エボリューションデータオプティマイズド(EVDO)技術、汎用パケット無線サービス(GPRS)技術、GSM進化型高速データレート(EDGE)技術、3Gを含む第3世代パートナーシッププロジェクト(3GPP(登録商標))、第4世代ワイヤレス(4G)ネットワーク、ユニバーサル移動通信システム(UMTS)、高速データパケットアクセス(HSPA)、ワールドワイドインターオペラビリティフォーマイクロウェーブアクセス(WiMAX)、ロングタームエボリューション(LTE)規格、様々な規格設定組織によって定義される他の技術、他の長距離プロトコル、または他のデータ転送技術など、様々なタイプのデータ転送技術のうちのいずれかを実装し得る。
【0081】
命令516は、ネットワークインターフェースデバイス(たとえば、通信コンポーネント564内に含まれるネットワークインターフェースコンポーネント)を介して送信媒体を使用して、またいくつかの周知の転送プロトコルのうちのいずれか1つ(たとえば、ハイパーテキストトランスファープロトコル[HTTP])を利用して、ネットワーク580上で送信または受信され得る。同様に、命令516は、デバイス570に対する結合572(たとえば、ピアツーピア結合)を介して送信媒体を使用して送信または受信され得る。「送信媒体」および「信号媒体」という用語は、同じものを意味し、本開示において互換的に使用され得る。「送信媒体」および「信号媒体」という用語は、機械500によって実行するための命令516を記憶、符号化、または搬送することが可能な任意の無形媒体を含み、そのようなソフトウェアの通信を円滑にするためのデジタル通信信号もしくはアナログ通信信号または他の無形媒体を含むと理解すべきである。したがって、「送信媒体」および「信号媒体」という用語は、任意の形態の変調データ信号、搬送波、などを含むと理解すべきである。「変調データ信号」という用語は、その特性セットのうちの1つまたは複数を有するか、または信号内の情報を符号化するような形で変更された、信号を意味する。
【0082】
「機械可読媒体」、「コンピュータ可読媒体」、および「デバイス可読媒体」という用語は、同じものを意味し、本開示において互換的に使用され得る。これらの用語は、機械記憶媒体と送信媒体の両方を含むように定義される。したがって、これらの用語は、記憶デバイス/媒体と搬送波/変調データ信号の両方を含む。
【符号の説明】
【0083】
100 システム
102 構成可能な処理フレームワーク
104 データモデル
106 アプリケーション論理
108 カスタムコード
110 ユーザ言語
112 バイトコードフォーマット
114 コンポーネントモデル
116 HTTPトリガ
118 アドバンストメッセージキューイングプロトコル(AMQP)トリガ
120 HTTP->CQNトランスフォーマ
122 AMQP->CQNトランスフォーマ
124 CQN->HTTPトランスフォーマ
126 HTTPクライアント
128 CQN->AMQPトランスフォーマ
130 AMQPクライアント
400 ブロック図
402 ソフトウェアアーキテクチャ
404 オペレーティングシステム
406 ライブラリ
408 フレームワーク
410 アプリケーション
412 API呼出し
414 メッセージ
420 カーネル
422 サービス
424 ドライバ
430 システムライブラリ
432 APIライブラリ
434 他のライブラリ
450 ホームアプリケーション
452 連絡アプリケーション
454 ブラウザアプリケーション
456 ブックリーダアプリケーション
458 ロケーションアプリケーション
460 メディアアプリケーション
462 メッセージングアプリケーション
464 ゲームアプリケーション
466 第三者アプリケーション
500 非プログラマブル機械
502 バス
510 複数のプロセッサ
512 プロセッサ
514 プロセッサ
516 命令
530 メモリ
532 メインメモリ
534 スタティックメモリ
536 ストレージユニット
550 入出力(I/O)コンポーネント
552 出力コンポーネント
554 入力コンポーネント
556 バイオメトリックコンポーネント
558 動きコンポーネント
560 環境コンポーネント
562 位置コンポーネント
564 通信コンポーネント
570 デバイス
572 結合
580 ネットワーク
582 結合
図1
図2
図3
図4
図5
【外国語明細書】